@@ -4,38 +4,61 @@ search:
44---
55# エージェントオーケストレーション
66
7- オーケストレーションとは、アプリ内でのエージェントの流れのことです。どのエージェントをどの順番で実行し、その後何をするかをどう決めるのか 。エージェントをオーケストレーションする主な方法は 2 つあります。
7+ オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントが、どの順序で実行され、次に何が起こるかをどのように決定するか、ということです 。エージェントをオーケストレーションする主な方法は 2 つあります。
88
9- 1 . LLM に意思決定を任せる: これは、 LLM の知性を用いて計画・推論し、それに基づいて次に取るべきステップを決めます 。
10- 2 . コードでオーケストレーションする: コードでエージェントの流れを決定します 。
9+ 1 . LLM に意思決定させる: LLM の知性を使って計画・推論を行い、それに基づいてどのステップを取るかを決定します 。
10+ 2 . コードでオーケストレーションする: コードによってエージェントの流れを決定します 。
1111
12- これらのパターンは組み合わせ可能です。以下にそれぞれのトレードオフを説明します 。
12+ これらのパターンは組み合わせて使えます。それぞれにトレードオフがあり、以下で説明します 。
1313
1414## LLM によるオーケストレーション
1515
16- エージェントは、指示、ツール 、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられたとき、 LLM はタスクへの取り組み方を自律的に計画し、ツールを使って行動やデータ取得を行い、ハンドオフでサブエージェントにタスクを委譲できます。例えば、リサーチ用のエージェントには次のようなツールを持たせられます 。
16+ エージェントは、instructions、tools 、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、 LLM はそのタスクへの取り組み方を自律的に計画でき、tools を使ってアクションを実行しデータを取得し、ハンドオフを使ってサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のようなツールを備えられます 。
1717
18- - Web 検索によるオンライン情報の収集
19- - ファイル検索と取得による独自データや接続先の探索
20- - コンピュータ操作による PC 上でのアクション実行
21- - データ分析のためのコード実行
22- - 計画立案、レポート作成などに長けた専門エージェントへのハンドオフ
18+ - オンライン情報を見つけるための Web 検索
19+ - 独自データや接続先を検索するためのファイル検索と取得
20+ - コンピュータ上でアクションを実行するためのコンピュータ操作
21+ - データ分析を行うためのコード実行
22+ - 計画、レポート作成などに優れた専門エージェントへのハンドオフ
2323
24- このパターンは、タスクがオープンエンドで LLM の知性に依存したい場合に有効です。ここで重要な戦術は次のとおりです。
24+ ### SDK の中核パターン
2525
26- 1 . 良いプロンプトに投資する。利用可能なツール、その使い方、動作すべきパラメーター範囲を明確にする。
27- 2 . アプリを監視し、反復改善する。問題の発生箇所を把握し、プロンプトを改善する。
28- 3 . エージェントに内省と改善を許可する。例: ループで実行し自己批評させる、あるいはエラーメッセージを与えて改善させる。
29- 4 . 何でもできる汎用エージェントではなく、特定タスクに秀でた専門エージェントを用意する。
30- 5 . [ evals] ( https://platform.openai.com/docs/guides/evals ) に投資する。これによりエージェントを訓練して、タスク遂行能力を高められます。
26+ Python SDK では、次の 2 つのオーケストレーションパターンが最もよく使われます。
27+
28+ | パターン | 仕組み | 最適な場面 |
29+ | --- | --- | --- |
30+ | Agents as tools | マネージャーエージェントが会話の制御を維持し、` Agent.as_tool() ` を通じて専門エージェントを呼び出します。 | 1 つのエージェントに最終回答を担わせたい、複数の専門家の出力を統合したい、または共通のガードレールを 1 か所で適用したい場合。 |
31+ | ハンドオフ | トリアージエージェントが会話を専門エージェントへ振り分け、その専門エージェントがそのターンの残りでアクティブなエージェントになります。 | 専門エージェントに直接応答させたい、プロンプトを集中させたい、またはマネージャーが結果を説明せずに instructions を切り替えたい場合。 |
32+
33+ 専門エージェントが限定的なサブタスクを支援すべきで、ユーザー向け会話を引き継ぐべきではない場合は ** agents as tools** を使います。ルーティング自体がワークフローの一部であり、選ばれた専門エージェントに次のやり取りを担わせたい場合は ** handoffs** を使います。
34+
35+ 2 つを組み合わせることもできます。トリアージエージェントが専門エージェントにハンドオフし、その専門エージェントがさらに限定的なサブタスクのために他のエージェントをツールとして呼び出すことも可能です。
36+
37+ このパターンは、タスクがオープンエンドで、LLM の知性に依存したい場合に非常に有効です。ここで最も重要な戦術は次のとおりです。
38+
39+ 1 . 良いプロンプトに投資する。どのツールが利用可能か、どう使うか、どのパラメーター範囲内で動作すべきかを明確にします。
40+ 2 . アプリを監視し、反復改善する。どこで問題が起こるかを確認し、プロンプトを改善します。
41+ 3 . エージェントに内省と改善を許可する。たとえば、ループで実行して自己批評させる、またはエラーメッセージを与えて改善させます。
42+ 4 . どんなタスクにも対応する汎用エージェントを期待するより、1 つのタスクに優れた専門エージェントを用意します。
43+ 5 . [ evals] ( https://platform.openai.com/docs/guides/evals ) に投資する。これによりエージェントを改善するための訓練ができ、タスク性能を向上させられます。
44+
45+ このスタイルのオーケストレーションを支える SDK の基本コンポーネントを確認したい場合は、[ tools] ( tools.md ) 、[ handoffs] ( handoffs.md ) 、[ running agents] ( running_agents.md ) から始めてください。
3146
3247## コードによるオーケストレーション
3348
34- LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは速度・コスト・性能の面でタスクをより決定的かつ予測可能にします。一般的なパターンは次のとおりです。
49+ LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度・コスト・性能の面でタスクをより決定的で予測可能にします。ここで一般的なパターンは次のとおりです。
50+
51+ - [ structured outputs] ( https://platform.openai.com/docs/guides/structured-outputs ) を使い、コードで検査可能な適切な形式のデータを生成する。たとえば、タスクをいくつかのカテゴリーに分類するようエージェントに求め、そのカテゴリーに基づいて次のエージェントを選択できます。
52+ - 1 つの出力を次の入力に変換して複数エージェントを連結する。ブログ記事執筆のようなタスクを、リサーチ、アウトライン作成、記事執筆、批評、改善という一連のステップに分解できます。
53+ - 評価とフィードバックを行うエージェントと組み合わせて、タスク実行エージェントを ` while ` ループで実行し、評価側が出力が特定の基準を満たしたと言うまで続ける。
54+ - 複数エージェントを並列実行する。たとえば ` asyncio.gather ` のような Python の基本機能を使います。これは、相互依存しない複数タスクがある場合の高速化に有用です。
55+
56+ [ ` examples/agent_patterns ` ] ( https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns ) に多数のコード例があります。
3557
36- - [ structured outputs] ( https://platform.openai.com/docs/guides/structured-outputs ) を使って、コードで検査できる適切な形式のデータを生成する。例えば、エージェントにタスクをいくつかのカテゴリーに分類させ、カテゴリーに基づいて次のエージェントを選ぶ。
37- - 複数のエージェントを、前の出力を次の入力に変換して連結する。ブログ記事執筆のようなタスクを、リサーチ → アウトライン作成 → 本文執筆 → 批評 → 改善という一連のステップに分解する。
38- - 評価とフィードバックを行うエージェントと、タスクを実行するエージェントを ` while ` ループで回し、評価者が基準を満たしたと判断するまで繰り返す。
39- - 複数のエージェントを並列実行する(例: ` asyncio.gather ` のような Python の基本コンポーネントを使用)。相互依存しない複数タスクがある場合の高速化に有効。
58+ ## 関連ガイド
4059
41- [ ` examples/agent_patterns ` ] ( https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns ) に複数のコード例があります。
60+ - 構成パターンとエージェント設定については [ Agents] ( agents.md ) 。
61+ - ` Agent.as_tool() ` とマネージャースタイルのオーケストレーションについては [ Tools] ( tools.md#agents-as-tools ) 。
62+ - 専門エージェント間の委譲については [ Handoffs] ( handoffs.md ) 。
63+ - 実行ごとのオーケストレーション制御と会話状態については [ Running agents] ( running_agents.md ) 。
64+ - 最小のエンドツーエンドなハンドオフ例については [ Quickstart] ( quickstart.md ) 。
0 commit comments