Operations 08
Store
从对话中提炼记忆
思考实验
以下是一段对话。如果你是 Agent,你会记住什么?
用户:帮我写一个处理 CSV 文件的 Python 脚本
Agent:好的,什么类型的 CSV?
用户:销售数据。顺便说一下,我们用 Python 3.11,部署在 Docker 上,数据库是 MySQL
用户:哦对了,我不喜欢 pandas — 太重了
值得记住的:技术栈(Python 3.11 + Docker + MySQL),偏好(不用 pandas)。
不值得记住的:"帮我写个脚本"(任务指令),"好的"(填充语)。
不值得记住的:"帮我写个脚本"(任务指令),"好的"(填充语)。
提取:什么值得保留?
Memory 的第一步不是"存储"——而是"筛选"。Agent 必须从对话中判断哪些信息具有持久价值。标准不是"说了什么",而是"将来什么有用"。
通常值得记住的:
用户画像
姓名、角色、技能水平
技术栈
语言、框架、数据库、部署方式
偏好
喜好、厌恶、编码风格
项目上下文
架构、决策、约束条件
去重:一个事实,一条记录
提取之后是去重。用户在不同会话中会用不同方式表达同一件事:
会话 1:"I like TypeScript"
会话 5:"I prefer TS for development"
会话 20:"TypeScript is my go-to language"
语义等价。应合并为:"用户偏好 TypeScript 作为主要开发语言。"
Mem0 的去重策略
- Vector 比较:将新 Memory 的 embedding 与已有 Memory 比较,找到高相似度候选项。
- LLM 判断:对高相似度候选项,使用 LLM 判定语义是否等价——合并或保留。
这比字符串匹配强得多——"likes TypeScript" 和 "prefers TS" 字符串相似度低,但 vector 相似度高。
真正的质量瓶颈
在 Mem0 的 LoCoMo 基准测试中,相比 OpenAI Memory 的 26% 优势并非来自搜索质量,而是来自提取和去重的质量。一个 Memory 系统的上限不在于能存多少——而在于能多精准地筛选存什么。
下一节
已经存好了。那如何检索?下一节:四种检索策略的对比与融合。