基于 Anthropic 与 OpenAI 内部工程实践的分析
尽管侧重点不同,两家顶尖 AI 实验室在通过 Agent 进行软件开发时,达成了一些惊人的一致:
核心隐喻:轮班工作。 就像早班和晚班的工程师交接一样,上一个 Agent 必须留下清晰的文档给下一个 Agent。
feature_list.json 和 claude-progress.txt 作为外部存储器,解决上下文丢失问题。init.sh 和基础测试,防止基于错误的代码继续开发。核心隐喻:平台工程。 打造一个专为机器而非人类优化的工厂,所有的文档和工具都是为了让机器能读懂。
docs/ 目录,AGENTS.md 仅作为目录索引。| 维度 | Anthropic (Long-running Agents) | OpenAI (Agent-first World) |
|---|---|---|
| 核心痛点 | 遗忘与幻觉: Agent 在长任务中耗尽上下文,或在中途迷失方向,导致项目烂尾。 | 速度与规模: 人类编写代码速度太慢。目标是将工程速度提高几个数量级。 |
| 上下文管理策略 | “接力棒”模式: 通过极其精简的 claude-progress.txt 和 JSON 状态文件,在不同会话间传递关键信息。 |
“图书馆”模式: 建立分层文档系统(docs/),Agent 按需检索。强调如果 Agent 在仓库里看不到,这个知识就不存在。 |
| 对代码质量的控制 | 测试驱动: 依赖端到端测试(Puppeteer)来验证功能是否真的完成,防止 Agent 欺骗性地标记“完成”。 | Linter 驱动: 依赖自定义的 Linter 和架构规则来强制执行代码风格和依赖关系,防止代码结构随时间“漂移”。 |
| 设计原因 (Why?) | 为了解决可靠性问题。如果不强制分步和状态检查,Agent 会产生看似完成实则破碎的代码。这种设计是为了让目前的模型能“跑完马拉松”。 | 为了解决可维护性问题。在全自动生成的代码库中,如果不通过机械化手段强制执行架构规则(Golden Principles),代码库会迅速变成不可维护的“垃圾山”。 |
| 交互模式 | 初始化 -> 循环执行: 用户设定目标,初始化 Agent 拆解,编程 Agent 循环执行直到完成。 | 人机回环 (Ralph Wiggum Loop): 人类提示 -> Agent 编码 -> Agent 自我审查 -> Agent 修正 -> 合并。 |
这两篇文章实际上是在解决 Agent 软件开发的两个不同阶段的问题:
Anthropic 展示了“如何开始”: 当你需要让 Agent 处理一个超出单次对话窗口的任务时,你需要明确的状态管理和任务交接协议。JSON 状态列表和进度文件是最简单有效的“外部记忆体”。
OpenAI 展示了“如何规模化”: 当 Agent 编写的代码量达到百万行级别,且不再有人类手动维护时,你需要架构约束和可观测性。代码库必须变得对 Agent “可读(Legible)”,这意味着所有的隐性知识(Slack 讨论、口头约定)都必须显性化为仓库里的 Markdown 文档和 Linter 规则。