代码语言

知识点思维导图

34 个知识节点

记忆系统(03) - Agent Memory:截断、总结、检索与生命周期

读完后,你应能完成以下任务:

  • 绘制“记忆系统(03) - Agent Memory:截断、总结、检索与生命周期 / 模型本身没有会话记忆”的关键对象与数据流,解释“所谓“记忆”是应用完成的四件事:保存、选择、压缩、注入。”,并用源码位置、日志或 Trace 标注证据。
  • 为“记忆系统(03) - Agent Memory:截断、总结、检索与生命周期 / 三种策略的真实边界”设计正常与异常输入,验证“截断时要保留完整消息对和工具调用对,不能留下孤立的 tool result。”,输出首个偏差位置与回归测试结果。
  • 实现“记忆系统(03) - Agent Memory:截断、总结、检索与生命周期 / 检索”的最小代码或配置,检验“它能跨会话工作,但必须处理权限、过期、冲突、删除和写入质量。”,输出命令、结果与 Diff,并说明不适用边界。

更新日期:2026/08/11

一、模型本身没有会话记忆

LLM 每次调用只看到应用传入的上下文。所谓“记忆”是应用完成的四件事:保存、选择、压缩、注入。把全部聊天记录原样追加不是记忆系统,只是一个最终会超长、变贵并引入噪声的数组。

先按生命周期分层:

层级 典型内容 主键 保留策略
工作状态 当前计划、工具结果、待审批动作 thread_id 分钟到小时,TTL
短期会话 最近消息、滚动摘要 thread_id 会话级,允许重建
长期语义 用户明确偏好、稳定事实 user_id + namespace 跨会话,可修改删除
情节记忆 某次任务发生了什么 user_id + event_time 衰减、合并或归档
审计日志 工具调用、审批和外部写操作 trace_id 按合规要求,不注入 Prompt

审计日志不等于模型记忆。它可以永久留存以追责,但通常不应整段进入上下文。

二、三种策略的真实边界

2.1 截断

保留最近 N 条或最近一段 Token。它便宜、确定,但可能删掉第一轮的关键约束。截断时要保留完整消息对和工具调用对,不能留下孤立的 tool result。

2.2 检索

把长期事实拆成可检索条目,只在相关问题出现时召回。它能跨会话工作,但必须处理权限、过期、冲突、删除和写入质量。向量相似不等于事实仍有效。

三、按预算组装上下文

综合分数不能只看余弦相似度,可按业务定义为:

相关性 × 可信度 × 新鲜度 × 权限可见性

权限不可见应直接过滤为零;明确事实的可信度高于模型推测;被新事实覆盖的旧记忆应标记失效,而不是同时注入让模型自行裁决。

四、写入长期记忆的闸门

候选事实进入长期库前逐项判断:

  1. 用户是否明确表达,而非模型推断。
  2. 未来会不会复用,临时任务状态不应长期保存。
  3. 是否包含密码、Token、证件号等禁止持久化信息。
  4. 是否与现有事实重复或冲突。
  5. 是否能提供来源时间和删除入口。

“我以后都要中文回答”可以保存为偏好;“帮我把这段临时翻成英文”不能反推出用户永久偏好英文。

五、摘要的数据契约

不要只存一段自然语言,至少保存:

{
  "thread_id": "thread-42",
  "summary_version": 3,
  "covered_until_message_id": "msg-180",
  "goal": "排查支付回调重复入账",
  "confirmed_constraints": ["不能修改历史订单"],
  "completed_steps": ["确认回调存在重试"],
  "open_questions": ["幂等键是否跨租户唯一"],
  "source_message_ids": ["msg-001", "msg-180"]
}

这样才能增量更新、回溯来源和检测摘要遗漏。原始消息的留存期限可以与摘要不同,但删除策略要在产品和合规层明确。

六、验收指标

  • 记忆命中率:需要的记忆是否进入上下文。
  • 错误注入率:无关、过期或冲突记忆被注入的比例。
  • 压缩保真率:摘要是否保留标注的关键事实。
  • Token 节省率:相对全历史输入节省多少上下文。
  • 删除传播时延:用户删除后,缓存、向量索引和副本多久不可检索。
  • 跨用户泄漏率:必须为零,使用自动化权限用例持续验证。

七、常见错误

  • 无限追加 messages,直到请求超出上下文窗口。
  • 把所有对话摘要都永久保存,既污染召回又增加隐私风险。
  • 只更新结构化记录,不删除旧向量,导致旧偏好仍能被召回。
  • 把工具返回原文写入长期记忆,敏感字段和 Prompt Injection 一并持久化。
  • 用“回答看起来正常”代替记忆命中、冲突、删除和权限测试。

八、总结

  • 模型本身没有会话记忆:所谓“记忆”是应用完成的四件事:保存、选择、压缩、注入。
  • 三种策略的真实边界:截断时要保留完整消息对和工具调用对,不能留下孤立的 tool result。
  • 按预算组装上下文:被新事实覆盖的旧记忆应标记失效,而不是同时注入让模型自行裁决。
  • 写入长期记忆的闸门:用户是否明确表达,而非模型推断。 -> 未来会不会复用,临时任务状态不应长期保存。 -> 是否包含密码、Token、证件号等禁止持久化信息。 -> 是否与现有事实重复或冲突。
  • 验收指标:记忆命中率:需要的记忆是否进入上下文。
  • 常见错误:把所有对话摘要都永久保存,既污染召回又增加隐私风险。

九、动手实践:Memory 三策略与 Token 预算

这段实验不调用模型,直接把同一段历史依次经过截断、摘要、长期记忆检索、预算选择,便于观察四个动作各自解决什么问题。

9.1 在线运行

零依赖,Python 3.10+ 可运行。页面中的“运行”使用同一份 main.py,结果不是预先写死的截图。

9.2 重点观察

  • 截断只保留最近消息,因此会丢掉早期约束。
  • 滚动摘要保留目标和约束,但不冒充原始证据。
  • 长期记忆只召回与当前问题相关、未失效且属于当前用户的条目。
  • 最终上下文受预算约束,低分或超预算条目不会注入。

9.3 可运行源码:Agent Memory:截断、总结、检索与生命周期

main.py

学完自测

选择所有正确答案;提交后逐项核对判断依据。

1在“Agent Memory:截断、总结、检索与生命周期”中,需要同时满足“模型本身没有会话记忆”与“截断”。给定正文约束“把全部聊天记录原样追加不是记忆系统,只是一个最终会超长、变贵并引入噪声的数组。”,哪些判断保持了原有处理机制?多选
2“Agent Memory:截断、总结、检索与生命周期”出现偏差:“在“Agent Memory:截断、总结、检索与生命周期 / 检索”中,即使不满足“它能跨会话工作,但必须处理权限、过期、冲突、删除和写入质量”,结果与副作用仍会保持不变。”已成为实际行为。围绕“检索”与“按预算组装上下文”,哪些判断能定位被改变的职责或边界?多选
3评审“Agent Memory:截断、总结、检索与生命周期”方案时,验收条件包含“2. 未来会不会复用,临时任务状态不应长期保存。”。关于“写入长期记忆的闸门”与“摘要的数据契约”的哪些决策符合正文机制?多选