AI、データ活用、業務改善に関する最新情報やNexaflowの取り組みをお届けします
AIサマリー
SwarmはOpenAIが提案する軽量なマルチエージェント協調フレームワークで、エージェントとハンドオフの2つの概念を用いてシンプルな協調を実現します。教育や実験に最適で、カスタマーサポートや航空券予約システムなどの具体的なユースケースが紹介されています。実運用には不向きで、OpenAI APIに依存していますが、マルチエージェントの基本を学ぶには適しています。
OpenAIが2024年に発表した「Swarm」は、マルチエージェントシステムを構築するための軽量フレームワークです。本記事では、Swarm論文の内容を解説するとともに、実際のユースケースでの活用方法を詳しく紹介します。
関連記事: 本記事は「AIエージェント論文おすすめ9選」の詳細解説記事です。他の論文も合わせてご覧ください。
| 項目 | 内容 |
|---|---|
| タイトル | Swarm: A Lightweight Multi-Agent Orchestration Framework |
| 著者 | OpenAI |
| 発表 | 2024年10月 |
| GitHub | openai/swarm |
SwarmはAgentとHandoffという2つの核心的な概念で構成されています。
各Agentは、固有の指示(instructions)と、使用可能なツール(functions)を持ちます。
from swarm import Agent
sales_agent = Agent(
name="Sales Agent",
instructions="あなたは営業担当です。顧客の質問に答え、適切な部署にルーティングしてください。",
functions=[get_product_info, transfer_to_support]
)
タスクを別のエージェントに引き継ぐ仕組みです。関数の戻り値としてAgentを返すことで実現します。
def transfer_to_support():
"""サポート担当に転送する"""
return support_agent # 別のAgentを返す
Swarmでは、自然言語の指示とPythonコードを組み合わせてルーティングを定義します。
triage_agent = Agent(
name="Triage Agent",
instructions="""
顧客の問い合わせを分析し、適切な部署に振り分けてください:
- 製品の質問 → 営業担当
- 技術的な問題 → サポート担当
- 返金リクエスト → 払い戻し担当
""",
functions=[transfer_to_sales, transfer_to_support, transfer_to_refunds]
)
Swarmの公式サンプルとして提供されている、カスタマーサポートシステムの実装例です。
Triage Agent(振り分け)
├── Sales Agent(営業)
├── Support Agent(サポート)
└── Refunds Agent(返金処理)
from swarm import Swarm, Agent
client = Swarm()
# 各部署のエージェント定義
def transfer_to_sales():
"""営業担当に転送"""
return sales_agent
def transfer_to_support():
"""サポート担当に転送"""
return support_agent
def transfer_to_refunds():
"""返金担当に転送"""
return refunds_agent
def process_refund(item_id: str, reason: str = "N/A"):
"""返金処理を実行"""
return f"返金処理完了: {item_id} (理由: {reason})"
# Triage Agent
triage_agent = Agent(
name="Triage Agent",
instructions="顧客の問い合わせを適切な部署に振り分けてください。",
functions=[transfer_to_sales, transfer_to_support, transfer_to_refunds]
)
# Sales Agent
sales_agent = Agent(
name="Sales Agent",
instructions="製品に関する質問に答えてください。"
)
# Support Agent
support_agent = Agent(
name="Support Agent",
instructions="技術的な問題を解決してください。"
)
# Refunds Agent
refunds_agent = Agent(
name="Refunds Agent",
instructions="返金リクエストを処理してください。",
functions=[process_refund]
)
# 実行
response = client.run(
agent=triage_agent,
messages=[{"role": "user", "content": "製品が壊れたので返金してほしい"}]
)
print(response.messages[-1]["content"])
[User] 製品が壊れたので返金してほしい
↓
[Triage Agent] 返金リクエストを検出 → transfer_to_refunds()
↓
[Refunds Agent] 返金処理を実行 → process_refund()
↓
[Output] 返金処理完了
より複雑なユースケースとして、航空券予約システムの実装例です。
Triage Agent(振り分け)
├── Flight Modification Agent(予約変更)
│ ├── change_flight()
│ └── cancel_flight()
└── Lost Baggage Agent(手荷物紛失対応)
└── file_claim()
# Context変数で状態を共有
context_variables = {
"customer_id": "12345",
"booking_id": "ABC789",
"flight_date": "2024-12-15"
}
def change_flight(new_date: str):
"""フライト日程を変更"""
return f"フライトを{new_date}に変更しました"
def cancel_flight():
"""フライトをキャンセル"""
return "フライトをキャンセルしました。返金処理を開始します。"
def file_claim(description: str):
"""手荷物紛失の申請"""
return f"申請を受け付けました: {description}"
# Flight Modification Agent
flight_agent = Agent(
name="Flight Modification",
instructions="""
予約変更リクエストを処理します。
- 日程変更の場合: change_flight()を呼び出す
- キャンセルの場合: cancel_flight()を呼び出す
""",
functions=[change_flight, cancel_flight, transfer_to_triage]
)
# Lost Baggage Agent
baggage_agent = Agent(
name="Lost Baggage",
instructions="手荷物紛失の申請を受け付けます。",
functions=[file_claim, transfer_to_triage]
)
# 実行(context_variablesで状態を渡す)
response = client.run(
agent=triage_agent,
messages=[{"role": "user", "content": "12月20日に変更したい"}],
context_variables=context_variables
)
マルチエージェントフレームワークとして、LangGraphやCrewAIと比較してみましょう。
| 観点 | Swarm | LangGraph | CrewAI |
|---|---|---|---|
| 設計思想 | 教育・実験用 | 本番運用向け | チーム協調特化 |
| 抽象化レベル | 低(シンプル) | 中 | 高(宣言的) |
| 状態管理 | context_variables | StateGraph | 自動管理 |
| エージェント間通信 | Handoff | Edge/条件分岐 | Task delegation |
| 学習コスト | 低 | 中〜高 | 低 |
| 本番利用 | 非推奨 | 推奨 | 推奨 |
| OpenAI依存 | あり | なし | なし |
Swarm(OpenAI)
LangGraph(LangChain)
CrewAI
| ユースケース | 推奨フレームワーク |
|---|---|
| マルチエージェントの学習・実験 | Swarm |
| 本番環境でのエージェント開発 | LangGraph |
| チーム型のタスク自動化 | CrewAI |
| OpenAI APIをそのまま活用 | Swarm |
| 複雑なワークフロー | LangGraph |
Swarmが適している具体的なユースケースを紹介します。
顧客 → Triage → [Sales / Support / Billing]
申請受付 → 審査 → 承認/却下 → 通知
言語検出 → [日本語Agent / English Agent / 中文Agent]
推奨されません。 Swarmは「教育・実験目的」で設計されており、OpenAI公式も本番利用を想定していません。本番環境ではLangGraphやCrewAIを検討してください。
現状は難しいです。 SwarmはOpenAI APIに直接依存しているため、Claude、Gemini、Llamaなど他のLLMでは使用できません。他のLLMを使いたい場合はLangGraphを推奨します。
抽象化レベルと目的が異なります。
Swarm自体は無料ですが、OpenAI APIの利用料金がかかります。エージェント間のHandoffでも追加のAPI呼び出しが発生するため、複雑なワークフローではコストが増加します。
技術的な制限はありませんが、エージェント数が増えるとAPI呼び出し回数が増え、レイテンシとコストが増加します。実用上は5-10エージェント程度が目安です。
Swarmは、OpenAIが提案するマルチエージェント協調の軽量フレームワークです。
マルチエージェントシステムの学習の第一歩として、ぜひSwarmを試してみてください。
本記事はAIエージェント論文シリーズの一環として作成されました。
こちらの記事も参考にしてください

Epiplexityは計算制約のあるAIモデルの学習可能性を定量化する新しい情報理論の尺度であり、シャノンエントロピーの限界を克服します。特に、データ拡張、カリキュラム学習、LLMの汎用能力など、従来の理論では説明できなかった現象を統一的に解決します。Epiplexityは、データセット設計や事前学習の最適化に新たな指針を提供し、今後のAI研究において重要な概念とされています。

MetaGPTは、複数のAIエージェントが協調してソフトウェア開発を自動化するフレームワークであり、各エージェントが特定の役割を持ち、標準作業手順(SOP)に従って作業を行います。HumanEvalで85.9%の高い性能を達成し、従来の手法に比べて大幅な品質向上を実現しています。プロトタイプ開発やドキュメント自動生成に応用可能で、商用利用も可能です。

AIエージェント開発に役立つ9本の論文を厳選し、実装検証結果を交えて解説。論文を読むことで正確な情報、設計思想の理解、限界の把握が可能になる。基礎から応用までの論文を紹介し、効率的な読み方や実践的な活用例も提供。初心者向けや実装重視の読み順も提案されている。