03-状态记忆与任务恢复
核对日期:2026-05-13。
不稳定项:长期记忆产品形态、向量记忆、agent state store、浏览器/IDE Agent 状态恢复机制和隐私治理方案变化较快;生产项目必须结合目标平台重新设计。
1. 学习目标
本专题关注 Agent 的“脑内工作台”:状态和记忆。好的 Agent 不是把聊天历史无限塞回模型,而是维护可读、可恢复、可审计的任务状态。
学完后你应该能做到:
- 区分聊天历史、短期状态、长期记忆和任务日志。
- 设计结构化 Agent state。
- 定义记忆写入、读取、过期和删除策略。
- 处理事实冲突、过期信息和来源追踪。
- 为长任务设计暂停、恢复、交接和失败重试。
2. 状态不是聊天历史
聊天历史是对话记录,状态是任务对象。
| 维度 | 聊天历史 | Agent 状态 |
|---|---|---|
| 内容 | 用户和模型消息 | 目标、事实、计划、证据、错误 |
| 结构 | 时间顺序文本 | 结构化字段 |
| 用途 | 上下文补充 | 控制任务推进 |
| 风险 | 膨胀、污染、遗忘 | 设计成本 |
| 恢复 | 难恢复 | 可恢复 |
Agent 状态应该回答:
- 目标是什么。
- 已经确认了什么。
- 还有什么未解决。
- 下一步是什么。
- 哪些动作需要审批。
- 为什么停住了。
3. 推荐状态对象
{
"task_id": "task_001",
"goal": "分析代码库中登录模块的风险",
"success_criteria": ["定位相关文件", "说明调用链", "列出风险并引用路径"],
"constraints": ["只读", "不能修改文件"],
"facts": [],
"open_questions": [],
"plan": [],
"completed_steps": [],
"pending_actions": [],
"tool_results": [],
"approvals": [],
"errors": [],
"budget": {
"max_steps": 8,
"used_steps": 0,
"max_tokens": 20000
}
}
状态更新规则:
- 新事实必须有来源。
- 冲突事实不能静默覆盖。
- 过期事实要标注。
- 工具原始返回要摘要。
- 高风险状态变更要写入审计。
4. 记忆类型
| 类型 | 内容 | 风险 |
|---|---|---|
| 短期记忆 | 当前任务上下文 | 上下文膨胀 |
| 长期用户记忆 | 用户偏好、习惯设置 | 隐私和过时 |
| 项目记忆 | 代码约定、业务规则 | 版本冲突 |
| 操作记忆 | 历史工具调用 | 敏感信息泄漏 |
| 失败记忆 | 失败样例和修复经验 | 误泛化 |
不是所有信息都应该写入长期记忆。写入比读取更危险。
5. 记忆写入策略
写入前必须判断:
- 是否来自可信来源。
- 是否是稳定事实。
- 是否含敏感信息。
- 是否用户允许保存。
- 是否有过期时间。
- 是否可删除。
不要写入:
- 密钥、token、密码。
- 未经用户确认的偏好。
- 模型猜测。
- 临时任务细节。
- 高敏业务数据。
推荐字段:
| 字段 | 说明 |
|---|---|
memory_id | 记忆 ID |
type | preference / fact / project_rule / failure |
content | 内容 |
source | 来源 |
confidence | 置信度 |
created_at | 创建时间 |
expires_at | 过期时间 |
scope | 用户、项目或组织 |
6. 事实冲突处理
冲突来源:
- 用户偏好改变。
- 文档版本更新。
- 工具返回不一致。
- 历史记忆过期。
- 不同系统口径不同。
处理原则:
新证据不一定覆盖旧证据
高权威来源优先
版本和时间必须展示
冲突进入 open_questions
必要时请求人工确认
反模式:模型自己选择一个看起来合理的事实并继续执行。
7. 任务恢复
长任务需要可暂停和恢复。
恢复需要保存:
- task_id。
- goal。
- state snapshot。
- 已完成步骤。
- 已确认事实。
- 未完成动作。
- 审批状态。
- 工具结果摘要。
- trace id。
- 当前预算。
恢复时要检查:
- 权限是否仍有效。
- 文档或数据是否更新。
- 工具结果是否过期。
- 用户目标是否改变。
- 是否需要重新确认高风险动作。
8. 上下文压缩
长任务不能无限塞历史。
压缩策略:
- 保留目标和成功标准。
- 保留已确认事实和来源。
- 保留未解决问题。
- 保留关键工具结果摘要。
- 丢弃重复推理和无关对话。
- 对高风险动作保留完整审计引用。
压缩输出应该是状态摘要,不是文学性总结。
9. 工程案例
9.1 代码库分析 Agent
状态:
- 目标文件候选。
- 已读文件。
- 调用链假设。
- 风险点。
- 需要验证的问题。
恢复:
- 继续读取未完成候选文件。
- 避免重复搜索相同关键词。
- 保留路径和行号引用。
9.2 客服工单 Agent
状态:
- 用户诉求。
- 订单事实。
- 政策匹配结果。
- 回复草稿。
- 需要审批的动作。
恢复:
- 重新校验订单状态。
- 审批过期则重新申请。
- 不使用过期政策。
10. 常见反模式
| 反模式 | 表现 | 后果 | 修正 |
|---|---|---|---|
| 全靠聊天历史 | 越聊越长 | 遗忘和污染 | 结构化 state |
| 什么都写长期记忆 | 临时信息永久化 | 隐私风险 | 写入策略 |
| 模型猜测入记忆 | “用户可能喜欢” | 误个性化 | 用户确认 |
| 冲突静默覆盖 | 新旧规则混乱 | 错误执行 | 冲突显式化 |
| 恢复不校验权限 | 旧权限继续用 | 越权 | 恢复前重验 |
11. 练习
为“研究资料整理 Agent”设计 state:
- goal。
- success criteria。
- sources。
- confirmed facts。
- open questions。
- draft outline。
- citation map。
- budget。
- recovery checkpoint。
再说明哪些字段可以进入长期记忆,哪些只能保存在当前任务。
12. 验收题
- Agent 状态和聊天历史有什么区别?
- 为什么记忆写入比读取更危险?
- 长期用户记忆需要哪些治理字段?
- 事实冲突时 Agent 应该如何处理?
- 任务恢复前为什么要重新检查权限和数据版本?
- 上下文压缩应该保留哪些信息?