OpenAI Agents SDK : マルチ・エージェントのオーケストレーション

マルチ・エージェントのオーケストレーション, i.e. アプリケーションのエージェントのフローについての説明です。LLM によるオーケストレーションと、コードベースのオーケストレーションの 2 種類が考えられます。

OpenAI Agents SDK : マルチ・エージェントのオーケストレーション

作成 : クラスキャット・セールスインフォメーション
作成日時 : 03/23/2025

* 本記事は openai.github.io/openai-agents-python の以下のページを独自に翻訳した上でまとめ直し、補足説明を加えています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。


 

 

OpenAI Agents SDK : マルチ・エージェントのオーケストレーション

オーケストレーションはアプリケーションのエージェントのフローを指します。どのエージェントがどの順序で実行され、次に何が起きるかをどのように決定するのでしょう?エージェントをオーケストレーションするために、2 つの主要な方法があります :

  1. LLM に決定を委ねる : これは LLM の知性を使用して、計画し、推論し、そしてそれに基づいて取るステップを決定します。

  2. コードによるオーケストレーション : コードを使用してエージェントのフローを決定します。

これらのパターンを混在させて組み合わせることができます。それぞれにトレードオフがあり、後述します。

 

LLM によるオーケストレーション

つまり、自由度が高い (open-ended) タスクが与えられたとき、LLM は、ツールを使用してアクションを取りデータを取得し、ハンドオフを使用してタスクをサブエージェントに委任することで、タスクに取り組む方法を自律的にに計画することができます。例えば、リサーチ・エージェントは以下のようなツールを装備できるでしょう :

  • 情報をオンラインで見つける Web 検索

  • 独自な (proprietary) データと接続を検索するファイル検索と取得

  • コンピュータ上でアクションを実行するコンピュータの使用

  • データ分析を行うコード実行

  • 計画、レポート作成等に優れた専門エージェントにハンドオフ

このパターンは、タスクの自由度が高く、LLM の知性に頼りたい場合に最適です。ここで最も重要な戦略は以下です :

  1. 良いプロンプトに投資します。どのようなツールが利用可能であるか、それらの使用方法、そしてどのようなパラメータの操作が必要かを明確にします。

  2. アプリケーションを監視して反復します。どこで間違えるかを確認して、プロンプトで反復します。

  3. エージェントが内省 (内部点検, introspect) して改良できるようにする。例えば、ループで実行し、自身を批評させます; あるいは、エラーメッセージを提供して改良させます。

  4. なんでも得意なことが期待される汎用目的のエージェントではなく、一つのタスクで優れた専門エージェントを持ちます。

  5. 評価に投資します。これはエージェントをトレーニングして、タスク上で改良し良くなるようにします。

 

コードによるオーケストレーション

LLM によるオーケストレーションが強力である一方、コードによるオーケストレーションは、速度、コストとパフォーマンスの点でタスクをより決定論的で予測可能とします。ここでの一般的なパターンは :

  • 構造化出力 を使用して、コードで検査可能な整形式 (well formed) データを生成します。例えば、エージェントにタスクを幾つかのカテゴリーに分類するように依頼してから、カテゴリーに基づいて次のエージェントを選択することができる場合があります。

  • 一つのエージェントの出力を次の入力に変換することで複数のエージェントを連鎖します。ブログ記事の作成のようなタスクを、調査、アウトラインの作成、ブログ記事の作成、その批評、そして改良の一連のステップに分解することができます。

  • while ループでタスクを遂行するエージェントを、評価してフィードバックを提供するエージェントとともに、評価するエージェント (evaluator) が出力が特定の基準をパスしたと判断するまで実行します。

  • 例えば asyncio.gather のような Python プリミティブを使用して、複数のエージェントを並列に実行します。これは、互いに依存しない複数のタスクがある場合に、速度の点で有用です。

We have a number of examples in examples/agent_patterns.

 

以上