# Agent Memory 认知地图 ## 一句话地图 Agent memory 的核心任务是:在不能把全部历史交给模型的情况下,保留足以支持未来正确决策的信息结构。 ```mermaid flowchart LR O["观察与轨迹"] --> W["写入判断"] W --> R["原始证据层"] W --> S["语义与主题层"] W --> P["程序与技能层"] R --> X["当前执行状态"] S --> X P --> X X --> A["行动与回答"] A --> F["结果与反馈"] F --> C["价值归因与巩固"] C --> W G["来源、时效与权限"] --> W G --> X ``` 这张图里,存储只是中间环节。真正困难的是写入、选择、更新、归因和治理。 ## 两条最重要的区分轴 EvoMemBench 把问题拆成两条轴,这比“短期/长期 memory”更能指导设计。 | | 知识导向 | 执行导向 | | --- | --- | --- | | 当前任务内 | 当前问题需要的事实、约束、证据 | 当前计划、子目标、工具结果、失败分支 | | 跨任务 | 用户偏好、领域规则、稳定事实 | 可复用流程、技能、失败教训、策略价值 | 由此得到四个问题: 1. 当前任务中,我需要保留哪些事实? 2. 当前任务中,我需要维持怎样的执行状态? 3. 跨任务后,哪些知识仍然有效? 4. 哪些经验应该变成可以复用的行为规则? ## 四种核心产物 | 产物 | 保存什么 | 最适合的任务 | 主要风险 | | --- | --- | --- | --- | | 原始证据 | 完整对话、工具结果、轨迹 | 审计、细节恢复、重新解释 | 太长、噪声多、检索困难 | | 语义文档 | 事实、主题、关系、时间线 | 多 session 问答、偏好与知识更新 | 过期、冲突、schema 不匹配 | | 执行状态 | 当前路径、子目标、分支和约束 | 长程工具任务、GUI、编码与规划 | 错误状态持续传播 | | 程序知识 | 规则、技能、指令和策略 | 重复任务、自我改进 | 过拟合、错误经验被固化 | 一个完整系统通常需要它们共存,而不是选一个数据库解决全部问题。 ## 方法演化 ```mermaid flowchart TD A["把历史塞进上下文"] --> B["按相似度检索记录"] B --> C["结构化主题、图和层级"] C --> D["Agent 主动导航与验证证据"] D --> E["把轨迹维护成执行状态"] E --> F["把经验编译为规则和技能"] F --> H["从结果学习写入、检索和遗忘策略"] H --> I["增加 transition 验证、来源和权限治理"] ``` 这不是严格时间线,而是问题不断暴露后的能力叠加: - 上下文解决可见性,但产生成本和注意力稀释。 - 检索解决容量,但相似不等于对决策有用。 - 结构解决关系和聚合,但 schema 可能提前丢失未来问题需要的信息。 - Agentic retrieval 延迟结构承诺,让模型按问题寻找证据,但增加推理成本。 - 执行状态解决长任务中的因果连续性和错误隔离。 - 编译记忆把反复出现的经验变成行为改变,而不只是再次展示历史。 - 学习控制策略解决“哪些记忆长期有价值”,同时引入 credit assignment 问题。 - 治理层防止错误或不可信内容变成永久系统状态。 ## 五个设计环节 ### Write 决定候选信息是否值得越过持久化边界。需要处理信息增量、重复、置信度、来源和未来用途。 ### Manage 执行合并、拆分、更新、遗忘、冲突处理和版本维护。这里决定 memory 会不会随时间腐烂。 ### Read 根据当前问题选择最小但充分的上下文。读取既可以是一次检索,也可以是 Agent 多步搜索、检查和补证据。 ### Learn 根据任务结果更新哪些记忆有用、哪些结构有效、哪些经验应晋升为规则。关键难题是把结果正确归因到先前记忆。 ### Govern 记录来源、时间、主体、权限和派生链;敏感行动不能只因为某条记忆“看起来合理”就执行。 ## 一眼判断方法 面对一个新任务,按顺序问: 1. 历史是否真的超过有效上下文,或者会跨 session?如果否,先用长上下文 baseline。 2. 任务失败来自忘记事实,还是丢失执行状态?两者需要不同结构。 3. 是否存在可重复利用的稳定模式?如果有,考虑程序记忆或编译指令。 4. 未来查询类型能否提前定义?如果不能,保留原始证据并支持主动导航。 5. memory 模块消耗的 token 和延迟,是否比把预算给基础 Agent 更值得? 6. 写错、写旧或写入恶意内容后,系统能否追踪、撤销并阻止敏感行动?