--- search: exclude: true --- # エージェントオーケストレーション オーケストレーションとは、アプリ内でのエージェントのフローを指します。どのエージェントをどの順序で実行し、次のステップをどのように決定するのでしょうか。エージェントオーケストレーションには、主に 2 つの方法があります。 1. LLM に判断を任せる方法:LLM の知能を活用して計画と推論を行い、それに基づいて実行するステップを決定します。 2. コードによるオーケストレーション:コードを使用してエージェントのフローを決定します。 これらのパターンは組み合わせて使用できます。それぞれにトレードオフがあり、以下で説明します。 ## LLM によるオーケストレーション {#orchestrating-via-llm} エージェントは、指示、ツール、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられると、LLM はそのタスクへの取り組み方を自律的に計画できます。ツールを使用してアクションの実行やデータの取得を行い、ハンドオフを使用してサブエージェントにタスクを委任します。たとえば、リサーチエージェントには次のような機能を持たせることができます。 - オンラインで情報を見つけるための Web 検索 - 独自データや接続されたデータソースを検索するためのファイル検索と取得 - コンピューター上でアクションを実行するためのコンピュータ操作 - データ分析を行うためのコード実行 - 計画やレポート作成などを得意とする専門エージェントへのハンドオフ ### SDK の主要パターン {#core-sdk-patterns} Python SDK では、次の 2 つのオーケストレーションパターンが最もよく使用されます。 | パターン | 仕組み | 最適な状況 | | --- | --- | --- | | Agents as tools | マネージャーエージェントが会話の制御を維持し、`Agent.as_tool()` を通じて専門エージェントを呼び出します。 | 1 つのエージェントに最終回答を担当させる場合、複数の専門エージェントからの出力を統合する場合、または共通の SDK ガードレールを 1 か所で適用する場合。 | | ハンドオフ | トリアージエージェントが会話を専門エージェントに振り分け、その専門エージェントがターンの残りの間、アクティブなエージェントになります。 | 専門エージェントに直接応答させる場合、プロンプトの焦点を絞る場合、またはマネージャーに実行結果を説明させることなく、ハンドオフによってアクティブな指示を切り替える場合。 | 専門エージェントに範囲が限定されたサブタスクを支援させつつ、ユーザーとの会話を引き継がせたくない場合は、 **agents as tools** を使用します。ルーティング自体がワークフローの一部であり、選択された専門エージェントに現在のターンの残りを担当させたい場合は、 **ハンドオフ** を使用します。 この 2 つを組み合わせることもできます。トリアージエージェントから専門エージェントにハンドオフし、その専門エージェントが限定的なサブタスクのために、さらに別のエージェントをツールとして呼び出すこともできます。 このパターンは、タスクがオープンエンドであり、LLM の知能を活用したい場合に適しています。ここで最も重要な戦術は次のとおりです。 1. 優れたプロンプトの作成に注力します。利用可能なツール、その使用方法、エージェントが従う必要のある制約を明確にします。 2. アプリを監視し、反復的に改善します。問題が発生している箇所を確認し、プロンプトを改善します。 3. エージェントが自己評価して改善できるようにします。たとえば、エージェントをループで実行して自己批評させたり、エラーメッセージを提供して改善させたりします。 4. あらゆるタスクをこなせることを期待した汎用エージェントではなく、1 つのタスクに秀でた専門エージェントを用意します。 5. [evals](https://platform.openai.com/docs/guides/evals) に注力します。これにより、エージェントをトレーニングして、タスクの遂行能力を向上させることができます。 このオーケストレーション方式の基盤となる SDK の基本コンポーネントについては、[ツール](tools.md)、[ハンドオフ](handoffs.md)、[エージェントの実行](running_agents.md)から参照してください。 ## コードによるオーケストレーション {#orchestrating-via-code} LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションでは、速度、コスト、パフォーマンスの面でタスクをより決定論的かつ予測可能にできます。一般的なパターンは次のとおりです。 - [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用して、コードで検査できる適切な形式のデータを生成します。たとえば、エージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選択できます。 - あるエージェントの出力を次のエージェントの入力に変換して、複数のエージェントを連結します。ブログ記事の執筆のようなタスクを、調査、アウトラインの作成、ブログ記事の執筆、批評、改善という一連のステップに分解できます。 - `while` ループの各反復で、タスクエージェントを実行して出力を生成し、次に評価エージェントを実行してその出力を評価し、フィードバックを提供します。評価エージェントが、出力が必要な基準を満たしたと判断した時点で停止します。 - 複数のエージェントを並列に実行します。たとえば、`asyncio.gather` のような Python の基本コンポーネントを使用します。これは、互いに依存しない複数のタスクがある場合に、処理を高速化するうえで役立ちます。 [`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) には、多数のコード例があります。 ## 関連ガイド {#related-guides} - 構成パターンとエージェント設定については、[エージェント](agents.md)を参照してください。 - `Agent.as_tool()` とマネージャー方式のオーケストレーションについては、[ツール](tools.md#agents-as-tools)を参照してください。 - 専門エージェント間の委任については、[ハンドオフ](handoffs.md)を参照してください。 - 実行ごとのオーケストレーション制御と会話状態については、[エージェントの実行](running_agents.md)を参照してください。 - 最小限のエンドツーエンドのハンドオフ例については、[クイックスタート](quickstart.md)を参照してください。