Skip to content

用一队并行的 Claude 构建 C 编译器

发布日期: 2026年2月5日

作者: Nicholas Carlini,Anthropic Safeguards 团队的研究员。


概述

本文描述了一个"Agent 团队"实验——多个 Claude 实例在没有主动人工干预的情况下在共享代码库上并行工作。作者分配了16个 Agent 从零开始编写一个基于 Rust 的 C 编译器,能够编译 Linux 内核。在近2000个 Claude Code Session 和$20,000的 API 成本中,Agent 团队产生了一个100,000行的编译器,可以在 x86、ARM 和 RISC-V 上构建 Linux 6.9。

编译器可在 github.com/anthropics/claudes-c-compiler 获取。

启用长时间运行的 Claude

现有的 Agent 脚手架如 Claude Code 需要操作员在线。为了激发持续的自主进展,作者构建了一个 Harness,将 Claude 放入一个简单的循环中——当它完成一个任务时,立即拿起下一个。Bash 脚本在 while true 循环中使用 claude --dangerously-skip-permissions,每次提交记录输出。Agent 提示指示 Claude 将问题分解为小块,跟踪进度并继续前进。正如作者指出的,"循环永远运行——尽管在一个实例中,我确实看到 Claude 不小心执行了 pkill -9 bash,从而杀死了自己。"

并行运行 Claude

并行运行多个实例解决了两个弱点:单个 Session 一次只能做一件事,多个 Agent 允许专业化。

实现创建了一个裸 Git 仓库,每个 Agent 获得一个挂载了仓库的 Docker 容器。每个 Agent 克隆一个本地副本,工作,然后将更改推送到上游。一个简单的同步算法防止冲突:

  1. Claude 通过向 current_tasks/ 写入文本来"锁定"一个任务。Git 同步迫使第二个 Agent 如果两个 Agent 尝试认领同一个任务则选择不同的任务。
  2. Claude 工作,从上游拉取,合并更改,推送,然后移除锁定。合并冲突很频繁但 Claude 能处理。
  3. 无限循环在新容器中生成新的 Session。

没有编排 Agent——每个 Claude Agent 独立决定如何行动,通常拾取"下一个最明显"的问题。

使用 Claude Agent 团队编程的经验

编写极高质量的测试

Claude 自主工作,因此"任务验证器近乎完美很重要,否则 Claude 会解决错误的问题。"作者构建了持续集成流水线,并在识别出失败模式时加强了强制执行。

站在 Claude 的角度思考

测试 Harness 是为 Claude 而不是人类设计的。指令包括维护广泛的 README 和频繁更新的进度文件。作者围绕 LLM 的固有局限性进行设计:

  • 上下文窗口污染: Harness 不应打印数千个无用字节。重要信息写入日志文件。日志应易于处理——"如果有错误,Claude 应该写 ERROR 并将原因放在同一行,以便 grep 能找到。"聚合摘要统计数据是预计算的。
  • 时间盲视: Claude 无法判断时间,"会愉快地花几个小时运行测试而不是取得进展。"Harness 包含一个 --fast 选项,运行1%或10%的随机样本,每个 Agent 确定性但在 VM 之间随机。

使并行变得简单

当有许多不同的失败测试时,并行化是微不足道的——每个 Agent 选择一个不同的测试。达到99%通过率后,每个 Agent 编译一个不同的小型开源项目(SQLite、Redis、libjpeg、QuickJS、Lua)。

编译 Linux 内核更难,因为它是一个巨大的任务——每个 Agent 都会遇到同一个 bug 并覆盖彼此的更改。修复使用 GCC 作为预言机:一个新的 Harness 随机地用 GCC 编译内核的大部分文件,只用 Claude 的编译器编译剩余的文件,使每个 Agent 能够修复不同文件中的不同 bug。对于一起失败但独立工作的文件对,仍然需要增量调试。

多个 Agent 角色

并行化启用了专业化:一个 Agent 合并重复代码,另一个改进编译器性能,第三个专注于输出高效的编译代码,另一个从 Rust 开发者的角度批评设计,还有一个处理文档。

压力测试 Agent 团队的极限

该项目作为能力基准。之前的 Opus 4 模型勉强能够产生功能性编译器。"Opus 4.5 是第一个跨越门槛的模型,使其能够产生可以通过大型测试套件的功能性编译器。"Opus 4.6 被测试以进一步推进。

评估

在两周的近2000个 Session 中,Opus 4.6 消耗了20亿个输入 Token 并生成了1.4亿个输出 Token,成本接近$20,000。这是一个干净室实现,没有互联网访问,仅依赖 Rust 标准库。

100,000行的编译器可以在 x86、ARM 和 RISC-V 上构建可启动的 Linux 6.9。它还能编译 QEMU、FFmpeg、SQLite、Postgres、Redis,在大多数编译器测试套件(包括 GCC 压力测试套件)上达到99%的通过率,并且可以编译和运行 Doom。

局限性包括:

  • 缺少启动 Linux 超出实模式所需的16位 x86 编译器(为此调用 GCC)
  • 没有自己的汇编器和链接器——这些仍然有些问题,演示使用了 GCC 的汇编器和链接器
  • 成功构建了许多项目但不是全部——还不是真实编译器的直接替代品
  • 生成的代码效率低于禁用所有优化的 GCC
  • Rust 代码质量合理但远未达到专家水平

编译器几乎达到了 Opus 能力的极限。"新功能和 bug 修复经常破坏现有功能。"作为一个特别具有挑战性的例子,Opus 无法实现16位 x86 代码生成器——虽然它可以通过操作码前缀输出正确的16位 x86,但输出超过了 Linux 强制的32k 代码限制,因此 Claude 调用 GCC 来处理 x86(但完全自己编译 ARM 和 RISC-V)。

展望

作者将 Agent 团队定位为展示了"自主实现整个复杂项目的可能性",允许用户制定更雄心勃勃的目标。然而,完全自主的开发伴随着真正的风险——当测试通过时,很容易认为工作已经完成,"而这很少是事实。"作者表达了兴奋和不安,指出"程序员部署他们从未亲自验证过的软件这一想法是一个真正的担忧。"

快速进展"打开了编写大量新代码的大门",预计正面应用将超过负面,但需要"新的策略来安全导航。"

致谢

感谢 Josef Bacik、Edwin Chen、Bernardo Meurer Costa、Jake Eaton、Dan Kelley、Felix Klock、Jannet Park、Steve Weis 以及 Anthropic 其他同事。

AI 落地咨询
艾维禾砺数字科技

企业 AI 落地全链路服务

Agent 开发工作流搭建Claude Code 集成
微信咨询
d187l8801b6124
访问官网 ivheli.com