🦔

Anthropicの定義する"AI Agent"を理解する

2025/01/03に公開

巷では「AIエージェント」のワードをよく見かける一方、何をAIエージェントと定義するのか自分もフワっとしていたので、2024年12月20日に公開されたAnthropicの「Building effective agents」の記事を読んでみました。

https://www.anthropic.com/research/building-effective-agents

「AIエージェントの定義ははっきりと定まっていません」みたいな文言は方々で見ますが、各社がどういう見解でそのワードを使っているのか、なんとなく理解することはできます。

ちなみに、以下の「うたたね / Masaki Otsuki」さんの記事では各社がどのような位置付けとしているのかがまとまっており、私も勉強させていただきました。ありがとうございます。

https://zenn.dev/neoai/articles/fc5e39cffeb461

※本記事ではAnthropicの記事に焦点を絞り、記事の内容を元に記述しています。

エージェントとワークフローの違い

  • ワークフロー: LLMとツールが事前定義されたコードのパスを通じて調整されるシステム
  • エージェント: LLMが独自のプロセスとツールの使用を動的に指示し、タスクの達成方法を制御するシステム

エージェントを使うべき時

When building applications with LLMs, we recommend finding the simplest solution possible, and only increasing complexity when needed.
(訳)
可能な限り最もシンプルなソリューションを見つけ、必要な場合にのみ複雑さを増やすことをお勧めします。

まずはエージェントかどうかを考えるより、LLMの応答だけでシンプルに実装できないかを考えます。
それだけでは十分な結果が得られない(タスクをこなせない)場合はワークフロー/エージェントを考えます。

より柔軟性とLLMによる意思決定が必要となる場合はワークフローではなくエージェントに切り替えます。

エージェントのパターン

LLMを組み込んだアプリケーションに見られるエージェントシステムの一般的なパターンについて説明されています。

"エージェントとワークフローの違い"でそれぞれの説明を入れましたが、厳密に切り分ける必要はなく、必要に応じて組み合わせて1つのアプリケーションとなります。

1. 拡張LLM

最も基本的な構成は、検索, ツール, メモリなどの拡張機能を備えたLLMを活用して期待したレスポンスの形式で受け取ることです。

OpenAI, Gemini, ClaudeなどいくつかのLLMのエンドポイントでは、様々な機能が提供されています。多くのケースではそれらを活用して期待した結果が得られるかと思います。

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

プロンプトチェーンでは、タスクを一連のステップに分割し、各LLM呼び出しを途中にGateを仲介することで順調に進んでいることを確認します。

この画像では、LLM Call1でLLMをコールしてから、そのレスポンスをGateで処理し、期待した結果であればPass, そうでなければExitとしています。

コールするLLMが多くなるほど処理に時間がかかりますが、細かいタスクに分割できるため、精度の向上が期待されます。

3. ワークフロー: ルーティング

ルーティングは、1つのLLMをRouterとしユーザーのinputをどこのLLMに渡すのが適切かを判断し、より専門的なLLM(プロンプト)で回答できるようにハンドリングします。

1つのLLMで全てのケースに対応させようとすると、プロンプトが複雑化し他の入力のパフォーマンスが低下する可能性があります。

LLM Call1, 2, 3...とそれぞれに特化したLLM(プロンプト)を設定し、inputをどのLLMが処理するのが適切かをRouterが判断します。

4. ワークフロー: 並列化

並列化はタスクを同時に処理し、複数の出力を集約します。

ここでは「セクション化」「投票」の2つの主要なバリエーションがあります。

  • セクション化
    • タスクを独立したサブタスクに分割して並行して実行
    • タスクを分割して同時に実行できるため、直列で実行するよりもレイテンシが小さくなる
  • 投票
    • 同じタスクを複数回実行して、多様な出力を取得
    • 同じinputで複数の回答を得ることができ、信頼性の高い結果が期待できる(多数決で最終的な回答を決定するなど)

5. ワークフロー: オーケストレーターワーカー

オーケストレーターとなるLLMがタスクを動的に分割し、その処理をワーカーが実行、結果を合成します。

タスクを動的に分割したり、ワーカーの処理(順番)を決めたりすることで、ルーティングよりも複雑なタスクを実行できます。

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

1つのLLMが応答を生成し、それを別のLLMが評価することで、レスポンス精度の向上が期待されます。

ただし明確な評価基準があり、反復的なLLM呼び出しによって測定可能な価値が得られる場合に特に効果的です。

7. エージェント

エージェントは、人間のユーザーからのコマンドor対話型のディスカションのいずれかで作業を開始し、タスクを明確にします。タスクが明確になると、エージェントが独立して計画を立て、タスクを実行するステップが実行されます。

エージェントはチェックポイントまたはブロッカーに遭遇した時に、一時停止できます。ここで人間によるフィードバックを受け(Human-in-the-Loop)、その結果に応じてさらに処理を進めるといった処理も可能です。

エージェントはワークフローと違い、必要なステップやフローを予測することが難しい問題に使用できます。

ただし、自律的にエージェントを稼働させることは複雑性が増し、コストが高くなる可能性があります。適切なガードレールや評価、サンドボックス環境での検証などのテストをおすすめします。

まとめ

AIエージェントは様々な定義で使用され、多くの場合7. エージェントを想像します。しかし、実現したいものが必ず複雑に作らなくてはいけないということはなく、AIエージェントも何かを達成するための手段にすぎません。

LangGraphなどのフレームワークを使って複雑な処理をして...などに憧れもありますが、「いかに簡単に、シンプルに作れるか」を考え、なるべく実装/変更コストを抑えて実装していきましょう。

Discussion