用 Agent 做长任务最头疼的不是能力,是记性。一个持续几天的任务,聊到第三天它就忘了第一天说过什么;上下文塞太满,它又开始顾此失彼。这两周我专门折腾了 Agent 的记忆方案,把试过的几招和实际效果记下来。
最先是写周报的智能体翻的车。第三周它把前一周写过的"风险:供应商交付延迟"又原样写了一遍,还写得像新发现。原因很简单:每周的任务都是新会话,上周的上下文它根本看不见。它不是忘了,是从没记住过。
方案一:全部塞上下文。 把历史记录全量带进去。小任务没问题,历史一长,两个恶果:费用线性暴涨,而且模型开始"糊涂",关键信息被淹没在旧对话里,答非所问的次数明显变多。上下文窗口不是越大越好用,就像屋子不是越大越整洁。
方案二:摘要压缩。 每轮任务结束后让模型自己把本次要点压成三五句,存进一个固定文件,下次任务先读这份"工作笔记"。这是性价比最高的一招,周报智能体加上这步之后,再没重复报过同一条风险,因为它每次开场先读笔记。代价是压缩必然丢细节,有一次笔记里记了"报价方案待定",两个月后它理解成了报价系统待开发,闹了误会。我的对策是笔记里关键名词必须带原始链接或文件路径,细节随取随查。
方案三:外置记忆库。 把笔记进一步结构化,按主题存进 SQLite,用时按关键词检索。做了个客户跟进的智能体用的这招,效果确实最好,但维护成本也上来了——什么该记、记多久、怎么淘汰,全要自己定规则。折腾完我的结论是:个人用,方案二够了,方案三是给多人共用、长期沉淀的场景准备的。
记忆要分两层写:事实层(客户叫什么、项目节点是什么)长期保留,状态层(本周推进了什么、卡在哪)每次覆盖。混在一起存,很快就成一锅粥。
还有一个反直觉的点:定期让模型自己整理记忆效果不错。每月让它把笔记去重、合并、标记过时条目,它干这个比新起一个会话干得像样,因为它是带着全量上下文在整理。
记忆这个事,说到底是在替模型补一个它没有的东西——"我上次跟你说过"。补上这一块,智能体才从一次性的问答机,变成一个可以长期共事的同事。