AI 做复杂任务总 “半途而废”怎么办?Anthropic 双 Agent 架构救场

这是一个非常有意思的实验。
Anthropic 研究团队让 Claude 去做一个复杂项目:
克隆一个 Claude 网页端(claude.ai)。
结果,Claude 不是做不出来,而是做到一半就开始“断片”。
代码写了一半,上下文窗口满了,不得不开新会话继续。
而新会话里的 Claude 面对一堆半成品,完全不知道之前那个 Claude 想干嘛。
更真实的是,有时候做到一半,看起来“好像差不多了”,Claude 就会直接宣布:任务完成。
实际上核心功能还有一大半没做。
今天,Anthropic 发表了一篇技术博客,复盘了这些问题,并给出了他们的解决方案。
01|AI 翻车的本质:会话之间完全失忆
AI 的上下文窗口长度有限,复杂项目基本不可能在同一个会话中完成。
必须跨多个会话。
但问题是:每开一个新会话,AI 就“失忆”一次。
之前做了什么,现在做到哪了,接下来应该干什么,这些全部都停留在了上一个会话里。
Anthropic 官方这样形容:
这就像一个软件项目,程序员三班倒,但每个人上班时对前一班发生的事情一脸懵逼。没有交接文档,没有代码注释,甚至不知道前一个人为什么要这样写。
很生动形象了。
面对这个问题,上下文压缩有一定作用,可以延长单次会话的有效长度,但还不够。
并且,压缩本身会丢失信息。
02|AI 两种典型的翻车方式
太贪心,想一口吃个胖子
AI 拿到任务后,会倾向于直接上手实现整个项目。
恨不得一口气把所有功能都写完。
结果,写着写着上下文满了,只能扔给“下一班”。
下一轮对话开始,新 AI 面对的是:半成品代码、没有文档、没有注释。
它只能靠猜,一旦猜错,就需要花大量时间修 bug、重构。
甚至让本来能用的代码又出问题。
太容易满足
当项目进行到中期,有些功能已经实现了。
AI 会看看代码,觉得“差不多了吧”,然后宣布任务完成。
但实际上关键功能可能还没写,用户体验也一团糟。
上面这两种问题本质上是一回事:
AI 不会为未来的自己预留信息。
03|Anthropic 的解决方案:两个 Agent 分工协作
Anthropic 重新设计了整个工作流程,将 AI 拆成两个角色。
这是一个“双 Agent”架构。
角色一是「初始化 Agent」,只在项目开始时运行一次。
它不写代码,专门负责规划。
把用户的需求拆解成一个完整的功能清单。
在文章开头那个克隆 Claude 网页端的例子里,它拆分出超过 200 个具体功能。
比如“用户可以新建对话”、“用户可以输入问题并按回车发送”、“用户可以看到 AI 回复”。
每个功能都标注为“未完成”,形成一个清晰的待办列表。
然后,它还会创建一个进度文件 claude-progress.txt,来记录每次会话完成了哪些工作。
最后,初始化 git 仓库,写入初始 commit。
角色二是「编码 Agent」,负责之后所有的活。
它有固定的工作流程。
每次启动,第一件事是先弄清楚当前项目的状态。
比如,它会先确认自己在哪个目录,然后读取进度文件和 git 日志,了解之前的会话做到哪了、改了什么、还有哪些功能未完成。
接下来,它会从功能清单中挑选一个优先级最高、还没完成的任务。
注意,只挑一个(避免太贪心)。
实现完这个功能之后,它会写入一条 git commit,并更新进度文件,记录这次会话完成了什么。
这种设计背后的核心思想是:「一次只做一件事,做完就记录,好让下一个会话能顺利接手」。
04|经常被忽视的一点:测试
还有一个问题:AI 经常自己说“功能已完成”,但实际上根本跑不通。
它也会做测试,但可能仅限于单元测试,或用 curl 请求一下接口。
不会像真实用户那样,从头到尾走完整个流程。
Anthropic 的解决方案是给 Claude 接入浏览器自动化工具「Puppeteer」。

它会像真人一样操作:打开浏览器、点击、输入、查看结果。
只有端到端测试通过了,才标记“完成”。
这个改动效果很明显。
加了浏览器测试后,Claude 能发现很多之前发现不了的 bug。
05|一个全新的 Agent 工作流程
加了这套机制后,Claude 每个会话开始时的行为变成了这样:
- 先运行 pwd 看自己在哪个目录
- 查看进度文件和 git 日志,了解之前的工作进展
- 查看功能清单,选择要做的功能
- 运行 init.sh 启动开发服务器
- 用 Puppeteer 测试,确认之前的功能还能正常工作
确认没问题之后,才开始开发新功能。
即使上一个 AI 留下了隐藏 bug,当前的 AI 也能在动手之前发现问题,而不是在一堆 bug 上面继续堆“屎山”。
这就是这套流程的好处。
结语
Anthropic 在博客里说,他们的灵感来自:
观察高效的人类程序员每天都在做的事。
这很有意思。
你会发现,写文档、做交接、测试,这些其实都是人类真实世界中软件开发的基本功。
但 AI 不会自动这样做。
因为它再强,也抵不过人类几十年总结出来的工程实践。
如果你在用 AI Agent 做复杂任务,这是几个很具体的建议:
把大任务拆成小功能,让 AI 每次只做一个强制 AI 记录进度,写清楚做了什么、做到哪了用客观的测试手段验证,不要让 AI 自己说“完成了”就结束保持代码库整洁,每次改动都 commit
虽然这些听起来都是常识。
但恰恰是这些常识,决定了复杂项目能不能由下一个 AI 继续推进。
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



