この記事のポイント
Agents SDKは、OpenAIが開発した、複数のAIエージェントを連携させるためのツール
各エージェントに役割と指示を定義し、複雑なワークフローを構築可能
エージェント間のハンドオフ機能で、スムーズな連携と制御の受け渡しを実現
入出力検証などのガードレール機能を持ち、安全なエージェント運用が可能
MCPやResponses APIや組み込みツール(Web検索等)と連携し、高度なタスクを実行

Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。
AIの進化は目覚ましいですが、単一のAIモデルでは対応できない複雑なタスクが増えています。
「複数のAIを連携させ、人間のように高度な問題解決を実現したい」
そんなニーズに応えるのが、OpenAIが提供する「Agents SDK」です。
本記事では、この「Agents SDK」について、基礎から応用までを徹底解説します。
Agents SDKの概要、主要コンポーネント、具体的な使い方、MCP(Model Context Protocol)・Responses APIとの連携、安全性確保の仕組み、そして実際の活用事例まで、幅広く網羅的に説明します。
Agents SDKとは?
Agents SDKは、OpenAIが開発した、複数のAIエージェントを連携させて複雑なワークフローを構築するためのオープンソースツールです。
昨年リリースされた実験的SDK「Swarm」から大幅に改良されており、エージェント開発を飛躍的に効率化します。
Responses APIやChat Completions APIと組み合わせることで、強力なマルチエージェントシステムを構築することができます。
参考:Github
Agents SDKの主な特徴は以下の通りです。
- 柔軟なエージェント定義: 各エージェントに明確な役割と指示を簡単に設定可能
- ハンドオフ機能: エージェント間のスムーズな連携と制御の受け渡しを実現
- 強力なガードレール: 入出力の検証などの安全性確保機能が標準装備
- 高度なトレーシング: エージェントの動作を可視化し、デバッグを容易にする機能
MCP(Model Context Protocol)とは?
OpenAIMCP紹介ページ 参考:OpenAI
MCP(Model Context Protocol)は、AIモデルに外部のツールやデータソースを接続するための標準プロトコルです。
OpenAIはこれをAgents SDKと統合することで、開発者が内部データベースやSaaSアプリなどの外部システムとAIエージェントを容易に連携できる環境を提供しています。
この統合により、開発者はツールごとの個別対応から解放され、エージェント開発の工数を大幅に削減できます。
さらに、統一構文による多様なツールの活用が可能となることで、AIエージェントの表現力や対応力が大きく向上します。
また、OpenAIがAnthropic提唱のMCP標準を採用したことは、AI業界全体における相互運用性の向上や標準化の加速にもつながる重要な動きです。
MCPは難しいイメージもありますが今後よりオープンスタンダードになっていくことが予測されますのでしっかり理解しておきましょう!
MCPのメリット
MCPを使うことで、異なるツールを一貫した形式で扱えるようになり、エージェント開発の手間が大幅に軽減されます。
MCPサーバーには、ローカルで動作するstdioサーバーと、リモートで接続するHTTP over SSEサーバーの2種類があり、ユースケースに応じて使い分けが可能なこともユーザーの利便性を高めるでしょう。
AnthoropicのClaude MCPは以下のページをご参照ください。
{{https://www.ai-souken.com/article/claude-mcp-overview}}
OpenAIのエージェント構築プラットフォームとは?
OpenAIは、タスクをインテリジェントに達成するシステムとしてのエージェントを構築するための包括的なプラットフォームを提供しています。
エージェントは単純なワークフローの実行から複雑な目標の追求まで、様々なレベルのタスクを実行できます。
エージェント構築に必要なコンポーネント
エージェント構築には複数のドメインにまたがるコンポーネントが必要です。OpenAIは組み合わせ可能な基本要素を提供しています。
- モデル: 推論、意思決定、さまざまなモダリティの処理が可能なコアインテリジェンス
- o1、o3-mini、GPT-4.5、GPT-4o、GPT-4o-mini など
- o1、o3-mini、GPT-4.5、GPT-4o、GPT-4o-mini など
- ツール: 世界へのインターフェース、環境との対話手段
- 関数呼び出し、Web検索、ファイル検索、Computer Useなど
- 関数呼び出し、Web検索、ファイル検索、Computer Useなど
- ナレッジ&メモリ: 外部の永続的な知識でエージェントを強化
- ベクトルストア、ファイル検索、埋め込みなど
- ベクトルストア、ファイル検索、埋め込みなど
- ガードレール: 無関係な行動、有害な行動、望ましくない行動を防止
- モデレーション、指導階層など
- モデレーション、指導階層など
- オーケストレーション: エージェントの開発、デプロイ、監視、改善
- Agents SDK、トレース、評価、微調整など
これらのコンポーネントを組み合わせることで、強力なエージェントシステムを構築できます。
Agents SDKは特に「オーケストレーション」レイヤーの中核として、エージェントのワークフローを管理する役割を果たします。
モデルの選択
エージェントの中核となるAIモデルの選択は、パフォーマンスとコストのバランスによって決まります。
- o1 & o3-mini: 長期的な計画、難しいタスク、推論に最適なモデルです。複雑な思考や長期的な戦略が必要な場合に適しています。
- GPT-4.5: エージェントによる実行に最適化されています。自動化されたタスクの実行や一連のプロセスを実行するAIエージェントにとって効率的なモデルです。
- GPT-4o : エージェント機能と応答速度(レイテンシ)のバランスが取れているモデルです。機能性を保ちながらも適度な速度を実現しています。
- GPT-4o-mini: 低遅延(低レイテンシ)に最適化されており、素早い応答が必要なアプリケーションに適しています。
LLM(大規模言語モデル)は多くのエージェントシステムの中核であり、用途に応じて最適なモデルを選択することが重要です。
Agents SDKの特徴と機能
Agents SDKは、AIエージェントのオーケストレーションに特化したオープンソースのフレームワークです。
このSDKは、複数のエージェントの定義から、それらの連携フロー、安全性確保、動作のモニタリングまでを統合的に管理できるよう設計されています。
主要コンポーネント
Agents SDKには以下の主要コンポーネントがあります:
- Agent: エージェントの基本単位となるクラス。名前、指示、利用可能なツールを定義
- Runner: エージェントの実行を管理するクラス。同期・非同期での実行をサポート
- Handoff: エージェント間の制御移行を管理する機能
- Guardrail: 入出力の検証やセキュリティチェックを行う機能
- Tracing: エージェントの実行過程を記録し可視化する機能
これらのコンポーネントが連携することで、複雑なマルチエージェントシステムも少ないコードで実装できるようになります。
エージェント定義
Agents SDKでは、以下のようにエージェントを定義します。
from agents import Agent, Runner
# 基本的なエージェントの定義
agent = Agent(
name="Math Tutor",
instructions="You provide help with math problems. Explain your reasoning at each step and include examples",
)
# 実行
result = Runner.run_sync(agent, "Can you help me solve this equation: 2x + 5 = 15?")
print(result.final_output)
この例では、数学の家庭教師として機能するエージェントを定義しています。「Runner.run_sync()」メソッドを使って同期的に実行し、結果を取得します。
Agents SDKの使い方
Agents SDKの使用を開始するための手順を紹介します。
環境設定とインストール方法
まず、プロジェクトと仮想環境を作成します。
# プロジェクトディレクトリを作成
mkdir my_project
cd my_project
# 仮想環境を作成
python -m venv .venv
# 仮想環境をアクティブ化(新しいターミナルセッションごとに実行)
source .venv/bin/activate
# Agents SDKのインストール
pip install openai-agents
# OpenAI APIキーの設定
export OPENAI_API_KEY=sk-...
基本的なエージェント作成
最初のエージェントは次のように簡単に作成できます。
from agents import Agent
agent = Agent(
name="Math Tutor",
instructions="You provide help with math problems. Explain your reasoning at each step and include examples",
)
エージェントは名前と指示(instructions)をパラメータとして受け取ります。オプションで、モデル設定などの追加パラメータも指定できます。
エージェントの実行方法
エージェントの実行は、Runnerクラスを使用して行います。
- 非同期実行の場合:Runner.run()
- 同期実行の場合:Runner.run_sync()
非同期実行例
from agents import Runner
import asyncio
async def main():
result = await Runner.run(agent, "How do I solve a quadratic equation?")
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
同期実行例
result = Runner.run_sync(agent, "How do I solve a quadratic equation?")
print(result.final_output)
複数エージェントによるワークフロー構築
Agents SDKの最大の強みは、複数のエージェントを連携させてワークフローを構築する能力です。
これによって、単一のエージェントでは難しい複雑なタスクも効率的に処理できるようになります。
エージェント間のハンドオフ設定
複数の専門エージェントを定義し、それらの間で作業を振り分けることができます。
from agents import Agent
history_tutor_agent = Agent(
name="History Tutor",
handoff_description="Specialist agent for historical questions",
instructions="You provide assistance with historical queries. Explain important events and context clearly.",
)
math_tutor_agent = Agent(
name="Math Tutor",
handoff_description="Specialist agent for math questions",
instructions="You provide help with math problems. Explain your reasoning at each step and include examples",
)
注目すべきは「handoff_description」パラメータです。これによりハンドオフのルーティングを決定する際の追加コンテキストを提供します。
トリアージエージェントの活用
トリアージエージェントは、ユーザーの入力を分析し、最適な専門エージェントに作業を振り分ける役割を担います:
triage_agent = Agent(
name="Triage Agent",
instructions="You determine which agent to use based on the user's homework question",
handoffs=[history_tutor_agent, math_tutor_agent]
)
「handoffs」パラメータに専門エージェントのリストを提供することで、トリアージエージェントはこれらのエージェント間で作業を振り分けることができます。
ワークフローの実行
マルチエージェントワークフローの実行は次のように行います:
from agents import Runner
import asyncio
async def main():
result = await Runner.run(triage_agent, "What is the capital of France?")
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
この例では、ユーザーの質問「What is the capital of France?」をトリアージエージェントが受け取り、歴史に関する質問だと判断して歴史の家庭教師エージェントに振り分けます。
Responses APIとの統合と組み込みツールの使用例
OpenAIのResponses APIは、従来のChat Completions APIに加え、内蔵ツールを使って外部情報の取得や実際のコンピュータ操作を実行するための新たなAPIです。
Agents SDKは、このResponses APIと連携して、以下のような組み込みツール(WebSearchTool、FileSearchTool、ComputerToolなど)をエージェントに簡単に統合できるようになっています。
組み込みツールの概要
- WebSearchTool
最新のウェブ検索結果をリアルタイムで取得します。ユーザーの入力に基づき、指定したロケーションやコンテキストサイズで検索結果を返すことができます。
- FileSearchTool
OpenAIのベクトルストアと連携し、ファイル検索機能を提供します。FAQや内部ドキュメントから情報を抽出する用途に適しています。
- ComputerTool
コンピュータ操作(クリック、スクリーンショットなど)を自動化するツールで、特定のタスクの自動化が可能です。
ここでは、WebSearchToolを用いた実際のコード例を示します。
WebSearchToolを利用したエージェントの例
まず、Responses API対応の組み込みツールとしてWebSearchToolを定義し、これをエージェントに組み込みます。
以下の例では、"Research Agent"が最新の量子コンピューティングに関する情報をウェブ検索ツールを通じて取得する動作を示しています。
from agents import Agent, Runner, WebSearchTool
# WebSearchToolのインスタンスを生成
# (オプションでユーザーのロケーションやコンテキストサイズを設定可能)
web_search_tool = WebSearchTool(
user_location="Tokyo, Japan",
search_context_size="high"
)
# 研究アシスタントエージェントの定義
research_agent = Agent(
name="Research Agent",
instructions="""
あなたは研究アシスタントです。ユーザーの質問に対して、最新の情報を含む詳細かつ正確な回答を提供してください。
""",
tools=[web_search_tool],
)
# 同期的にエージェントを実行し、結果を出力
result = Runner.run_sync(research_agent, "最新の量子コンピューティングの進展について教えてください。")
print(result.final_output)
このコード例では、以下の流れで動作します
- WebSearchToolの初期化: 「user_location」と「search_context_size」を指定して、検索結果の精度や関連性を向上させています。
- エージェントへのツールの統合: "Research Agent"がtoolsリストに「web_search_tool」を含むことで、エージェント内で必要に応じてウェブ検索が実行されます。
- Runnerによる実行: 「Runner.run_sync()」を使って、指定したプロンプトに対するエージェントの応答(Responses API経由で生成された結果)を同期的に取得します。
他の組み込みツールの利用例
同様に、FileSearchToolやComputerToolも公式ドキュメントに沿って使用できます。
たとえば、FileSearchToolを用いた例は以下のようになります。
from agents import Agent, Runner, FileSearchTool
file_search_tool = FileSearchTool(
vector_store_ids=["YOUR_VECTOR_STORE_ID"],
max_num_results=3
)
research_agent = Agent(
name="Research Agent",
instructions="Provide detailed answers by retrieving information from internal documents.",
tools=[file_search_tool],
)
result = Runner.run_sync(research_agent, "Find recent updates on quantum computing research.")
print(result.final_output)
この例では、内部のファイル(ベクトルストア)から情報を検索するためのツールを組み込んでいます。
ガードレールによる安全性確保
Agents SDKには、エージェントの動作を安全に保つためのガードレール機能が組み込まれています。
ガードレールを使用すると、エージェントの入力や出力を検証し、潜在的な問題を防止できます。
入力ガードレールの実装
カスタムガードレール関数を定義し、エージェントに適用する例を示します。
この例では、ユーザーの入力が宿題に関するものかどうかをチェックするガードレールを定義しています。
from agents import GuardrailFunctionOutput, Agent, Runner, InputGuardrail
from pydantic import BaseModel
import asyncio
class HomeworkOutput(BaseModel):
is_homework: bool
reasoning: str
guardrail_agent = Agent(
name="Guardrail check",
instructions="Check if the user is asking about homework.",
output_type=HomeworkOutput,
)
async def homework_guardrail(ctx, agent, input_data):
result = await Runner.run(guardrail_agent, input_data, context=ctx.context)
final_output = result.final_output_as(HomeworkOutput)
return GuardrailFunctionOutput(
output_info=final_output,
tripwire_triggered=not final_output.is_homework,
)
Pydanticモデルを活用した型安全なエージェント
Pydanticモデルを使用して、エージェントの出力の型を定義できます。
「output_type」パラメータにPydanticモデルを指定することで、エージェントの出力が特定の構造を持つことを保証できます。
from pydantic import BaseModel
class HomeworkOutput(BaseModel):
is_homework: bool
reasoning: str
guardrail_agent = Agent(
name="Guardrail check",
instructions="Check if the user is asking about homework.",
output_type=HomeworkOutput,
)
ガードレールの適用
以下は。ガードレールをトリアージエージェントに適用する例です。
この設定により、ユーザーの入力が宿題に関するものでない場合、トリアージエージェントはガードレールによってブロックされます。
triage_agent = Agent(
name="Triage Agent",
instructions="You determine which agent to use based on the user's homework question",
handoffs=[history_tutor_agent, math_tutor_agent],
input_guardrails=[
InputGuardrail(guardrail_function=homework_guardrail),
],
)
総合的なガードレール例
以下は、ハンドオフと入力ガードレールを組み合わせた完全な例です。
from agents import Agent, InputGuardrail, GuardrailFunctionOutput, Runner
from pydantic import BaseModel
import asyncio
class HomeworkOutput(BaseModel):
is_homework: bool
reasoning: str
guardrail_agent = Agent(
name="Guardrail check",
instructions="Check if the user is asking about homework.",
output_type=HomeworkOutput,
)
math_tutor_agent = Agent(
name="Math Tutor",
handoff_description="Specialist agent for math questions",
instructions="You provide help with math problems. Explain your reasoning at each step and include examples",
)
history_tutor_agent = Agent(
name="History Tutor",
handoff_description="Specialist agent for historical questions",
instructions="You provide assistance with historical queries. Explain important events and context clearly.",
)
async def homework_guardrail(ctx, agent, input_data):
result = await Runner.run(guardrail_agent, input_data, context=ctx.context)
final_output = result.final_output_as(HomeworkOutput)
return GuardrailFunctionOutput(
output_info=final_output,
tripwire_triggered=not final_output.is_homework,
)
triage_agent = Agent(
name="Triage Agent",
instructions="You determine which agent to use based on the user's homework question",
handoffs=[history_tutor_agent, math_tutor_agent],
input_guardrails=[
InputGuardrail(guardrail_function=homework_guardrail),
],
)
async def main():
result = await Runner.run(triage_agent, "who was the first president of the united states?")
print(result.final_output)
result = await Runner.run(triage_agent, "what is life")
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
トレーシングと可観測性
Agents SDKには、エージェントの動作を可視化し、デバッグするためのトレーシング機能が組み込まれています。
トレーシングは、エージェントのワークフローを把握し、パフォーマンスを最適化するために重要です。
エージェント実行の追跡
トレーシングは自動的に有効化されており、エージェントの実行を簡単に追跡・デバッグできます。エージェントの実行中に何が起こったかを確認するには、
OpenAIダッシュボードのトレースビューアを使用します。
デバッグとパフォーマンス最適化
トレーシングデータを分析することで、以下のような洞察を得ることができます:
- エージェントが最も時間を費やしているタスク
- ボトルネックとなっているツールや処理
- エージェント間のハンドオフの効率性
- トークン使用量が多いプロセス
これらの洞察に基づいて、エージェントの指示改善やツール選択の最適化、ワークフローの効率化などを行うことができます。
トレースビューアの活用
OpenAIダッシュボードのトレースビューアを使用すると、エージェントの実行フローを視覚的に確認できます。
これにより、エージェント間のハンドオフや、各エージェントの決定プロセスを詳細に把握できます。
以下は、トレーシング設定の簡単なコード例です:
from agents import Runner, TracingConfig
config = TracingConfig(
enabled=True,
destination="logfire", # 例: Logfireなど外部送信先を指定
)
result = Runner.run_sync(agent, "How do I solve 2x+3=7?", tracing_config=config)
print(result.final_output)
実際の活用事例
Agents SDKは様々な業界や用途で活用されています。以下に代表的な活用事例を紹介します。
Coinbaseの事例:暗号資産エージェント
Coinbaseは、Agents SDKを使って「AgentKit」という暗号資産ウォレットや様々なオンチェーン活動とシームレスに連携するAIエージェントのツールキットを開発しました。
わずか数時間で、Developer Platform SDKのカスタムアクションを完全に機能するエージェントに統合することができました。AgentKitのシンプルなアーキテクチャにより、新しいエージェントアクションの追加プロセスが簡素化され、開発者は複雑なエージェント設定よりも意味のある統合に集中できるようになりました。
Boxの事例:エンタープライズデータ検索
Boxは、ウェブ検索とAgents SDKを利用して、企業が非構造化データを検索、クエリ、分析できるエージェントをわずか数日で作成しました。
このアプローチにより、顧客は最新の情報にアクセスするだけでなく、内部の権限やセキュリティポリシーに従いながら、内部の独自データを安全かつセキュアに検索することができます。例えば、金融サービス企業がBoxに保存されている内部の市場分析とウェブからのリアルタイムニュースや経済データを統合し、投資判断のための包括的な視点を提供するカスタムエージェントを構築できるようになりました。
業界別応用例
Agents SDKは、以下のような様々な業界で応用されています:
カスタマーサポート:
- 複数の専門エージェントによる段階的なサポート
- 問い合わせの自動分類と適切なエージェントへの振り分け
- 複雑な質問に対する統合的な回答の生成
金融サービス: - 投資アドバイスの自動化
- リスク分析と評価
- 市場データの統合と分析
教育: - パーソナライズド学習支援
- 科目別の家庭教師エージェント
- 学習進捗の追跡と最適化
ヘルスケア: - 医療情報の検索と提供
- 患者の質問に対する初期対応
- 医療専門家の意思決定支援
これらの応用例は、Agents SDKの柔軟性と拡張性を示しています。様々な業界固有のニーズに合わせてカスタマイズできる点が、その強みと言えるでしょう。
開発のベストプラクティス
Agents SDKを使ったエージェント開発において、以下のベストプラクティスを推奨します。
効果的なエージェント設計ガイドライン
- 明確な責任分担
- 各エージェントには明確で具体的な役割を割り当てる
- 責任が重複するエージェントは避ける
- 「単一責任の原則」に従ってエージェントを設計する
<vr<>>
- 効果的な指示文の作成
- 具体的かつ明確な指示を提供する
- エージェントの役割、目標、制約条件を明示する
- 例示を含めることで期待する動作を示す
以下のコード例は、研究アシスタントとして動作するエージェント「Research Agent」を定義しています。
research_agent = Agent(
name="Research Agent",
instructions="""
あなたは研究アシスタントです。ユーザーの質問に対して詳細で正確な情報を提供してください。
以下のガイドラインに従ってください:
1. 最新の情報源を活用してください
2. 複数の視点を含めるよう心がけてください
3. 事実と意見を明確に区別してください
4. 専門用語を使用する場合は、簡潔な説明を添えてください
例:「量子コンピューティングとは何ですか?」という質問に対しては、基本概念、現在の研究状況、
実用化の見通し、主要企業の取り組みなどを含めた包括的な回答を提供してください。
""",
tools=[web_search_tool],
)
パフォーマンス最適化のヒント
-
トークン使用量の最適化
- 指示文は簡潔かつ明確に
- 中間データの受け渡しは必要最小限に
- ツールの使用は目的に応じて適切に選択
-
レイテンシの最小化
- 並列処理が可能な場合は非同期実行を活用
- 頻繁に使用されるデータはキャッシュを検討
- トレーシングデータを活用してボトルネックを特定
エラーハンドリング
- 堅牢なエラーハンドリング
- API呼び出しの失敗に対する再試行メカニズムの実装
- タイムアウト設定による無限ループの防止
- 例外をキャッチして適切なフォールバック処理を実装
try:
result = await Runner.run(agent, input_text, timeout=60)
except Exception as e:
print(f"エラーが発生しました: {str(e)}")
# フォールバック処理
これらのベストプラクティスに従うことで、より堅牢で効率的なエージェントシステムを構築することができます。
まとめ
OpenAI Agents SDKは、複数のAIエージェントを連携させて複雑なタスクを処理するための強力なオープンソースツールです。
主な特徴と利点:
- 柔軟なエージェント定義とオーケストレーション機能
- 強力なハンドオフ機能によるエージェント間の連携
- 包括的なガードレールによる安全性の確保
- 高度なトレーシングと可観測性ツールによるデバッグと最適化
Agents SDKを活用することで、カスタマーサポート自動化、研究アシスタント、データ分析、コンテンツ生成など、様々な分野での複雑なワークフローを効率的に自動化することができます。
特に、Responses APIやその組み込みツール(ウェブ検索、ファイル検索、コンピュータ使用)と組み合わせることで、その能力は大幅に拡張されます。
Agents SDKは継続的に改善されており、今後さらに多くの機能が追加されることが期待されます。AIエージェントの可能性を最大限に引き出すための重要なツールとして、今後の発展から目が離せません。