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