给 Agent 加记忆:短期、长期、向量记忆怎么设计
张张老师624 阅读
没有记忆的 Agent 像个金鱼,聊两句就忘了前面说啥。但记忆也不是越丰富越好——上下文塞满了,模型反而变笨。这篇文章讲讲我给 Agent 设计记忆的实践。
三层记忆:
1. 短期记忆(对话历史)。最简单,就是把最近 N 轮对话拼进 context。N 选多少很关键:我试过 20 轮,太占 token;10 轮比较平衡。对超长对话,把早期内容做摘要,只保留摘要 + 最近几轮原文。
2. 长期记忆(事实/偏好)。用户在这个 Agent 里说过的重要信息(比如"我在做电商"、"我喜欢简洁的回答"),存成结构化记录,每次对话开始时注入。实现就是一个简单的 JSON 存储,加关键词匹配。
3. 向量记忆(语义检索)。Agent 处理过的历史内容,embedding 后存向量库。新对话来时,检索相关的历史片段补充到 context。这个解决"用户提到上周聊过的话题"的场景。
踩过的坑:
坑一:记忆和当前问题冲突。检索出来的历史片段可能跟当前任务无关甚至矛盾。我加了一个相关性阈值,低于阈值就不注入。
坑二:记忆爆炸。向量检索默认 top-k=5,但每段 500 字,5 段就 2500 字,加上对话历史和 system prompt,一个请求轻松破 8000 token。后来我把注入片段限制在 top-3,且每段截断。
坑三:记忆里的错误被放大。如果 Agent 之前给过错误答案,这个错误会随着记忆被反复引用。我加了一个"用户纠正"的标记:用户明确说"不对/不是这样"时,把对应记忆标记为废弃。
坑四:隐私边界。长期记忆存了什么,用户应该能看能删。我做了个"记忆管理"页面,用户能查看和清除 Agent 记住的内容。
记忆设计没有银弹,核心原则是:只注入当前任务需要的信息,宁少勿多。
评论0
还没有评论,来抢沙发~