Login

OpenAIが開発した軽量なマルチエージェントオーケストレーション教育フレームワークで、エージェントの連携と実行に焦点を当てています。

MITPython 20.1kopenaiswarm Last Updated: 2025-03-11

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()関数は、以下のループを実装します。

  1. 現在のエージェントから完了応答を取得します。
  2. ツール呼び出しを実行し、結果を追加します。
  3. 必要に応じてエージェントを切り替えます。
  4. コンテキスト変数を更新します。
  5. 新しい関数呼び出しがない場合、結果を返します。

パラメータ設定

パラメータ タイプ 説明 デフォルト値
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に置き換えられましたが、その設計理念と教育的価値は依然として重要です。

Star History Chart