Hugging Face CodeAgents + Structure: 構造化生成によるエージェント信頼性の向上

Hugging Face は、コードベースのアクションの表現力と構造化生成の信頼性を組み合わせることで、AI エージェントの信頼性を向上させる手法を導入しました。CodeAgents に内部推論(thoughts)と実行可能な Python コードの両方を構造化された JSON ブロブとして生成させることで、従来のツール呼び出しや標準的なコード生成アプローチに比べ、複数のベンチマークで大幅に高い成功率を実現しています。

エージェントアクションの進化

AI エージェントは通常、以下の 3 つの主要パラダイムのいずれかでアクションを実行します。

  • Traditional JSON Agents: これらのエージェントは事前定義されたツールから選択し、JSON 形式の呼び出しを生成します。信頼性は高いものの、構成性に欠け、事前定義されたアクションの固定セットに限定されるため、複数回の呼び出しにわたる中間状態管理を必要とするタスクで苦労します。
  • Code Agents: これらのエージェントは実行可能な Python コードを直接記述し、ループ、関数、条件文の中でツールを呼び出すことができます。これにより無制限の柔軟性と状態保持が可能になりますが、Markdown ブロックからコードを抽出する際のパースエラーが発生しやすくなります。
  • Structured CodeAgents: このアプローチは、推論用の thoughts フィールドと実行用の code フィールドを含む JSON オブジェクトの生成を強制します。構造化パースの信頼性と Python コードの完全な表現力を組み合わせたものです。

ベンチマーク結果とパフォーマンス向上

GAIA、MATH、SimpleQA、Frames などのベンチマークでテストした結果、コードアクションと構造化生成を組み合わせることで、能力の高いモデルのパフォーマンスが一貫して向上することが示されました。平均すると、構造化アプローチは従来の CodeAgents を 2〜7 ポイント上回ります。

モデルファミリー別の主な観察結果は以下の通りです:

  • OpenAI models: 推論が重いタスクで特に大きな改善が見られました。
  • Claude models: 強力な結果を示し、特に Claude 3.7 Sonnet が優れた性能を発揮しました。
  • Qwen models: 全体的に改善が見られましたが、サイズが小さいモデルは「構造税」を経験し始めました。

構造化生成が成功率を向上させる理由

パース問題の排除

Markdown ベースのコード抽出におけるパースエラーはエージェントの失敗につながることが頻繁にあります。15,724 件のエージェントトレースを分析したところ、最初の呼び出しでパースエラーが発生したトレースは 2.4% でした。このエラーの影響は深刻です。

  • パースエラーなしのトレース: 成功率 51.3%。
  • パースエラーありのトレース: 成功率 42.3%。

パースエラーがないトレースは、エラーがあるトレースに比べて 21.3% 高い成功率を示しました。さらに、パースエラーは問題解決に要する平均ステップ数を 3.18 から 4.63 に増加させます。

強制的な推論プロセス

thoughts フィールドを必須とすることで、エージェントはコードを実行する前に推論を明示的に述べることを強いられます。これにより、より体系的な計画が可能になり、プロセスの早い段階で論理エラーを捕捉できるようになります。

「構造税」およびモデル能力

構造化生成はすべてのケースで有益というわけではありません。モデルは指示に従う能力と JSON 事前学習が十分でなければ、認知負荷に耐えられません。

mistralai/Mistral-7B-Instruct-v0.3 のような小型モデルは「構造税」に悩まされることがあります。JSON 構文を維持しながら同時に Python コードを書くオーバーヘッドが原因で、文字列の不正や余分なカンマなど構文的に壊れたコードが生成され、即座に SyntaxError が発生します。

実装と使用方法

smolagents ライブラリを使用している場合、CodeAgent を初期化する際に use_structured_outputs_internally=True を設定することで構造化出力を有効にできます。

推奨ユースケース

Structured CodeAgents を使用すべきケース:

  • 能力の高いモデル(最先端モデルまたは 32B 以上のパラメータを持つモデル)を使用する場合。
  • 複雑な推論とコード実行を必要とするタスクを実行する場合。
  • エージェント出力の信頼できるパースが必要な場合。

代替手段を検討すべきケース:

  • 構造化生成に苦戦する小型モデルを使用する場合。
  • シンプルで事前定義されたワークフローで十分な場合。

実装のヒント

  1. Clear Prompting: プロンプトは期待される JSON 構造を明示的に指定する必要があります。
  2. Model Selection: 構造化生成能力が高いモデルを選択してください。
  3. Provider Support: OpenAI や Anthropic など、構造化生成をネイティブにサポートする API プロバイダーを利用し、最大の信頼性を確保してください。

Sources