Published on

AIエージェント開発におけるシンプルさの重要性:Anthropicの提言

著者
  • avatar
    名前
    Ajax
    Twitter

AIエージェントの定義

AIエージェントの概念は多岐にわたります。独立して思考し、自律的に意思決定を行い、ツールを活用して複雑なタスクを完了できる「万能な執事」と捉える人もいれば、事前に設定された作業手順を忠実に実行する「規則正しい従業員」と考える人もいます。Anthropic社は、これら両方を「インテリジェントシステム」と総称し、ワークフローとエージェントを区別しています。

  • ワークフロー: 大規模言語モデル(LLM)とツールを、予め定められたコードパスを通じて連携させるシステム。
  • エージェント: LLMによって自律的にプロセスやツールの使用方法が決定されるシステム。タスクの完了方法を自ら制御できる点が特徴です。

AIエージェントの選択

Anthropic社は、AIアプリケーション開発において、「シンプルにできるなら、複雑にするな」という原則に従うことを推奨しています。すべての場面で複雑なインテリジェントシステムを構築する必要はありません。インテリジェントシステムは強力な機能を持つ一方で、応答速度の低下やコスト増加を招く可能性があります。開発者は、機能と効率のバランスを考慮する必要があります。

  • ワークフロー: 予測可能性と一貫性が求められる明確なタスクに適しています。
  • エージェント: 柔軟性とモデル主導の意思決定が必要な大規模なシナリオに適しています。

多くのアプリケーションでは、適切なプロンプトと検索、コンテキストの例を組み合わせることで、LLMに直接質問するだけで十分な場合があります。

フレームワークの利用

現在、AIエージェントの構築を支援するフレームワークが多数存在します。

  • LangChainのLangGraph
  • Amazon BedrockのAI Agentフレームワーク
  • ドラッグアンドドロップ式LLMワークフロー構築ツールRivet
  • 複雑なワークフローを構築・テストするためのGUIツールVellum

これらのフレームワークは開発プロセスを簡素化しますが、コードの抽象化レイヤーを増やし、基盤となるロジックの透明性を低下させ、デバッグを困難にする可能性があります。また、シンプルなシナリオで過度に複雑な解決策を導入するリスクもあります。

Anthropic社は、開発者がまずLLMのAPIを直接使用することから始めることを推奨しています。多くのパターンは数行のコードで実装できます。フレームワークを使用する場合は、その基盤となる原理を理解することが重要です。フレームワークの基盤メカニズムに対する理解不足は、開発上の問題を引き起こす主な原因です。

Anthropic社のクックブックには、具体的な例が紹介されています。

構築モジュール、ワークフロー、エージェント

基本構築モジュール:拡張LLM

インテリジェントシステムの基本的な構築モジュールは、検索や記憶などの機能が強化されたLLMです。Anthropic社のモデルは、検索クエリの生成、ツールの選択、保持する情報の決定などの機能を積極的に使用できます。

機能拡張時には、以下の点に焦点を当てる必要があります。

  • 特定のアプリケーションシナリオに合わせて機能をカスタマイズする。
  • モデルにシンプルでドキュメントが完備されたインターフェースを提供する。

Anthropic社が最近リリースしたモデルコンテキストプロトコルは、AIモデルとサードパーティ製ツールエコシステムの統合を簡素化します。

ワークフロー:プロンプトチェーン

プロンプトチェーンは、複雑なタスクを複数のステップに分解し、各ステップでLLMを1回呼び出し、後続のステップは前のステップの結果に基づいて処理を行います。開発者は中間段階にチェックポイントを追加し、プロセスが期待どおりに進んでいることを確認できます。

プロンプトチェーンは、複雑なタスクを明確に一連の固定されたサブタスクに分解できるシナリオに適しています。各モデルは単純なタスクの完了に集中するため、全体的な応答時間がわずかに長くなる可能性がありますが、精度が大幅に向上します。

典型的な応用事例:

  • まずマーケティングコピーを生成し、次にそれを他の言語に翻訳する。
  • まずドキュメントのアウトラインを作成し、コンプライアンスチェックを行い、次にアウトラインに基づいて完全なドキュメントを作成する。

ワークフロー:インテリジェントルーティング

ルーティング技術は入力タスクのタイプを判断し、それらを対応するモジュールに割り当てます。この設計により、各モジュールは特定のタスクに最適化され、異なるタスクタイプ間の相互干渉を回避できます。インテリジェントルーティングは、タスクに明確な分類特性があるシナリオに適しています。AIシステムは、LLMまたは従来のアルゴリズムを使用して、タスクタイプを正確に識別し、ルーティングできます。

典型的な応用事例:

  • カスタマーサービスシステムで、一般的な問い合わせ、返金申請、技術サポートなどの問題をそれぞれ適切なフローに誘導する。
  • 単純で一般的な問題をより小さなモデルに割り当て、困難でまれな問題をより強力なモデルに割り当てることで、コストと速度を最適化する。

ワークフロー:並列処理

LLMはタスクを同時に処理し、プログラム的に出力を集約できます。並列ワークフローの特徴は以下のとおりです。

  • タスクセグメンテーション: タスクを並列実行可能なサブタスクに分割し、最後に結果を統合します。
  • 投票メカニズム: 同じタスクを複数回実行し、最適な結果を選択するか、複数の回答を統合します。

サブタスクを並列実行して速度を向上させたり、より高い信頼性を得るために複数の角度から試行する必要がある場合に、並列処理は非常に効果的です。複雑なタスクでは、各呼び出しを特定の側面の処理に集中させることで、より良い結果が得られます。

典型的な応用事例:

  • タスクセグメンテーション:
    • セキュリティ保護:1つのモデルがユーザーリクエストを処理し、もう1つがコンテンツ監査を実行します。
    • パフォーマンス評価:異なるモデルがシステムパフォーマンス指標を評価します。
  • 投票メカニズム:
    • コードセキュリティチェック:複数の検出モデルが共同でコードの脆弱性を発見します。
    • コンテンツ監査:複数のモデルが異なる角度からコンテンツの安全性を評価します。

ワークフロー:リーダー - 実行者

中央のLLMがタスクを動的に分解し、実行者モデルに割り当て、結果をまとめる。

このワークフローは、具体的なステップを事前に決定することが難しい複雑なタスクに適しています。タスクの分割は固定ではなく、AIシステムが状況に応じて動的に決定します。

典型的な応用事例:

  • 複数のファイルに複雑な変更を加える必要があるプログラミングアプリケーション。
  • 複数のソースから関連情報を収集して分析する必要がある検索タスク。

ワークフロー:評価 - 最適化

1つのLLMの呼び出しで応答を生成し、別のLLMが評価とフィードバックを提供し、ループを形成します。

明確な評価基準が存在し、反復的な改善によって大きな価値が得られる場合に、このワークフローは特に効果的です。LLMは、人間が執筆を繰り返すプロセスと同様のフィードバックを提供できます。

典型的な応用事例:

  • 文学翻訳:評価モデルが翻訳で欠落している言語の差異を検出し、修正提案を提供します。
  • 複雑な検索:評価モデルがさらに深い検索が必要かどうかを判断します。

エージェント

エージェントは、LLMが複雑な入力の理解、推論計画、ツールの使用、エラー回復などの重要な能力において成熟するにつれて登場します。

エージェントの作業は、人間のユーザーからの命令またはインタラクティブな議論から始まります。タスクが明確になると、エージェントは独立して計画と操作を行い、人間に追加情報を要求したり、判断を仰ぐ必要がある場合があります。

実行プロセスの各ステップで、環境から「実際の状況」を取得することが重要です。エージェントはチェックポイントまたはブロックが発生した場合に一時停止して、人間のフィードバックを取得できます。タスクは通常、完了後に終了しますが、多くの場合、停止条件も含まれます。

エージェントは複雑なタスクを処理できますが、その実装は通常シンプルであり、環境フィードバックに基づいてツールを使用するLLMのループにすぎません。したがって、ツールセットとそのドキュメントを明確かつ慎重に設計することが重要です。

エージェントは、必要なステップ数を予測することが難しく、固定パスをハードコーディングできないオープンな問題に適しています。エージェントの自律性は、信頼できる環境でタスクを拡張するための理想的な選択肢となります。エージェントの自律性は、コストが高く、エラーが累積するリスクがあることを意味します。サンドボックス環境で広範なテストを実施し、適切な保護対策を設定することをお勧めします。

エージェントの応用事例:

  • タスクの説明に基づいて複数のファイルを編集するSWE-benchタスクを解決するためのコードエージェント。
  • Anthropic社の「Computer use」機能。Claudeがコンピューターを使用してタスクを実行します。

組み合わせとカスタマイズ

これらの構築モジュールは規定的なものではなく、開発者はユースケースに応じて形成および組み合わせることができます。成功の鍵は、パフォーマンスを測定し、反復的に実装することにあります。よりシンプルな解決策が実現できない場合にのみ、複雑さを増すことを検討する必要があります。LLMの分野で成功するには、最も複雑なシステムを構築するのではなく、ニーズに合ったシステムを構築することが重要です。単純なプロンプトから始め、包括的な評価でそれらを最適化し、よりシンプルな解決策が実現できない場合にのみ、多段階のエージェントシステムを追加します。

エージェントをデプロイする際には、以下の原則に従う必要があります。

  • エージェントの設計をシンプルに保つ。
  • エージェントの透明性を優先し、計画されている各ステップを明確に示す。
  • 包括的なツール文書とテストを通じて、エージェントとコンピューター間のインターフェース(ACI)を慎重に作成する。