複数のエージェントのオーケストレーション
オーケストレーションとは、アプリ内のエージェントの流れのことです。どのエージェントを、どの順序で実行し、次に何をするかをどのように決めるのか。エージェントをオーケストレーションする主な方法は 2 つあります。
- LLM に意思決定を任せる: LLM の知能を使って計画・推論し、それに基づいて取るべき手順を決定します。
- コードによるオーケストレーション: コードでエージェントの流れを決定します。
これらのパターンは組み合わせて使えます。それぞれにトレードオフがあり、以下で説明します。
LLM によるオーケストレーション
エージェントは、instructions、tools、ハンドオフを備えた LLM です。これは、オープンエンドなタスクに対して、LLM が自律的にタスクの進め方を計画し、ツールでアクションやデータ取得を行い、ハンドオフでサブエージェントにタスクを委譲できることを意味します。たとえば、リサーチ用エージェントには次のようなツールを備えられます。
- Web 検索 によるオンライン情報の収集
- ファイル検索 と取得によるプロプライエタリデータや接続先の横断検索
- コンピュータ操作 によるコンピュータ上でのアクション実行
- コード実行 によるデータ分析
- 計画立案、レポート作成などに優れた特化エージェントへのハンドオフ
このパターンは、タスクがオープンエンドで LLM の知能に依拠したい場合に有効です。重要なポイントは次のとおりです。
- 良いプロンプトに投資してください。利用可能なツール、使い方、順守すべきパラメーターを明確にします。
- アプリを監視し、反復改善してください。どこで問題が起きたかを把握し、プロンプトを改善します。
- エージェントが内省して改善できるようにしてください。たとえばループで実行して自己批評させる、エラーメッセージを与えて改善させる、などです。
- 何でもこなす汎用エージェントではなく、単一のタスクに特化して優れたエージェントを用意しましょう。
- evals に投資してください。エージェントの学習と性能向上に役立ちます。
コードによるオーケストレーション
LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度・コスト・パフォーマンスの観点で、より決定的で予測しやすくなります。よくあるパターンは次のとおりです。
- structured outputs を使って、コードで検査できる 適切な形式のデータ を生成します。たとえば、エージェントにタスクをいくつかの カテゴリー に分類させ、そのカテゴリーに基づいて次のエージェントを選ぶことができます。
- あるエージェントの出力を次のエージェントの入力に変換して、複数のエージェントを連鎖させます。ブログ記事執筆のようなタスクを、調査をする - アウトラインを書く - 本文を書く - 批評する - 改善する、という一連のステップに分解できます。
- 評価とフィードバックを行うエージェントと組み合わせて、タスクを実行するエージェントを
while
ループで回し、評価者が所定の基準を満たしたと判断するまで続けます。 - 複数のエージェントを並列実行します。たとえば、Python の基本コンポーネント (primitives) である
asyncio.gather
などを使います。相互に依存しない複数のタスクがある場合の高速化に有効です。
examples/agent_patterns
にサンプルコードを多数用意しています。