Agent 需要知道已经做过什么、工具返回了什么、还缺少什么。把所有历史消息原样塞进上下文看似简单,却会快速增加成本,并让早期错误长期影响后续决策。
区分三类信息
任务状态属于当前一次运行,例如目标、已完成步骤、当前结果、剩余预算和错误次数。它应该结构化保存,并在任务结束后归档或清除。
短期对话帮助理解最近几轮的代词、选择和澄清。可以保留近期原文,并把更早内容压缩为经过验证的摘要。
长期记忆保存跨任务仍有价值的信息,例如用户明确设置的语言偏好或项目固定背景。长期记忆必须有写入规则、来源、更新时间和删除方式,不能让模型随意把一次推测永久保存。
状态应由程序维护
让模型每一轮重新总结全部状态,容易遗漏或改变字段。运行器应保存工具调用、结果标识、步骤状态和预算,只把当前决策需要的部分提供给模型。
例如研究任务可以维护:待调查问题列表、已使用来源、关键事实、冲突、未解决问题和剩余调用次数。模型提出更新,程序验证结构后再写入。
摘要也可能传播错误
压缩历史时,应区分用户确认的事实、工具返回的观察和模型提出的假设。不要把“可能原因”摘要成“已经确认”。关键标识、数字和限制条件最好保留原始结构,而不是只存在自然语言摘要中。
检索式记忆
长期信息较多时,可以按当前任务检索相关记忆,而不是全部注入。检索结果仍要经过权限和时效检查。用户 A 的记忆绝不能因为语义相似被用户 B 召回。
记忆还需要遗忘机制:用户可以查看和删除个人记忆,过期内容自动失效,敏感数据遵循最短保存原则。
上下文预算
为系统规则、当前目标、工具说明、近期对话、检索资料和工具结果分别设置预算。接近上限时优先删除重复观察和低价值日志,而不是截断系统边界或当前目标。
Agent 的记忆能力不在于“什么都不忘”,而在于在正确时间取回可信、相关并有权限使用的信息,同时让错误和过期内容可以被纠正。