Skip to content

2.3 Agent 没有记忆——持久状态(Persistent State)

现象

昨天你和 Agent 聊了三小时,完成了项目的 60%。今天打开新会话,Agent 问:

"你好,请问你需要什么帮助?"

所有上下文、进度、决策,全部归零。你需要从头解释一遍项目背景、架构选择、已完成的部分、待办事项……

Agent 每次会话都从零开始,就像一个每天失忆的实习生。


为什么这是大问题?

🧠会话窗口有限,长任务做不完
💨会话结束,所有状态丢失
🔄下次从头开始,重复劳动
📚无法积累项目经验
👥无法在团队间共享上下文

Harness 解决方案

方案一:JSON 特性清单

用结构化文件持久化项目状态:

json
{
  "project": "payment-module",
  "completed": ["user-model", "order-service"],
  "in_progress": "payment-gateway",
  "blocked": ["refund-service|等待第三方API密钥"],
  "decisions": [
    "使用 Stripe 而非 PayPal(原因:国内支持更好)",
    "金额用整数存储(避免浮点精度问题)"
  ],
  "next_steps": ["完成 payment-gateway 集成测试"]
}

Agent 每次启动时读取这个文件,立刻知道项目全貌。

方案二:三步启动协议

Step 1
读取状态加载项目清单、决策记录、待办事项
Step 2
校准理解摘要当前状态,与用户确认理解一致
Step 3
继续推进从断点继续,而非从零开始
💡 效果"你好,需要帮助?" → "上次做到 payment-gateway 集成测试,继续?"

方案三:Git Commit + 交接文档

每次会话结束前,Agent 自动执行:

1git commit"feat(payment): 完成支付网关集成"
2生成 HANDOFF.md本次完成了什么遇到了什么问题下次应该从哪里继续需要注意的事项
3下次会话读取无缝衔接

方案四:Context Reset 协议

当上下文窗口快满时,主动重置而非被动截断:

⚠️ 触发条件上下文使用率 > 80%
📤提取关键信息写入状态文件
🧹清理上下文窗口
📥重新加载精简后的上下文
💡 效果不再"写着写着就忘了前面写的什么",而是"有选择地遗忘,有结构地恢复"

研究发现

研究发现

ETH Zurich 的研究发现:在长对话任务中,Agent 的表现随着对话轮次增加而显著下降。根本原因不是模型能力退化,而是上下文窗口被无效信息填满——关键信息被淹没在噪音中

解决方案不是更大的上下文窗口,而是结构化的状态管理


本节小结

📌 本节核心要点

  • 现象:Agent 每次会话从零开始,无法积累经验和进度
  • 方案:JSON 特性清单、三步启动协议、Git Commit + 交接文档、Context Reset
  • 核心原则:状态管理 ≠ 记忆,是结构化的进度恢复——做了什么、正在做什么、接下来做什么
  • 研究发现:长对话表现下降的根因是信息淹没,解法是结构化状态管理

思考题

  1. 如果你的 Agent 突然有了"持久状态",你希望它记住什么?不希望它记住什么?为什么?
  2. Context Reset 协议在"保留什么"和"丢弃什么"之间做权衡。你会用什么策略来决定?
  3. "HANDOFF.md"的思路和 Git 分支的思路有什么异同?能否结合?

下一节预告

状态管理解决了"记住进度"的问题。但 Agent 还有一个常见问题——它什么都想干,什么都干不好

下一节:Agent 干不了所有事——结构化执行