上下文问题的本质:信息太多 + 证据太少
多数“Agent 失控”不是因为模型不聪明,而是因为:
- 上下文膨胀:塞太多,成本和噪声都上升
- 证据缺失:关键事实没被检索到,只能凭空猜
所以记忆管理的目标不是“存更多”,而是“让证据可得、可引用、可更新”。
记忆分层:至少分三层
建议你把记忆分成三种(分别用不同策略存与取):
- 短期(session):本次任务临时信息,任务结束就丢
- 任务(task):这个任务的中间状态、工具输出、关键决策
- 长期(long-term):跨任务复用的偏好、规范、知识索引
如果你把它们混在一起,会出现:
- 个人偏好污染任务证据
- 旧任务状态影响新任务结论
摘要策略:不要把全文放进 prompt
建议对“长文本/长日志/长 diff”走两步:
- 先做结构化摘要(可评测)
- 需要细节时再做定点引用(检索到原文片段)
结构化摘要例子:
{
"topic": "incident_summary",
"key_events": ["..."],
"root_cause_hypotheses": ["..."],
"evidence_needed": ["..."],
"next_actions": ["..."]
}
检索与引用:输出必须带证据
当你做“长期记忆”或“知识索引”,你需要强制一个规则:
- 结论必须带引用(source id / url / file path / snippet)
否则它就会退化成“看起来很对但无法验证”的文本生成。
更新与遗忘:长期记忆必须可替换
长期记忆不是“越积越多”。你要有:
- TTL 或版本:旧规范过期就淘汰
- 冲突策略:新旧偏好冲突时以哪个为准
- 删除接口:允许显式删除错误记忆
动手做:一个可控的“记忆读取协议”
让 Agent 读记忆时,不要直接把记忆全文塞进去,而是:
- 先检索:只取 top-k 片段
- 再压缩:把片段压成结构化要点
- 再生成:基于要点 + 引用生成输出
这样你就能:
- 控制 token 成本
- 保留证据链
- 让评测更容易(要点与引用可比较)
工程化清单
- 记忆分层:session/task/long-term
- 长文本先摘要再引用,不直接全塞
- 输出带引用,支持验证
- 长期记忆可更新可删除,有版本/TTL
常见坑
- 把“偏好”当成“事实”:长期污染输出
- 只存不取:记忆系统没有检索策略就是摆设
- 不带引用:无法评测、无法排障
下一篇:Evals:为 Skill 建立回归集与评分规则。