複数のAIエージェントを連携させるには、タスクの受け渡しやツール定義、状態管理を自前で組む必要がありました。OpenAIが公開したAgents SDKは、これらをPythonの数行で書ける公式フレームワークです。
この記事では、Agents SDKの全体像と、実装で押さえるべき4つの機能を整理します。
この記事でわかること
- Agents SDKが何で、前身のSwarmとどう違うか
- エージェント間のタスク受け渡し(Handoffs)の仕組み
- Python関数をツール化する方法とリアルタイムストリーミング
- エージェント間でデータを共有する手段
https://github.com/openai/openai-agents-python
Agents SDKとは
Agents SDK(PyPIパッケージ名: openai-agents)は、OpenAIがGitHubで公開しているマルチエージェント向けのPythonフレームワークです。2026年6月時点の最新版はv0.17.6で、リポジトリのスター数は2.7万を超えています。
公式ドキュメントでは、前身の実験的フレームワーク「Swarm」の本番向けアップグレードと位置づけられています。SNS上では「OpenAI Swarm」と紹介されることもありますが、現在の正式名称はAgents SDKです。JavaScript/TypeScript版(openai-agents-js)も別途用意されています。
SDKの設計思想は「プリミティブを少なく保ちつつ、実用に足る機能を揃える」ことです。中核となる概念は次の3つだけです。
- Agents: 指示文・ツール・ガードレール・Handoffsを持つLLM
- Agents as tools / Handoffs: 他エージェントへの委譲
- Guardrails: 入出力の検証と安全チェック
OpenAIのResponses APIをデフォルトで使いますが、Chat Completions APIやLiteLLM経由で100以上のLLMにも対応するプロバイダー非依存の設計です。
どんな課題を解決するか
エージェント開発では、次のような実装コストが積み上がります。
- ツール呼び出しとLLMへの結果返却をループで回す処理
- 専門エージェントへの会話の切り替え
- 会話履歴やアプリケーション状態の引き継ぎ
- ツール承認や安全チェックの組み込み
Agents SDKは、これらをRunnerクラスが一括で担います。開発者はエージェントの定義とツールの実装に集中でき、実行ループやトレーシングはSDK側に任せられます。組み込みのトレーシング機能で、エージェントの実行フローを可視化・デバッグ・評価することも可能です。
主な機能
エージェント間のタスク受け渡し(Handoffs)
Handoffsは、あるエージェントが別のエージェントに会話の主導権を渡す仕組みです。LLMからはtransfer_to_<エージェント名>というツールとして見えます。
from agents import Agent, handoff
billing_agent = Agent(name="Billing agent")
refund_agent = Agent(name="Refund agent")
triage_agent = Agent(name="Triage agent", handoffs=[billing_agent, handoff(refund_agent)])
顧客対応の例では、問い合わせ振り分けエージェントが請求・返金の専門エージェントへ処理を引き渡します。Handoff時にinput_typeで理由や優先度などのメタデータを渡したり、input_filterで次のエージェントに見せる会話履歴を絞ったりもできます。
Handoffsとは別に、Agents as tools(Agent.as_tool())というパターンもあります。こちらはマネージャーエージェントが会話の主導権を維持したまま、専門エージェントの出力を取り込む方式です。専門家がユーザーに直接応答するならHandoffs、マネージャーが最終回答をまとめるならAgents as tools、という使い分けが公式に推奨されています。
Python関数でのツール定義
@function_toolデコレータを付けるだけで、通常のPython関数をエージェントのツールに変換できます。関数の引数からJSONスキーマが自動生成され、docstringからツールの説明文も取り込まれます。
from agents import Agent, function_tool
@function_tool
async def fetch_weather(location: str) -> str:
"""指定した場所の天気を取得する。"""
return "sunny"
agent = Agent(name="Assistant", tools=[fetch_weather])
第一引数にRunContextWrapperを受け取れば、アプリケーションの状態や依存オブジェクトにアクセスできます。MCP(Model Context Protocol)サーバーのツール呼び出しにも対応しており、関数ツールと同じ流れで統合されます。
リアルタイムストリーミング
Runner.run_streamed()を使うと、エージェントの実行中にトークン単位のテキストやツール呼び出しの進捗をリアルタイムで受け取れます。
result = Runner.run_streamed(agent, "5つのジョークを教えて")
async for event in result.stream_events():
if event.type == "raw_response_event":
print(event.data.delta, end="", flush=True)
stream_events()のイベントには、LLMからの生テキスト(raw_response_event)、ツール実行の完了(run_item_stream_event)、Handoffによるエージェント切り替え(agent_updated_stream_event)などが含まれます。チャットUIへの逐次表示や、Handoffのタイミングをユーザーに見せる用途に向いています。
エージェント間のデータ共有
エージェント間でアプリケーション状態を共有するには、RunContextWrapper.contextを使います。実行時にコンテキストオブジェクトを渡し、ツール関数やHandoffのコールバックから参照します。
会話履歴の永続化にはSessionsが用意されています。SQLiteSessionなどのセッションインスタンスをRunner.run()に渡すと、ターン間の会話履歴が自動で保存・復元されます。手動で.to_input_list()を管理する必要はありません。
from agents import Agent, Runner, SQLiteSession
session = SQLiteSession("conversation_123")
result = await Runner.run(agent, "ゴールデンゲートブリッジはどの都市?", session=session)
result = await Runner.run(agent, "その都市はどの州?", session=session)
v0.14.0(2026年4月)で追加されたSandbox Agentsは、隔離されたワークスペース上でファイル操作やシェル実行を行うエージェント向けの機能です。Unixローカル、Docker、E2Bなど複数のサンドボックスクライアントに対応し、長時間タスクの再開も可能です。
料金
Agents SDK自体はMITライセンスのオープンソースで、利用料はかかりません。LLMの推論にはOpenAI APIの標準料金が適用されます。ホスト型ツール(Web検索、コードインタプリタなど)を使う場合も、APIの通常料金体系に従います。
類似フレームワークとの違い
マルチエージェント開発には、LangGraphやCrewAIなどの選択肢もあります。Agents SDKの特徴は、OpenAIのResponses APIやトレーシング・評価ツールとの一体運用が前提になっている点です。プリミティブがAgents・Handoffs・Guardrailsの3つに絞られており、Pythonの言語機能(asyncio.gatherでの並列実行など)でオーケストレーションを組み立てる設計です。
一方、グラフベースで複雑な分岐を細かく制御したい場合はLangGraphの方が向く場面もあります。OpenAIモデルを中心に、公式の実行ループとトレーシングをそのまま使いたいならAgents SDKが最短ルートです。
使い始めるには
Python 3.10以上が必要です。
pip install openai-agents
環境変数OPENAI_API_KEYを設定すれば、次のコードで動作確認できます。
from agents import Agent, Runner
agent = Agent(name="Assistant", instructions="あなたは親切なアシスタントです")
result = Runner.run_sync(agent, "プログラミングにおける再帰について俳句を書いて")
print(result.final_output)
詳細は公式ドキュメントとexamplesディレクトリが出発点になります。Handoffsの設計判断はAgent orchestrationのページで、Sandbox Agentsの導入はクイックスタートを参照してください。