---
search:
  exclude: true
---
# 複数の エージェント のオーケストレーション

オーケストレーションとは、あなたのアプリにおける エージェント の流れを指します。どの エージェント を、どの順序で実行し、次に何をするかをどのように決定するか、ということです。エージェント をオーケストレーションする主な方法は 2 つあります。

1. LLM に意思決定を任せる: LLM の知性を使って計画・推論し、それに基づいて取るべき手順を決めます。
2. コードによるオーケストレーション: コードで エージェント の流れを決定します。

これらのパターンは組み合わせて使えます。それぞれにトレードオフがあり、以下で説明します。

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

エージェント は、instructions、tools、ハンドオフ を備えた LLM です。これは、オープンエンドなタスクに対して、LLM が自律的に計画を立て、ツールを使ってアクション実行とデータ取得を行い、ハンドオフ を使ってサブエージェントにタスクを委譲できることを意味します。たとえば、リサーチ エージェント は次のようなツールを備えられます。

-   オンライン情報を見つけるための Web 検索
-   プロプライエタリデータや接続を検索するための ファイル検索 と取得
-   コンピュータ操作 によるコンピュータ上でのアクション実行
-   データ分析のためのコード実行
-   計画策定、レポート作成などに優れた専門 エージェント への ハンドオフ

このパターンは、タスクがオープンエンドで、LLM の知性に依拠したい場合に適しています。ここで重要な戦術は次のとおりです。

1. 良いプロンプトに投資します。利用可能なツール、使い方、順守すべきパラメーターを明確にします。
2. アプリを監視して反復します。問題が起きる箇所を把握し、プロンプトを改善します。
3. エージェント に内省と改善を許可します。たとえば、ループで実行して自己批評させる、あるいはエラーメッセージを与えて改善させます。
4. 何でもこなす汎用 エージェント ではなく、1 つのタスクに特化して優れた エージェント を用意します。
5. [evals](https://platform.openai.com/docs/guides/evals) に投資します。これにより エージェント を訓練し、タスクの上達を促せます。

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

LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度・コスト・性能の面でより決定的かつ予測可能になります。よくあるパターンは次のとおりです。

-   [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使って、コードで検査可能な 適切な形式のデータ を生成します。たとえば、タスクをいくつかの カテゴリー に分類するよう エージェント に依頼し、その カテゴリー に基づいて次の エージェント を選びます。
-   複数の エージェント を連鎖させ、前の出力を次の入力に変換します。ブログ記事の執筆のようなタスクを、調査、アウトライン作成、本文執筆、批評、改善という一連のステップに分解できます。
-   タスクを実行する エージェント と、それを評価してフィードバックを提供する エージェント を `while` ループで走らせ、評価者が所定の基準を満たしたと判断するまで繰り返します。
-   複数の エージェント を並列に実行します。たとえば Python の基本コンポーネントである `asyncio.gather` を使います。互いに依存しない複数のタスクがある場合、速度面で有用です。

[`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) に多数の code examples があります。