记忆与上下文管理:长期记忆不是把所有东西都塞进去

上下文问题的本质:信息太多 + 证据太少

多数“Agent 失控”不是因为模型不聪明,而是因为:

  • 上下文膨胀:塞太多,成本和噪声都上升
  • 证据缺失:关键事实没被检索到,只能凭空猜

所以记忆管理的目标不是“存更多”,而是“让证据可得、可引用、可更新”。

记忆分层:至少分三层

建议你把记忆分成三种(分别用不同策略存与取):

  • 短期(session):本次任务临时信息,任务结束就丢
  • 任务(task):这个任务的中间状态、工具输出、关键决策
  • 长期(long-term):跨任务复用的偏好、规范、知识索引

如果你把它们混在一起,会出现:

  • 个人偏好污染任务证据
  • 旧任务状态影响新任务结论

摘要策略:不要把全文放进 prompt

建议对“长文本/长日志/长 diff”走两步:

  1. 先做结构化摘要(可评测)
  2. 需要细节时再做定点引用(检索到原文片段)

结构化摘要例子:

{
  "topic": "incident_summary",
  "key_events": ["..."],
  "root_cause_hypotheses": ["..."],
  "evidence_needed": ["..."],
  "next_actions": ["..."]
}

检索与引用:输出必须带证据

当你做“长期记忆”或“知识索引”,你需要强制一个规则:

  • 结论必须带引用(source id / url / file path / snippet)

否则它就会退化成“看起来很对但无法验证”的文本生成。

更新与遗忘:长期记忆必须可替换

长期记忆不是“越积越多”。你要有:

  • TTL 或版本:旧规范过期就淘汰
  • 冲突策略:新旧偏好冲突时以哪个为准
  • 删除接口:允许显式删除错误记忆

动手做:一个可控的“记忆读取协议”

让 Agent 读记忆时,不要直接把记忆全文塞进去,而是:

  1. 先检索:只取 top-k 片段
  2. 再压缩:把片段压成结构化要点
  3. 再生成:基于要点 + 引用生成输出

这样你就能:

  • 控制 token 成本
  • 保留证据链
  • 让评测更容易(要点与引用可比较)

工程化清单

  • 记忆分层:session/task/long-term
  • 长文本先摘要再引用,不直接全塞
  • 输出带引用,支持验证
  • 长期记忆可更新可删除,有版本/TTL

常见坑

  • 把“偏好”当成“事实”:长期污染输出
  • 只存不取:记忆系统没有检索策略就是摆设
  • 不带引用:无法评测、无法排障

下一篇:Evals:为 Skill 建立回归集与评分规则

← 返回博客列表