最近爆火的Mem0,但是我认为还不够...
Mem0最近在GitHub上热度确实很高,它本质上是在为大语言模型搭建一个智能化的“记忆层”,让AI能够记住用户的偏好、历史互动,从而实现真正的个性化体验。说白了,就是让AI变得更“懂你”。

不过,在仔细研读了源码、结合具体业务场景分析之后,发现这个框架虽然思路巧妙,但真要落地到生产环境,还有不少需要推敲的地方。下面就把这些想法梳理一下,供大家参考。
mem0介绍
截止到7月23日晚,该项目在GitHub上已经收获了15.8k的star,稳稳占据Trending榜首。它的使用场景相当广泛,常见的有:
- :记住用户的学习偏好、进度和历史交互,提供定制化的学习体验。
个性化学习助手
- :通过保留之前的对话上下文,给出更精准的情境感知答复,提升满意度。
AI Agent客服
- :跟踪患者病史、用药计划等,确保护理的连贯性和个性化。
医疗助理
- :记住个人信息、偏好和对话历史,让虚拟角色更有“人情味”。
虚拟伴侣
- :了解用户的常用文档、任务习惯,简化工作流程。
生产力工具
- :记住玩家的选择和策略,动态调整游戏环境,提升沉浸感。
游戏AI
功能梳理
从功能上看,mem0提供了一套完整的内存操作接口,核心就是记忆的增删改查:
- 保存记忆
- 查询相关记忆
- 获取记忆
- 记忆历史
- 删除记忆
同时,它还自带几个比较实用的特性:
- :区分用户级、会话级和AI Agent级记忆,粒度更精细。
多级记忆
- :在交互中持续改进,越用越准。
自适应个性化
- :集成起来很方便。
开发友好的API
- :不同设备上行为统一。
跨平台一致性
- :省去部署的麻烦。
托管服务
如何实现
先看一个官方示例:
# Store a memory from any unstructured text
result = m.add("我今天看了AI无限实验室的一篇文章,觉的还不错.", user_id="alice", metadata={"category": "hobbies"})
print(result)
# Created memory: 看了一篇还不错的AI无限实验室的文章。
通过源码分析,记忆写入(add)背后的逻辑可以拆解为四个步骤:
- 传入带有metadata的自然语言——相当于定义了一个schema,让LLM从非结构化数据中提取更有价值的记忆信息。
- 通过“记忆推演”的prompt(MEMORY_DEDUCTION_PROMPT)结合用户输入,抽取总结出新的记忆片段。
- 然后根据输入数据查询已有的相关记忆。
- 将新记忆与老记忆拼接在一起,通过“更新记忆”的prompt让大模型调用合适的tool来执行操作——tools包括添加记忆、更新记忆、删除记忆。
最后一步,通过function call的结果驱动具体的记忆操作。整个流程可以总结为:mem0的记忆过程本质上全部委托给了大模型,依靠prompt工程来完成记忆推演和更新等关键动作。
翻看源码里的prompt,就会发现经典的大模型prompt起手式:
立角色+述问题+定目标+补要求
You are an expert at merging, updating, and organizing memories. When provided with existing memories and new information, your task is to merge and update the memory list to reflect the most accurate and current information. You are also provided with the matching score for each existing memory to the new information. Make sure to leverage this information to make informed decisions about which memories to update or merge.
Guidelines:
- Eliminate duplicate memories and merge related memories to ensure a concise and updated list.
- If a memory is directly contradicted by new information, critically evaluate both pieces of information:
- If the new memory provides a more recent or accurate update, replace the old memory with new one.
- If the new memory seems inaccurate or less detailed, retain the original and discard the old one.
- Maintain a consistent and clear style throughout all memories, ensuring each entry is concise yet informative.
- If the new memory is a variation or extension of an existing memory, update the existing memory to reflect the new information.
Here are the details of the task:
- Existing Memories:
{existing_memories}
- New Memory: {memory}
翻译过来就是:
您是合并、更新和组织记忆的专家。当提供现有记忆和新信息时,您的任务是合并和更新记忆列表,以反映最准确和最新的信息。您还获得了每个现有记忆与新信息的匹配分数。确保利用这些信息就更新或合并哪些记忆做出最明智的决定。
准则:
-消除重复记忆并合并相关记忆,以确保简洁和更新的列表。
-如果一段记忆与新信息直接矛盾,批判性地评估两条信息:
-如果新记忆提供了更近期或更准确的更新,用新记忆替换旧记忆。
-如果新记忆看起来不准确或不太详细,保留原始记忆并丢弃旧记忆。
-在所有记忆中保持一致和清晰的风格,确保每个条目都简洁而信息丰富。
-如果新记忆是现有记忆的变体或扩展,更新现有记忆以反映新信息。
以下是任务的细节:
-现有记忆:
{existing_memories}
-新记忆:{memory}
再看记忆推演的prompt:
You are an expert at deducing facts, preferences and memories from unstructured text.
Deduce the facts, preferences, and memories from the provided text.
Just return the facts, preferences, and memories in bullet points:
Natural language text: {user_input}
User/Agent details: {metadata}
Constraint for deducing facts, preferences, and memories:
- The facts, preferences, and memories should be concise and informative.
- Don't start by "The person likes Pizza". Instead, start with "Likes Pizza".
- Don't remember the user/agent details provided. Only remember the facts, preferences, and memories.
Deduced facts, preferences, and memories:
翻译如下:
您是从非结构化文本中推断事实、偏好和记忆的专家。
从提供的文本中推断出事实、偏好和记忆。
只需在要点中返回事实、偏好和记忆:
自然语言文本:{user_input}
用户/Agents详细信息:{metadata}
推断事实、偏好和记忆的约束:
-事实、偏好和记忆应该简洁且内容丰富。
-不要从“这个人喜欢披萨”开始。相反,从“喜欢披萨”开始。陈述事实
-不要关注用户/Agent细节信息。只记住事实、偏好和记忆。
推断的事实、偏好和记忆应该是:
总结
mem0确实提供了一个精巧的记忆操作框架,附带了一些好用的周边工具,能帮助开发者快速实现个性化AI功能。但深入分析后发现,它的核心能力几乎全部依赖大模型通过prompt工程来完成记忆的提取和更新。
它能在很大程度上提升AI的个性化程度,通过记住用户画像信息,让产品提供更贴心的服务,想象空间很大。不过,要真正落地到业务系统中,还有几个问题需要正视:
- ——如果模型能力不够,记忆的准确性和一致性都会打折扣。
过分依赖大模型本身的效果
- ——token消耗会很大,成本不容忽视。
每次add操作都会调用大模型处理
- ——实际业务中需要对记忆的粒度、时效性、冲突处理等做更细致的定制。
两类通用prompt难以满足复杂业务场景
从业务落地的角度看,mem0更像是一个通用的记忆设计骨架,具体到某个场景时还需要做大量的补充。比如,你想模拟一个阿尔茨海默病患者的记忆——人的记忆本来就不是线性的:你可能记得昨天吃了什么,但一年前某顿饭早就忘了;可你又偏偏记得三年前生日那天女朋友送你的礼物。这种复杂的记忆规律,靠简单的prompt很难模拟。
因此,实际使用中可能需要:
- :针对不同业务需求,设计更精细的prompt和记忆结构。
细化的记忆组件
- :先判断当前交互是否需要记入记忆,避免每次对话都触发大模型调用,有效控制成本。
前置分类器
总之,mem0提供了一个很好的起点,但距离真正的生产级个性化记忆还有不少路要走。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名