複数の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 toolsAgent.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の導入はクイックスタートを参照してください。