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 的去重策略

  1. Vector 比较:将新 Memory 的 embedding 与已有 Memory 比较,找到高相似度候选项。
  2. LLM 判断:对高相似度候选项,使用 LLM 判定语义是否等价——合并或保留。

这比字符串匹配强得多——"likes TypeScript" 和 "prefers TS" 字符串相似度低,但 vector 相似度高。

真正的质量瓶颈

在 Mem0 的 LoCoMo 基准测试中,相比 OpenAI Memory 的 26% 优势并非来自搜索质量,而是来自提取和去重的质量。一个 Memory 系统的上限不在于能存多少——而在于能多精准地筛选存什么。


下一节

已经存好了。那如何检索?下一节:四种检索策略的对比与融合。