AI、データ活用、業務改善に関する最新情報やNexaflowの取り組みをお届けします

AIサマリー
SwarmはOpenAIが提案する軽量なマルチエージェント協調フレームワークで、エージェントとハンドオフの2つの概念を用いてシンプルな協調を実現します。教育や実験に最適で、カスタマーサポートや航空券予約システムなどの具体的なユースケースが紹介されています。実運用には不向きで、OpenAI APIに依存していますが、マルチエージェントの基本を学ぶには適しています。
2024年10月、サンフランシスコ。
OpenAIの研究者 Shyamal Anadkat は、GitHubリポジトリの README に警告文を書き込んでいました。
「これはプロダクションで使わないでください」 「公式製品ではありません」 「メンテナンスもしません」
彼はこれを「クックブック」——学習用のレシピ集と位置づけました。複雑なマルチエージェント協調を「電話転送」と同じくらいシンプルに実装できることを示すための教材。
しかし、予想外の事態が起きます。
わずか1週間で約2,400スター、最終的に 20,000スター を獲得。「使うな」と言われたツールを、開発者たちは熱狂的に歓迎しました。週間成長率 1.992倍。
慌ててShyamalはツイートします:
"swarmは公式製品じゃありません。クックブックみたいなものです"
しかし時すでに遅し。Swarm は、マルチエージェント設計の新しい標準を確立し始めていました。
これはOpenAIの失敗だったのか?
いいえ。実はこれこそが 計画通り でした。
OpenAIには野心的な戦略があったのです。「教育用として最高のツールを無償提供し、開発者エコシステムを拡大する。そして5ヶ月後、プロダクション対応版を発表する」。
2025年3月、計画は完遂されます。Agents SDK——Swarmの設計思想を継承した本番対応版がリリースされました。
「使うな」は、本気だった。 「教育用」も、本気だった。 そして、その戦略は見事に成功した。
本記事の表記について
- 下線付きの用語にカーソルを合わせると解説が表示されます
本記事では、わずか5ヶ月で「卒業」しながらも、マルチエージェント設計の新しい標準を確立したSwarmの仕組みと、その驚くべき戦略を解説します。
関連記事: 本記事は「AIエージェント論文おすすめ9選」の詳細解説記事です。他の論文も合わせてご覧ください。
| 項目 | 内容 |
|---|---|
| トピック | Swarm(マルチエージェント協調) |
| カテゴリ | 技術解説 |
| 難易度 | 初級〜中級 |
| 発表 | 2024年10月(OpenAI) |
| GitHub | openai/swarm |
💡 この先の展開
その秘密は「電話転送」のように簡単な設計にあった。複雑なマルチエージェント協調が、たった1つの関数で実現できる。
📖 このセクションについて
コード例を含む技術解説です。概念だけ理解したい方は各コードブロックをスキップしても大丈夫です。
Swarmは**Agent(エージェント)とHandoff(ハンドオフ)**という2つの核心的な概念で構成されています。
Swarmマルチエージェントの概念図各Agentは、固有の指示(instructions)と、使用可能なツール(functions)を持ちます。Agentは特定のタスクを担当する「専門家」として機能します。
やっていること: エージェントに「名前」「指示」「使えるツール」を設定
from swarm import Agent
sales_agent = Agent(
name="Sales Agent",
instructions="あなたは営業担当です。顧客の質問に答え、適切な部署にルーティングしてください。",
functions=[get_product_info, transfer_to_support]
)
**Handoff(ハンドオフ)**とは、タスクを別のエージェントに引き継ぐ仕組みです。関数の戻り値としてAgentを返すことで実現します。
これにより、複数のエージェントが協力して複雑なタスクを処理できます。
やっていること: 別のエージェントを返すだけで「引き継ぎ」が完了
def transfer_to_support():
"""サポート担当に転送する"""
return support_agent # 別のAgentを返す
**Routines(ルーティング)**は、処理の流れを制御する仕組みです。自然言語の指示と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(返金処理)
やっていること: 4つのエージェント(振り分け・営業・サポート・返金)を連携させるシステム
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"])
Swarmのエージェント引継ぎフロー[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_variables(コンテキスト変数)**を使うことで、エージェント間で状態を共有できます。これにより、顧客IDや予約IDなどの情報を複数のエージェントで利用できます。
やっていること: エージェント間で顧客情報を共有しながら予約変更・手荷物対応を処理
# 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エージェント程度が目安です。
エージェント間で状態を共有するための仕組みです。顧客ID、予約ID、セッション情報などをエージェント間で受け渡せます。
辞書形式でデータを管理し、各エージェントが必要な情報にアクセスできます。
💡 この先の展開
技術の話はここまで。でも、Swarmには「人に話したくなる」驚きのエピソードがある。
Shyamal Anadkat はOpenAIのSolution Team所属の研究者。マルチエージェントシステムの「人間工学的インターフェース」を研究しています。
| 項目 | 内容 |
|---|---|
| 所属 | OpenAI Solution Team |
| 専門 | マルチエージェントシステム、AI UX |
| 影響力 | X(旧Twitter)での発言が業界に影響 |
| Swarmでの役割 | 設計思想の考案、コミュニティ対応 |
予想外の反響に、彼は慌ててこうツイートしました:
"swarm is not an official openai product. think of it more like a cookbook." (Swarmは公式製品じゃありません。クックブックみたいなものです)
しかし時すでに遅し。開発者コミュニティは「使うな」と言われたツールを歓迎し、週間成長率1.992倍を記録しました。
| 時期 | 出来事 |
|---|---|
| 2024年10月13日 | Swarm公開、「教育用」として位置づけ |
| 2024年10月20日 | 1週間で2,400スター獲得 |
| 2025年2月 | 20,000スター達成 |
| 2025年3月11日 | OpenAI Agents SDK発表、Swarmは「卒業」 |
**「廃止」と報道されましたが、実態は「教育用として成功しすぎて、プロダクション版が必要になった」**のです。
Agents SDKはSwarmの設計思想を継承しつつ、以下を追加:
Swarmは単なるフレームワークではありませんでした。OpenAIの壮大な戦略の第一歩だったのです。
「より良いチャットボットを作るのではなく、AIのオペレーティングシステムになる」
この戦略の核心は「開発者エコシステムの拡大」。教育用ツールを無償提供し、世界中の開発者がマルチエージェントに触れる機会を作る。そしてコミュニティが成熟したら、プロダクション版を発表する。
Swarm → Agents SDKの流れは、この戦略の完璧な実行でした。
OpenAIの公式ドキュメントはこう説明する:
"A handoff is when an agent transfers an active conversation to another agent, much like when you get transferred to someone else on a phone call." (ハンドオフとは、エージェントが会話を別のエージェントに引き継ぐこと——電話で他の担当者に転送されるのと同じ)
この比喩のおかげで、複雑なマルチエージェント協調が直感的に理解できるようになった。
Gartnerによると、2028年までに企業向けソフトウェアの33%がエージェントAI機能を含むと予測されている。グローバルAIエージェント市場は**2030年までに471億ドル(約7兆円)**に達する見込みだ。
Swarmは、このトレンドを加速させた「教育用」フレームワークだった。
Swarmは、OpenAIが提案するマルチエージェント協調の軽量フレームワークです。わずか5ヶ月で廃止されましたが、その設計思想は今もAIエージェント開発に影響を与え続けています。
本記事はAIエージェント論文シリーズの一環として作成されました。
こちらの記事も参考にしてください

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

ReActは推論と行動を統合するAIエージェントのフレームワークで、従来の手法の課題を克服し、HotPotQAで+6%、ALFWorldで+34%の性能向上を達成。Thought-Action-Observationのループを用いて複雑なタスクを段階的に解決し、実際のビジネスシナリオでの自動化に高い実用性を示す。具体的なユースケースとして、競合価格調査や見積もり支援が成功率100%で実施された。