给 Agent 加记忆之前,先想清楚要记什么
"给 Agent 加上长期记忆"——这句话听起来像是能力升级,实际做起来更像是在给它埋雷。
记忆的三种类型
一、会话内的上下文
这个最简单,就是对话历史。但也不是全塞进去就好:超过一定长度,早期信息会被稀释,而且成本线性增长。我们的做法是保留最近 6 轮完整对话,更早的做摘要。
二、用户偏好
"这个用户喜欢简洁的回答""这个用户在上海""上次说不要用表格"。这类信息值得长期记住,因为它影响每一次输出。
关键是要能改。用户说"以后详细一点",记忆要更新,不能两条都留着自相矛盾。
三、事实性记忆
"这家客户的合同 12 月到期""这个项目对接人是王工"。这类信息最危险——一旦记错,后面所有推理都建立在错误前提上。
我踩过的坑
有个客服 Agent,我给它加了"从对话中自动提取客户信息并记忆"。跑了三天,记忆库里出现了:
- "客户说他们公司有 200 人"(实际是客户在举例,说的是另一家公司)
- "客户对价格不满意"(客户只是问了一句"能便宜吗")
- "客户下周三要方案"(这是客户转述他老板的话)
模型把闲聊、假设、转述全都当成了事实。
后来改成:只记用户明确陈述的信息,而且要求模型在提取时给出原文引用。有了引用,人工抽检就能快速判断对错。
记忆的清理
这一点容易被忽略。记忆会过期、会冲突、会累积垃圾。
我们的规则:
- 每条记忆带时间戳和来源
- 超过 90 天的事实性记忆,标记为"待确认",使用时提示"(信息可能已过期)"
- 同一个 key 有冲突时,以最新的为准,旧的保留在历史里但不参与推理
- 用户说"忘掉这个"要真删,不是标记
一个更务实的做法
与其做自动记忆,不如做用户可见的记忆。
我们现在的做法是:记忆在侧边栏列出来,用户能看到"我记住了这些",能手动删、手动改。这样即使记错了,用户也能纠正,而不是被一个看不见的黑箱困住。
自动记忆省了用户的操作,但把风险也转嫁给了用户。记忆这件事,透明比聪明重要。