跳转至

记忆与规划

记忆决定模型能看到哪些过去,规划决定系统怎样把目标分解为下一步。二者都属于外部状态管理,不应混同于模型参数中的知识。

记忆层次

层 生命周期 典型内容 主要风险
工作上下文 单次模型调用 当前目标、观察、工具 schema token 挤占、指令冲突
任务状态 一个任务 计划、步骤、结果、预算 崩溃丢失、重复执行
情节记忆 多任务 已完成事件及其证据 错误摘要、过期与泄露
语义记忆 长期 经确认的事实、偏好、规则 来源不清、冲突、删除困难
技能或程序 长期 可复用工作流、代码、模板 版本漂移、权限扩张

MemGPT 用分层内存思想管理有限上下文。工程上更重要的是明确每层的写入授权、来源、版本、检索、更新和删除。

写入契约

长期记忆条目至少包含:

\[ m=(\text{content},\text{source},\text{scope}, \text{created},\text{validity},\text{confidence},\text{acl}). \]

写入前判断:

  • 是用户明确声明、外部权威事实,还是模型推断;
  • 适用于当前任务、当前项目,还是更大范围;
  • 是否包含第三方隐私或凭据;
  • 何时需要复核或过期;
  • 怎样撤销、修订并保留冲突历史。

从一次行为推断出的偏好不应直接升级为永久规则。摘要也不能抹去“不确定”“仅此版本”等限定。

检索记忆

记忆检索不仅按语义相似度,还应综合:

\[ s(m\mid q)= \alpha s_{\text{semantic}} +\beta s_{\text{recency}} +\gamma s_{\text{scope}} +\delta s_{\text{authority}} -\lambda s_{\text{risk}}. \]

这是设计模板而非通用公式。scope 与 ACL 应作为硬约束优先于软分数;高相似但属于另一用户或项目的条目不可见。

检索结果回到上下文时保留来源和时间。冲突条目应同时呈现或由确定性优先级解决,不能让 embedding 分数替代真伪判断。

Context compression

压缩有三类:

  • 选择:只保留与当前决策有关的原始事件;
  • 结构化归约:把事件转换为已完成、未完成、假设和证据;
  • 自由摘要:生成更短叙述。

可靠顺序是先选择,再结构化,最后才自由摘要。对工具参数、错误码、数字和权限状态尽量保留原值或引用,避免摘要漂移。

摘要需携带覆盖范围和来源事件 ID。后续若发现冲突,可以回到原事件重新归约。

规划粒度

规划可分三层:

  1. 目标层:什么条件代表任务完成;
  2. 里程碑层:可独立验证的阶段;
  3. 动作层:下一次工具调用。

计划太粗会把不可验证的大动作交给模型;太细则在任何环境变化后全部过期。常用做法是保持稳定里程碑,只详细展开最近一步。

计划模式

Plan then execute

先生成完整计划再执行。适合环境稳定、依赖清楚的任务;缺点是容易执着于过期计划。

Interleaved planning

每次观察后决定下一步,适合动态环境;需要预算、循环检测和全局目标防止局部游走。ReAct 是这一方向的经典形式。

同时保留多个候选状态,用 verifier、环境结果或价值估计选择。搜索适合可廉价复制状态且验证清楚的任务,不适合直接在真实副作用环境里盲目分叉。

Hierarchical planning

高层规划里程碑,低层为当前里程碑生成动作。长任务中更易重规划和恢复,但需要明确上下层接口。

反思与修订

反思只有改变后续可执行状态才有价值。结构化 repair 记录:

failed assumption:
new evidence:
state to invalidate:
replacement action:
how to verify:

若连续多次产生相同动作、相同错误或无新证据,应触发 loop detector。可用规范化动作哈希、状态增量和目标距离共同判断,而不是只比较文本。

记忆与安全

必须防止:

  • 外部文档诱导写入长期指令;
  • 工具结果包含伪造的系统消息;
  • 低可信摘要覆盖高可信原始事实;
  • 删除请求只删主库而未删向量索引和缓存;
  • 某项目记忆在另一个项目被召回;
  • 旧权限状态在授权撤销后继续生效。

记忆写入是有副作用动作,应进入与其他工具相同的授权和审计路径。智能体安全给出完整信任边界。

评测

长期任务要分别测:

  • 需要的历史事实能否在正确时刻召回;
  • 不相关记忆是否干扰;
  • 过期、冲突和撤销能否生效;
  • 摘要后任务约束是否完整;
  • 重启后计划与副作用是否正确恢复;
  • 多用户、多项目隔离;
  • 注入文本能否污染长期记忆。

状态持久化与恢复见智能体运行时,检索实现可复用索引与召回中的数据与权限契约。

Reference