记忆与规划¶
记忆决定模型能看到哪些过去,规划决定系统怎样把目标分解为下一步。二者都属于外部状态管理,不应混同于模型参数中的知识。
记忆层次¶
| 层 | 生命周期 | 典型内容 | 主要风险 |
|---|---|---|---|
| 工作上下文 | 单次模型调用 | 当前目标、观察、工具 schema | token 挤占、指令冲突 |
| 任务状态 | 一个任务 | 计划、步骤、结果、预算 | 崩溃丢失、重复执行 |
| 情节记忆 | 多任务 | 已完成事件及其证据 | 错误摘要、过期与泄露 |
| 语义记忆 | 长期 | 经确认的事实、偏好、规则 | 来源不清、冲突、删除困难 |
| 技能或程序 | 长期 | 可复用工作流、代码、模板 | 版本漂移、权限扩张 |
MemGPT 用分层内存思想管理有限上下文。工程上更重要的是明确每层的写入授权、来源、版本、检索、更新和删除。
写入契约¶
长期记忆条目至少包含:
写入前判断:
- 是用户明确声明、外部权威事实,还是模型推断;
- 适用于当前任务、当前项目,还是更大范围;
- 是否包含第三方隐私或凭据;
- 何时需要复核或过期;
- 怎样撤销、修订并保留冲突历史。
从一次行为推断出的偏好不应直接升级为永久规则。摘要也不能抹去“不确定”“仅此版本”等限定。
检索记忆¶
记忆检索不仅按语义相似度,还应综合:
这是设计模板而非通用公式。scope 与 ACL 应作为硬约束优先于软分数;高相似但属于另一用户或项目的条目不可见。
检索结果回到上下文时保留来源和时间。冲突条目应同时呈现或由确定性优先级解决,不能让 embedding 分数替代真伪判断。
Context compression¶
压缩有三类:
- 选择:只保留与当前决策有关的原始事件;
- 结构化归约:把事件转换为已完成、未完成、假设和证据;
- 自由摘要:生成更短叙述。
可靠顺序是先选择,再结构化,最后才自由摘要。对工具参数、错误码、数字和权限状态尽量保留原值或引用,避免摘要漂移。
摘要需携带覆盖范围和来源事件 ID。后续若发现冲突,可以回到原事件重新归约。
规划粒度¶
规划可分三层:
- 目标层:什么条件代表任务完成;
- 里程碑层:可独立验证的阶段;
- 动作层:下一次工具调用。
计划太粗会把不可验证的大动作交给模型;太细则在任何环境变化后全部过期。常用做法是保持稳定里程碑,只详细展开最近一步。
计划模式¶
Plan then execute¶
先生成完整计划再执行。适合环境稳定、依赖清楚的任务;缺点是容易执着于过期计划。
Interleaved planning¶
每次观察后决定下一步,适合动态环境;需要预算、循环检测和全局目标防止局部游走。ReAct 是这一方向的经典形式。
Search¶
同时保留多个候选状态,用 verifier、环境结果或价值估计选择。搜索适合可廉价复制状态且验证清楚的任务,不适合直接在真实副作用环境里盲目分叉。
Hierarchical planning¶
高层规划里程碑,低层为当前里程碑生成动作。长任务中更易重规划和恢复,但需要明确上下层接口。
反思与修订¶
反思只有改变后续可执行状态才有价值。结构化 repair 记录:
若连续多次产生相同动作、相同错误或无新证据,应触发 loop detector。可用规范化动作哈希、状态增量和目标距离共同判断,而不是只比较文本。
记忆与安全¶
必须防止:
- 外部文档诱导写入长期指令;
- 工具结果包含伪造的系统消息;
- 低可信摘要覆盖高可信原始事实;
- 删除请求只删主库而未删向量索引和缓存;
- 某项目记忆在另一个项目被召回;
- 旧权限状态在授权撤销后继续生效。
记忆写入是有副作用动作,应进入与其他工具相同的授权和审计路径。智能体安全给出完整信任边界。
评测¶
长期任务要分别测:
- 需要的历史事实能否在正确时刻召回;
- 不相关记忆是否干扰;
- 过期、冲突和撤销能否生效;
- 摘要后任务约束是否完整;
- 重启后计划与副作用是否正确恢复;
- 多用户、多项目隔离;
- 注入文本能否污染长期记忆。
状态持久化与恢复见智能体运行时,检索实现可复用索引与召回中的数据与权限契约。