マルチ・エージェントのオーケストレーション, i.e. アプリケーションのエージェントのフローについての説明です。LLM によるオーケストレーションと、コードベースのオーケストレーションの 2 種類が考えられます。
OpenAI Agents SDK : マルチ・エージェントのオーケストレーション
作成 : クラスキャット・セールスインフォメーション
作成日時 : 03/23/2025
* 本記事は openai.github.io/openai-agents-python の以下のページを独自に翻訳した上でまとめ直し、補足説明を加えています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
OpenAI Agents SDK : マルチ・エージェントのオーケストレーション
オーケストレーションはアプリケーションのエージェントのフローを指します。どのエージェントがどの順序で実行され、次に何が起きるかをどのように決定するのでしょう?エージェントをオーケストレーションするために、2 つの主要な方法があります :
- LLM に決定を委ねる : これは LLM の知性を使用して、計画し、推論し、そしてそれに基づいて取るステップを決定します。
- コードによるオーケストレーション : コードを使用してエージェントのフローを決定します。
これらのパターンを混在させて組み合わせることができます。それぞれにトレードオフがあり、後述します。
LLM によるオーケストレーション
つまり、自由度が高い (open-ended) タスクが与えられたとき、LLM は、ツールを使用してアクションを取りデータを取得し、ハンドオフを使用してタスクをサブエージェントに委任することで、タスクに取り組む方法を自律的にに計画することができます。例えば、リサーチ・エージェントは以下のようなツールを装備できるでしょう :
- 情報をオンラインで見つける Web 検索
- 独自な (proprietary) データと接続を検索するファイル検索と取得
- コンピュータ上でアクションを実行するコンピュータの使用
- データ分析を行うコード実行
- 計画、レポート作成等に優れた専門エージェントにハンドオフ
このパターンは、タスクの自由度が高く、LLM の知性に頼りたい場合に最適です。ここで最も重要な戦略は以下です :
- 良いプロンプトに投資します。どのようなツールが利用可能であるか、それらの使用方法、そしてどのようなパラメータの操作が必要かを明確にします。
- アプリケーションを監視して反復します。どこで間違えるかを確認して、プロンプトで反復します。
- エージェントが内省 (内部点検, introspect) して改良できるようにする。例えば、ループで実行し、自身を批評させます; あるいは、エラーメッセージを提供して改良させます。
- なんでも得意なことが期待される汎用目的のエージェントではなく、一つのタスクで優れた専門エージェントを持ちます。
- 評価に投資します。これはエージェントをトレーニングして、タスク上で改良し良くなるようにします。
コードによるオーケストレーション
LLM によるオーケストレーションが強力である一方、コードによるオーケストレーションは、速度、コストとパフォーマンスの点でタスクをより決定論的で予測可能とします。ここでの一般的なパターンは :
- 構造化出力 を使用して、コードで検査可能な整形式 (well formed) データを生成します。例えば、エージェントにタスクを幾つかのカテゴリーに分類するように依頼してから、カテゴリーに基づいて次のエージェントを選択することができる場合があります。
- 一つのエージェントの出力を次の入力に変換することで複数のエージェントを連鎖します。ブログ記事の作成のようなタスクを、調査、アウトラインの作成、ブログ記事の作成、その批評、そして改良の一連のステップに分解することができます。
- while ループでタスクを遂行するエージェントを、評価してフィードバックを提供するエージェントとともに、評価するエージェント (evaluator) が出力が特定の基準をパスしたと判断するまで実行します。
- 例えば asyncio.gather のような Python プリミティブを使用して、複数のエージェントを並列に実行します。これは、互いに依存しない複数のタスクがある場合に、速度の点で有用です。
We have a number of examples in examples/agent_patterns.
以上