Skip to content

用并行 Claude 团队构建 C 编译器

发布日期: 2026 年 2 月 5 日

概述

Anthropic 研究员 Nicholas Carlini 让 16 个 Claude Opus 4.6 实例自主构建一个基于 Rust 的 C 编译器,目标是能够编译 Linux 内核。在近 2000 次 Claude Code 会话和约 2 万美元的 API 成本后,这个智能体团队产出了一个 10 万行的编译器,支持 x86、ARM 和 RISC-V 架构。

实现长时间运行的 Claude

现有的智能体框架需要持续的人工监督。为了实现自主运行,Carlini 创建了一个简单的循环结构:

bash
#!/bin/bash

while true; do
    COMMIT=$(git rev-parse --short=6 HEAD)
    LOGFILE="agent_logs/agent_${COMMIT}.log"

    claude --dangerously-skip-permissions \
           -p "$(cat AGENT_PROMPT.md)" \
           --model claude-opus-X-Y &> "$LOGFILE"
done

智能体提示词指导 Claude 将问题拆分成小块、跟踪进度、确定下一步行动,并持续工作直到完成。"这个循环会永远运行下去",不过 Carlini 提到一个实例意外地终止了自己。

并行运行 Claude

多实例解决了单智能体系统的关键弱点:

  • 串行限制: 一个 Claude Code 会话一次只能处理一个任务;并行智能体可以加速跨扩展项目的调试。
  • 专业化: 专门的智能体可以处理文档、代码质量和专门的子任务,而其他智能体解决主要问题。

同步机制

实现采用了简单的基于 git 的方法:

  1. 智能体通过在 current_tasks/ 目录中创建文本文件来认领任务
  2. Git 的同步机制防止重复工作;冲突的认领会强制智能体选择其他任务
  3. 智能体拉取上游变更、合并修改、推送结果并释放锁
  4. 新容器在连续循环中生成新的 Claude 会话

智能体团队的设计经验

编写极高质量的测试

"Claude 会自主解决我给它的任何问题。所以任务验证器必须近乎完美,否则 Claude 会解决错误的问题。" Carlini 构建了持续集成管道和更严格的执行机制,防止新提交破坏现有功能。

设身处地为 Claude 着想

被投入到没有上下文的新容器中的智能体需要大量的导向信息。Carlini 维护了 README 和进度文件,频繁更新当前状态。

需要设计变通方案的关键限制:

上下文窗口污染: 测试工具应输出最少的字节数,将重要信息记录到文件中。错误消息应在同一行包含 "ERROR",以便 grep 查找。

时间盲目性: Claude 无法跟踪经过的时间,会在测试上花费数小时而不是推进进度。该工具包含一个 --fast 选项,为每个智能体运行确定性的 1-10% 随机样本。

让并行变得简单

最初,当测试套件达到 99% 的通过率时,智能体处理独立的开源项目(SQLite、Redis、libjpeg、MQuickJS、Lua)。然而,编译 Linux 内核——一个整体任务——导致所有智能体反复遇到相同的 bug。

解决方案使用 GCC 作为参考编译器预言机。新的工具使用 GCC 随机编译内核部分,只用 Claude 的编译器测试剩余文件。如果内核工作正常,问题就不存在于 Claude 编译的子集中。这实现了同时对不同文件进行并行调试,直到完成整个编译。

多种智能体角色

并行实现了专业化:

  • 一个智能体合并重复代码
  • 另一个提高编译器性能
  • 第三个优化编译输出效率
  • 一个智能体从 Rust 角度评判设计
  • 另一个处理文档

压力测试结果

评估指标

Opus 4.6 在两周内消耗了 20 亿输入 token 并生成了 1.4 亿输出 token——成本略低于 2 万美元。该编译器:

  • 在 x86、ARM 和 RISC-V 上构建可启动的 Linux 6.9
  • 编译 QEMU、FFmpeg、SQLite、PostgreSQL 和 Redis
  • 在大多数编译器测试套件上达到 99% 的通过率,包括"GCC 折磨测试套件"
  • 通过了开发者的"终极试金石:它可以编译并运行 Doom"

局限性

该编译器仍不完整:

  • 缺少用于实模式 Linux 启动的 16 位 x86 编译器;改为调用 GCC
  • 缺少自定义汇编器和链接器(仍有 bug)
  • 不能普遍替代生产编译器
  • 生成的代码效率低于关闭优化的 GCC
  • Rust 代码质量合理但低于专家标准

一个特别具有挑战性的失败:Opus 无法实现 16 位 x86 代码生成器。虽然通过 66/67 操作码前缀可以生成正确的代码,但输出超过了 Linux 的 32KB 限制。Claude 在 x86 的这个阶段调用 GCC;ARM 和 RISC-V 实现了完全的自编译。

展望未来

智能体团队展示了自主实现复杂项目的能力。"这种方法极大地扩展了 LLM 智能体可实现的范围",使用户能够设定更宏大的目标。

然而,自主开发确实存在真实风险。在开发过程中没有人工监督的情况下,质量保证变得具有挑战性。Carlini——曾在渗透测试领域工作——表达了担忧:"程序员部署他们从未亲自验证过的软件,这是一个真正的问题。"

"构建这个编译器是我最近最有趣的经历之一,但我没想到在 2026 年初这就已经接近可能了。" 语言模型和交互框架的快速进步实现了大量代码生成,但需要新的安全导航策略。

致谢

Nicholas Carlini 感谢 Josef Bacik、Edwin Chen、Bernardo Meurer Costa、Jake Eaton、Dan Kelley、Felix Klock、Jannet Park、Steve Weis 以及众多其他 Anthropic 贡献者。