並列ClaudeエージェントチームによるCコンパイラの構築
TL;DR
Anthropicの研究者であるNicholas Carliniは、16個の並列なClaude Opus 4.6インスタンスにRustベースのCコンパイラをゼロから自律的に構築させるというタスクを課すことで、「エージェントチーム」の能力を実証しました。完成した10万行のコンパイラは、x86、ARM、およびRISC-V上でLinux 6.9をビルドすることができ、自律的なエージェントチームが、絶え間ない人間の介入なしに、大規模で長期的な技術プロジェクトを処理できることを証明しています。
エージェントチームのアーキテクチャ
人間が常にフィードバックを提供する必要性を超えるために、CarliniはClaudeを継続的なループ内に配置するハーネスを開発しました。あるタスクが完了すると、エージェントは即座に次のタスクを開始し、問題を表形式に細分化し、自身の進捗を追跡するように指示するプロンプトによってガイドされます。
並列実行と同期
複数のエージェントを並列に実行することで、複数の問題の同時デバッグや、専門化されたロールの使用が可能になります。技術的な実装には、ベアgitリポジトリとDockerコンテナが使用されています。
- Infrastructure: 各エージェントは、リポジトリがマウントされた独自のDockerコンテナ内で動作します。エージェントはローカルコピーをクローンし、タスクに従事し、変更をアップストリームリポジトリにプッシュします。
- Synchronization: 重複作業を避けるため、エージェントは
current_tasks/ディレクトリにテキストファイルを書き込むことで、単純なロックメカニズムを使用します。2つのエージェントが同じタスクを主張しようとした場合、git同期によって2番目のエージェントは別のタスクを選択するように強制されます。 - Workflow: エージェントはアップストリームからプルし、他のエージェントからの変更をマージし、自身の更新をプッシュし、ロックを解除します。Claudeは、その結果生じるマージコンフリクトの解決を任されます。
自律的な進捗のためのエンジニアリング
成功する自律的な開発には、モデルが人間の指導なしに、自身を方向付け、自身の作業を検証できる環境が必要です。
高品質な検証
Claudeは与えられた問題を解決するため、モデルが間違った問題を解決してしまうのを防ぐために、タスク検証者はほぼ完璧である必要があります。Carliniは、継続的インテグレーション(CI)パイプラインと、新しい機能が既存の機能を壊さないようにするための厳格な強制を実装しました。
LLMの制約への最適化
ハーネスは、特定の言語モデルの制限を考慮して設計されました。
- Context Window Pollution: トークンを無駄にしないために、ハーネスは最小限の出力を表示し、詳細な情報はファイルにログを記録します。ログは、
grepを使用して簡単に検索できるようにフォーマットされています。 - Time Blindness: LLMは時間を追跡できないため、ハーネスは
--fastオプションを提供し、決定論的な1%または10%のランダムサンプルテストを実行して、フルテストスイートに何時間も費やすことなく、デグレ(退行)を迅速に特定します。
複雑なタスクへのスケーリング
並列化は独立したテストには簡単ですが、Linuxカーネルのコンパイルのようなモノリシックなタスクは、エージェントが互いの作業を上書きしてしまうことがよくあります。これを解決するために、CarliniはGCCを「オンラインの既知の正解コンパイラ・オラクル」として使用しました。
GCCを使用してカーネルの大部分をランダムにコンパイルし、Claudeのコンパイラでそのサブセットのみをコンパイルすることで、エージェントは特定のファイルにおけるバグを並列に特定して修正することができました。このプロセスは、delta debugging技術を使用して、組み合わせて使用したときに失敗し、単独では動作するファイルを特定する手法によってさらに洗練されました。
完成したコンパイラの能力と限界
Claude Opus 4.6を使用し、プロジェクトは2週間で20億個の入力トークンと1億4000万個の出力トークンを消費し、約20,000ドルをコストとして費やしました。
技術的な成果
- Scope: Rust標準ライブラリのみを使用したクリーンルーム実装。
- Compatibility: x86、ARM、およびRISC-V上で起動可能なLinux 6.9をビルドできます。また、QEMU、FFmpeg、SQLite、Postgres、およびRedisをコンパイルします。
- Benchmarks: GCC torture test suiteを含むほとんどのコンパイラテストスイートにおいて99%の合格率を達成し、Doomを正常にコンパイルして実行しました。
現在の限界
- Bootstrapping: 実モードからLinuxを起動するために必要な16ビットx86コンパイラが不足しています。現在は、この特定のフェードにおいてGCCを呼び出しています。
- Toolchain: デモビデオでは、独自の完全な機能を持つアセンブラとリンカが不足しており、GCCに依存しています。
- Efficiency: 生成されたコードは、すべての最適化を無効にしたGCCのコードよりも効率が低いです。
- Code Quality: Rustのソースコードは妥当なものですが、専門的な人間のRustプログラマーの品質には及びません。
自律的な開発への示唆
この実験は、LLMをタブ補完ツールやペアプログラマーとしてではなく、自律的なプロジェクト実行者として扱うことへのシフトをマークしています。生産性の向上への可能性は計り知れませんが、Carliniは、ペネトレーションテストの背景を持つことから、人間が個人的に検証していない、自律的に生成されたソフトウェアのデプロイに関する重大な安全上の懸念を、指摘しています。
Sources
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- Dispatch