1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

実装して理解するマルチエージェントのデザインパターン - ③: AlphaCodium - 作業フロー自体を設計する

1
Posted at

コロンビア大学の博士課程でAI・セキュリティの研究をしている Koukyosyumei です。

本連載では、Claude CodeやCodexを使い、さまざまなマルチエージェント研究のワークフローをh5i-python SDKで再実装します。役割分担、レビュー、投票、合議といった設計パターンを、実際に動くコードから理解することを目的としています。

本記事では、コード生成の前後に分析とテスト生成の工程を挟み込むフローを提案している AlphaCodium(Ridnik et al., 2024) を紹介します。

image.png

論文概要

AlphaCodiumの主張は、コード生成の品質を上げたければ、プロンプトの言い回しを磨くより、生成の前後の工程を設計せよというものです。著者らはこの考え方をプロンプトエンジニアリングに対するフローエンジニアリングと呼び、次の一連の流れとして定式化しています。

  • 問題リフレクション: コードを書く前に、目的・入出力・エッジケースを構造化して分析
  • AIテスト生成: 素朴な実装が見落とすエッジケースを突く追加テストを生成
  • コード生成: リフレクションと全テストを踏まえて実装
  • 反復: 公開テストとAIテストの両方が通るまで修正を繰り返す

同じGPT-4を使っても、フローの有無で結果は大きく変わります。競技プログラミングのベンチマークCodeContestsでは、単純なプロンプトによるpass@5が19%だったのに対し、AlphaCodiumのフローを通すと44%まで向上しました。モデルを変えずに、工程の設計だけで正答率が2倍以上になった計算です。

h5i-python を用いた実装

h5i-pythonは、Claude CodeやCodexを組み合わせ、様々なマルチエージェント・オーケストラレーションをPythonコードとして実装できるライブラリです。

このh5i-pythonは、監査可能なAI エージェント向けワークスペースを提供するh5iを内部で用いており、h5iが提供する安全なサンドボックスやエージェント間通信を簡単に使うことができます

まずは、分析を担当するAnalystと実装を担当するCoderを登録しましょう。

from h5i.orchestra import Conductor, Review, Verification

async with Conductor(".", "alphacodium-demo", launcher="resident", isolation="supervised") as c:
    analyst = await c.hire("analyst", runtime="claude", model="claude-haiku-4-5")
    coder = await c.hire("coder", runtime="codex", model="gpt-5.4-mini", effort="medium")

次に、コードを書く前の問題リフレクションです。ここで使っているaskは、ファイルを変更するworkとは別の、エージェントからJSON形式のデータを受け取るためのAPIです。parse=に渡した関数が応答を検証し、goal・inputs・outputs・edge_casesのどれかが欠けた応答はエラーメッセージ付きで自動的に再質問されます。

reflection = await analyst.ask(
    f"Problem: {task}\n\nReflect on it in structured form. Reply as "
    'JSON: {"goal": "...", "inputs": "...", "outputs": "...", '
    '"edge_cases": ["..."]}',
    parse=parse_reflection,
)

続いて、リフレクションで見つかったエッジケースを突く追加テストをAnalystに設計させます。

ai_tests = await analyst.ask(
    f"Problem: {task}\nReflection:\n{json.dumps(reflection, indent=2)}\n\n"
    f"Design {N_AI_TESTS} ADDITIONAL tests that probe the edge cases "
    "and failure modes a naive solution would miss. Reply as JSON: "
    '{"tests": ["<concise test description>", ...]}',
    parse=parse_tests,
)

準備が整ったので、Coderに実装させます。タスク本来のテストに加えて、いま生成したAIテストのカバーも必須条件としてプロンプトに含めます。

artifact = await coder.work(
    f"{task}\n\nProblem reflection:\n{json.dumps(reflection, indent=2)}\n\n"
    "Beyond the task's own tests, your test suite MUST also cover:\n"
    + "\n".join(f"- {t}" for t in ai_tests),
    expect_independent=True,
)
await c.freeze()

最後に、反復ループです。テストは新しいサンドボックス内で中立的に実行され、失敗した場合はその証拠がレビューとしてCoderに戻り、全テストが通るまで修正が続きます。

for iteration in range(1, MAX_ITERATIONS + 1):
    verification = await c.verify(artifact, VERIFY)
    if verification.applies_cleanly and verification.tests_passed:
        break
    if iteration == MAX_ITERATIONS:
        break
    artifact = await coder.revise(
        artifact,
        Review(
            reviewer="flow-iterate",
            target=coder.id,
            round=artifact.round,
            body=(
                "Verdict: REVISE\n\nThe suite (public + AI-generated "
                f"tests) failed neutrally:\n{describe(verification)}\n\n"
                "Fix the implementation; keep every test."
            ),
            referenced_artifacts=(artifact.id,),
        ),
    )

全体のコードは、alphacodium.pyに置いてあり、以下のように簡単に実行することができます。

pip install h5i-orchestra
python examples/papers/alphacodium.py "implement quicksort with pytest"

このPythonプログラムを実行すると、tmuxを用いてClaude CodeやCodexのセッションが自動で立ち上がり、実装・通信を始めます。

h5i-python-short (2).gif

参照

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?