OpenAIが開発した軽量なマルチエージェントオーケストレーション教育フレームワークで、エージェントの連携と実行に焦点を当てています。
OpenAI Swarm - マルチエージェントオーケストレーションフレームワーク詳細
プロジェクト概要
OpenAI Swarmは、人間工学に基づいた軽量なマルチエージェントオーケストレーションを探索するための教育用フレームワークです。このプロジェクトはOpenAIソリューションチームによって管理され、開発者にシンプルで柔軟かつ制御可能なマルチエージェントシステム構築ツールを提供することを目的としています。
重要な更新: Swarmは現在、Swarmの製品版であるOpenAI Agents SDKに置き換えられました。OpenAIチームは、すべての本番環境での使用例をAgents SDKに移行することを推奨しています。
コア機能
1. 設計理念
- 軽量: シンプルさと使いやすさに重点を置いています。
- 高度な制御性: 正確なエージェント制御メカニズムを提供します。
- テスト容易性: 簡単なテストとデバッグプロセスをサポートします。
- 教育志向: マルチエージェントオーケストレーションを学ぶための教育リソースとして機能します。
2. コア抽象概念
Swarmは、2つのコア抽象概念を通じてエージェントの連携を実現します。
Agent(エージェント)
- 指示(instructions)とツール(tools)を含みます。
- 任意の時点で会話を別のエージェントに引き継ぐことができます。
- 動的な指示とコンテキスト変数をサポートします。
Handoffs(引き継ぎ)
- エージェント間のシームレスな移行メカニズムです。
- 複雑なエージェントネットワークとワークフローをサポートします。
- 会話の連続性を維持します。
インストールと基本的な使用方法
システム要件
- Python 3.10+
インストール方法
pip install git+ssh://git@github.com/openai/swarm.git
# または
pip install git+https://github.com/openai/swarm.git
基本的な例
from swarm import Swarm, Agent
client = Swarm()
def transfer_to_agent_b():
return agent_b
agent_a = Agent(
name="Agent A",
instructions="You are a helpful agent.",
functions=[transfer_to_agent_b],
)
agent_b = Agent(
name="Agent B",
instructions="Only speak in Haikus.",
)
response = client.run(
agent=agent_a,
messages=[{"role": "user", "content": "I want to talk to agent B."}],
)
print(response.messages[-1]["content"])
出力例:
Hope glimmers brightly,
New paths converge gracefully,
What can I assist?
技術アーキテクチャ
クライアント実行メカニズム
Swarmのclient.run()
関数は、以下のループを実装します。
- 現在のエージェントから完了応答を取得します。
- ツール呼び出しを実行し、結果を追加します。
- 必要に応じてエージェントを切り替えます。
- コンテキスト変数を更新します。
- 新しい関数呼び出しがない場合、結果を返します。
パラメータ設定
パラメータ | タイプ | 説明 | デフォルト値 |
---|---|---|---|
agent | Agent | 呼び出す(初期)エージェント | (必須) |
messages | List | メッセージオブジェクトのリスト | (必須) |
context_variables | dict | コンテキスト変数 | {} |
max_turns | int | 最大ターン数 | float("inf") |
model_override | str | モデルのオーバーライド | None |
execute_tools | bool | ツールを実行するかどうか | True |
stream | bool | ストリーミング応答を有効にするかどうか | False |
debug | bool | デバッグログを有効にするかどうか | False |
エージェント設定
Agentクラスのフィールド
フィールド | タイプ | 説明 | デフォルト値 |
---|---|---|---|
name | str | エージェント名 | "Agent" |
model | str | 使用するモデル | "gpt-4o" |
instructions | strまたは関数 | エージェントの指示 | "You are a helpful agent." |
functions | List | 呼び出し可能な関数のリスト | [] |
tool_choice | str | ツールの選択戦略 | None |
動的な指示の例
def instructions(context_variables):
user_name = context_variables["user_name"]
return f"Help the user, {user_name}, do whatever they want."
agent = Agent(instructions=instructions)
response = client.run(
agent=agent,
messages=[{"role":"user", "content": "Hi!"}],
context_variables={"user_name":"John"}
)
関数呼び出しメカニズム
基本的な関数呼び出し
def greet(context_variables, language):
user_name = context_variables["user_name"]
greeting = "Hola" if language.lower() == "spanish" else "Hello"
print(f"{greeting}, {user_name}!")
return "Done"
agent = Agent(functions=[greet])
エージェントの引き継ぎ
sales_agent = Agent(name="Sales Agent")
def transfer_to_sales():
return sales_agent
agent = Agent(functions=[transfer_to_sales])
複雑な結果の返却
def talk_to_sales():
print("Hello, World!")
return Result(
value="Done",
agent=sales_agent,
context_variables={"department": "sales"}
)
サンプルプロジェクト
Swarmは、さまざまなアプリケーションシナリオを示す複数のサンプルプロジェクトを提供します。
1. basic - 基本的な例
設定、関数呼び出し、引き継ぎ、およびコンテキスト変数の基本的な使用法を示します。
2. triage_agent - トリアージエージェント
リクエストを適切なエージェントに転送する簡単なトリアージ設定。
3. weather_agent - 天気エージェント
関数呼び出しの簡単な例を示します。
4. airline - 航空会社のカスタマーサービス
航空会社のさまざまな種類のカスタマーサービスリクエストを処理するマルチエージェント設定。
5. support_bot - サポートボット
ユーザーインターフェイスエージェントと、さまざまなツールを備えたヘルプセンターエージェントが含まれます。
6. personal_shopper - パーソナルショッピングアシスタント
販売および払い戻し注文の処理を支援するパーソナルショッピングエージェント。
ストリーミング処理
Swarmはストリーミング応答をサポートし、Chat Completions APIと同じイベントを使用します。
stream = client.run(agent, messages, stream=True)
for chunk in stream:
print(chunk)
新しいイベントタイプ:
{"delim":"start"}
と{"delim":"end"}
- エージェントが単一のメッセージの処理を開始および終了したことを示します。{"response": Response}
- ストリームの終了時に完全なResponseオブジェクトを返します。
テストと評価
開発テスト
run_demo_loop
を使用してコマンドラインテストを実行します。
from swarm.repl import run_demo_loop
run_demo_loop(agent, stream=True)
評価の推奨事項
- プロジェクトは、開発者が独自の評価スイートを持ち込むことを推奨します。
- airline、weather_agent、およびtriage_agentのサンプルで評価の参考資料を提供します。
- カスタムのパフォーマンステスト指標をサポートします。
他のOpenAI製品との違い
Assistants APIとの比較
- Assistants API: 完全に管理されたスレッドと組み込みのメモリ管理を提供します。
- Swarm: 完全にクライアント側で実行され、ステートレス設計であり、学習と実験に適しています。
技術的特徴
- Chat Completions APIに基づいて構築されています。
- 呼び出し間で状態を保存しません。
- 軽量なクライアント実装。
- 教育と学習を目的としています。
適用可能なシナリオ
Swarmは、特に以下のような状況に適しています。
- 大量の独立した機能と指示を処理する必要があるシナリオ。
- 単一のプロンプトにエンコードするのが難しい複雑なタスク。
- マルチエージェントオーケストレーションの概念を学習する。
- 迅速なプロトタイプ開発と実験。
プロジェクトステータス
注意: SwarmはOpenAI Agents SDKに置き換えられましたが、マルチエージェントシステムの基本的な概念と実装方法を理解するのに役立つ優れた教育リソースです。本番環境では、公式のAgents SDKに移行することをお勧めします。
まとめ
OpenAI Swarmは、マルチエージェントシステムの学習と開発のためのシンプルで強力なフレームワークを提供します。エージェントと引き継ぎという2つのコア概念を通じて、開発者は複雑なAIワークフローを構築しながら、コードの可読性と保守性を維持できます。新しいSDKに置き換えられましたが、その設計理念と教育的価値は依然として重要です。