AI News HubLIVE
サイト内リライト4 分で読了

コーディングエージェントの構成要素

コーディングエージェントを効果的にする6つの主要コンポーネント(ライブリポジトリコンテキスト、プロンプトの形状とキャッシュ再利用、ツールアクセスと使用、コンテキスト肥大化の最小化、構造化セッションメモリ、サブエージェントへの委任)を概説し、これらのハーネス機能がどのようにLLMのコーディングタスクにおけるパフォーマンスを向上させるかを説明します。

ソースAhead of AI (Sebastian Raschka)著者: Sebastian Raschka, PhD

本稿では、著者はコーディングエージェントとエージェントハーネスの全体的な設計について包括的に解説します。それらが何であり、どのように機能し、さまざまな部分が実際にどのように組み合わさるかを説明します。著者は『Build a Large Language Model (From Scratch)』および『Build a Large Reasoning Model (From Scratch)』の読者からエージェントについてよく質問を受けるため、参照可能な記事として役立てることを意図しています。

より広く言えば、エージェントは重要なトピックとなっています。なぜなら、実用的なLLMシステムにおける最近の進歩の多くは、より優れたモデルだけでなく、それらをどのように使用するかによるからです。多くの実世界アプリケーションでは、ツール使用、コンテキスト管理、メモリなどの周辺システムが、モデル自体と同様に重要な役割を果たします。これは、Claude CodeやCodexなどのシステムが、同じモデルをプレーンなチャットインターフェースで使用した場合よりもはるかに高性能に感じられる理由を説明するのにも役立ちます。

記事はまず、LLM、推論モデル、エージェントの違いを説明します。LLMはコアの次トークン予測モデルであり、推論モデルは中間推論、検証、または候補回答の検索により多くの推論時計算を費やすように訓練またはプロンプトされたLLMです。エージェントはその上に重ねられる層であり、環境内でモデルを繰り返し呼び出す制御ループと理解できます。エージェントハーネスはエージェントの周りのソフトウェア足場で、コンテキスト、ツール使用、プロンプト、状態、制御フローを管理します。コーディングハーネスはその特殊なケースで、ソフトウェア工学向けにコードコンテキスト、ツール、実行、反復フィードバックを管理します。

次に、コーディングエージェントの6つの主要構成要素を詳述します。

1. ライブリポジトリコンテキスト:これは最も明白でありながら重要なコンポーネントです。ユーザーが「テストを修正して」や「xyzを実装して」と言ったとき、モデルはGitリポジトリ内にいるかどうか、現在のブランチ、プロジェクトドキュメントの場所などを把握すべきです。コーディングエージェントは作業を開始する前に情報(ワークスペースサマリー)を収集し、毎回ゼロから始めることを防ぎます。例えば、エージェントがAGENTS.mdやプロジェクトのREADMEを見れば、実行すべきテストコマンドなどを学習できます。Gitブランチ、ステータス、コミット情報は、現在進行中の変更や焦点を当てるべき場所に関するより多くのコンテキストを提供するのに役立ちます。

2. プロンプトの形状とキャッシュ再利用:エージェントがリポジトリビューを取得したら、その情報を効率的にモデルに供給する方法が問題です。スマートなランタイムは毎回プロンプト全体を再構築するのではなく、安定したプロンプトプレフィックス(一般的な指示、ツール説明、ワークスペースサマリー)を維持し、変更部分のみを更新します。このキャッシュメカニズムにより、セッション中に大部分の情報が繰り返されるため、計算の無駄が大幅に削減されます。

3. ツールアクセスと使用:ツールアクセスにより、コーディングエージェントはチャットボットというよりもエージェントらしくなります。エージェントは任意の構文を自由に生成するのではなく、事前定義された許可ツールのリストから選択し、明確なパラメータを提供します。ランタイムはツール名、引数の妥当性を検証し、実行前にユーザーの承認を求めることができます。この制約は安全性と信頼性の両方を向上させます。例えば、Mini Coding Agentでは、モデルはファイル一覧表示、ファイル読み取り、検索、シェルコマンド実行、ファイル書き込みなどのツールから選択し、正しい形式で引数を提供する必要があります。ランタイムは実行前に、ツールが既知か、引数が有効か、ユーザー承認が必要か、要求されたパスがワークスペース内かなど、複数のチェックを行います。

4. コンテキスト肥大化の最小化:コーディングエージェントは、繰り返しのファイル読み取り、長大なツール出力、ログなどにより、コンテキスト肥大化の影響を特に受けやすいです。優れたフレームワークは、クリッピング、要約、重複排除などの戦略を採用します。重要なコツは、最近のイベントをリッチに保ち、古いイベントはより積極的に圧縮することです。さらに、古いファイル読み取りを重複排除して、モデルがセッション内で同じファイル内容を何度も見続けるのを防ぎます。著者は、多くの見かけ上の「モデル品質」は実際にはコンテキスト品質であると指摘しています。

5. 構造化セッションメモリ:コーディングエージェントは状態を少なくとも2つの層に分離します。ワーキングメモリ(小型で精選された状態)と完全なトランスクリプト(すべてのユーザー要求、ツール出力、LLM応答の完全な履歴)です。ワーキングメモリはタスクの継続性を担当し、現在のタスク、重要なファイル、最近のメモの要約を保持します。完全なトランスクリプトはセッションの再開をサポートし、JSONファイルとして保存されます。コンパクトなトランスクリプトはプロンプト再構築用で、モデルに圧縮された最近の履歴ビューを提供します。一方、ワーキングメモリはターン間で重要な情報を維持するために使用されます。

6. サブエージェントへの委任:エージェントがツールと状態を持つと、委任が有用な能力になります。メインエージェントはサブタスクを制限付きのサブエージェント(例えば読み取り専用や再帰深度制限)に委任し、並列化と高速化を実現できます。設計上の課題は、サブエージェントを生成する方法だけでなく、重複作業を防ぐためにそれらをバインドする方法にもあります。Claude Codeは長期間にわたってサブエージェントをサポートしており、Codexも最近追加しました。サブエージェントは通常、メインエージェントのサンドボックスと承認設定の多くを継承しますが、境界はタスク範囲、コンテキスト、深度に関するものです。

記事はまた、コーディングエージェントとOpenClawを比較しています。OpenClawはローカルな汎用エージェントプラットフォームであり、コーディングも処理できますが、焦点が異なります。コーディングエージェントは、リポジトリで作業する個人がコーディングアシスタントにファイルの検査、コードの編集、ローカルツールの効率的な実行を依頼するために最適化されています。一方、OpenClawはチャット、チャンネル、ワークスペース間で多数の長期実行ローカルエージェントを実行するために最適化されており、コーディングはいくつかの重要なワークロードの1つです。

最後に、著者は新刊『Build A Reasoning Model (From Scratch)』が完成し、現在早期アクセス中であり、夏頃に正式出版される予定であることを発表しています。この本の主なトピックは、推論モデルの評価、推論時スケーリング、自己改善、強化学習、蒸留です。著者は、LLMにおける「推論」を理解する最良の方法は、ゼロから実装することだと考えています。