AI

【AIエージェント】最新のOpenAI Agents SDKでエージェント開発を始めよう

2025年3月12日、OpenAIは開発者向けに「Responses API」と「Agents SDK」のリリース発表を行いました。

これらのツールにより、今後のAIエージェントの構築と運用を大幅に簡素化し、信頼性の高いエージェントの開発が行われるようになっていくと考えています。

本記事では、この「Agents SDK」の基本機能について詳しく解説し、実際の活用方法や導入のメリットを探っていきます。
マルチエージェントの構築を検討している方などの参考になればと思います。

Agents SDKの概要

まずは、Agents SDKの概要について、簡単にまとめておきます。

Agents SDKの基本説明

Agents SDKは、2025年3月12日にOpenAIから発表されたAgent機能を構築するためのSDKです。
※SDKとは:ソフトウェアを開発するために必要なツールをパッケージ化したもの

​このSDKを使用することで、エージェント間のタスクの引き継ぎや外部ツールとの連携を容易に行うことができ、より高度なAIアプリケーションの開発が可能となっています。

主要コンポーネント​

Agents SDKの主要なコンポーネントは以下になります。

コンポーネント概要
エージェント(Agent)大規模言語モデル(LLM)に指示やツール、ガードレール、ハンドオフ設定を組み合わせたもので、特定のタスクを実行する役割をもつ
ツール(Tool)​エージェントが外部機能を利用するためのインターフェース関数呼び出しや今回発表されたWeb検索、ファイル検索、コンピュータ操作などが含まれる
ハンドオフ(Handoff)エージェント間でタスクや情報を引き継ぐ仕組みで、特定の条件下で別のエージェントに処理を委ねることができる
ガードレール(Guardrail)エージェントの入力や出力を検証し、安全性や品質を確保するための機能
トレーシング(Tracing)​エージェントの実行過程を追跡し、デバッグやパフォーマンスの最適化に役立てる機能

Agents SDKの使い方

ここでは、Agents SDKの基本的な使い方について、順にみていきます。
Agents SDKの詳細は公式ドキュメントGithubも参考にしてください。

エージェントの設定と実行

エージェントを作成する際は、Agentクラスを使用します。​
エージェントには名前と指示(インストラクション)を設定します。
​以下に、エージェントの定義方法を示します。

from agents import Agent

agent = Agent(
    name="Assistant",
    instructions="You are a helpful assistant."
)

この例では、名前が「Assistant」で、指示が「You are a helpful assistant.」となるエージェントを作成しています。

エージェントを実行するには、Runnerクラスのrun_syncメソッドを使用します。​
このメソッドにエージェントとユーザーからの入力を渡すことで、エージェントが指示に従って応答を生成します。

from agents import Runner

result = Runner.run_sync(agent, "プログラミングにおける再帰について俳句を作ってください。")
print(result.final_output)

実行すると以下のように出力されました。

関数呼び  
内にまた呼ぶ  
再帰の道

ハンドオフ機能

Agents SDKのハンドオフ機能は、エージェント間でタスクを引き継ぐことを可能にします。​
これにより、マルチエージェントシステムの構築を行うことができます。

ここでは、言語に応じてエージェントを切り替えています。

from agents import Agent, Runner, handoff

# 英語対応エージェントの定義
english_agent = Agent(
    name="EnglishAssistant",
    instructions="You are an assistant that responds only in English. Be friendly and helpful."
)

# 日本語対応エージェントの定義
japanese_agent = Agent(
    name="JapaneseAssistant",
    instructions="あなたは日本語でのみ応答するアシスタントです。親切で役立つ回答を心がけてください。"
)

# 言語ルーターエージェントの定義
language_router = Agent(
    name="LanguageRouter",
    instructions="""
    あなたは言語を検出するエージェントです。
    ユーザーがどの言語で話しているかを判断してください。
    日本語の場合はJapaneseAssistantにハンドオフし、
    英語の場合はEnglishAssistantにハンドオフしてください。
    """,
    handoffs=[
        handoff(english_agent),
        handoff(japanese_agent)
    ]
)

# エージェントの実行例
result = Runner.run_sync(language_router, "こんにちは、お元気ですか?")
print(result.final_output)

この例では、language_routerエージェントがユーザーの入力言語を検出し、適切なエージェントにタスクをハンドオフします。
​例えば、日本語の入力に対してはJapaneseAssistantが応答を担当します。
今回は、「こんにちは、お元気ですか?」と聞いているため、以下のように日本語で回答が返ってきました。

こんにちは!はい、元気です。どうですか?何かお手伝いできることはありますか?

Function Toolsについて

Agents SDKでは、Python関数をツールとしてエージェントに組み込むことができます。
​エージェントは外部の機能やサービスを呼び出し、より高度なタスクを実行できます。

Python関数をツールとしてエージェントに組み込むには、@function_toolデコレータを使用します。

from agents import Agent, Runner, function_tool

@function_tool
def get_weather(city: str) -> str:
    """指定された都市の天気情報を取得します。"""
    # ここに天気情報を取得するロジックを実装
    return f"{city}の天気は晴れです。"

agent = Agent(
    name="Weather Agent",
    instructions="ユーザーに天気情報を提供します。",
    tools=[get_weather],
)

result = Runner.run_sync(agent, "東京の天気は?")
print(result.final_output)

この例では、get_weather関数をツールとして定義し、エージェントに組み込んでいます。
​ユーザーからの入力「東京の天気は?」に対して、エージェントはget_weather関数を呼び出し、天気情報を提供します。

結果は以下のようにかえってきます。

東京の天気は晴れです。

構造化された出力

エージェントの出力を構造化することで、応答の一貫性と信頼性を高めることができます。
Agents SDKでは、Pydanticを使用してエージェントの出力フォーマットを定義し、データの整合性と品質を確保することが可能です。

from pydantic import BaseModel
from agents import Agent, Runner

# 構造化出力モデルの定義
class WeatherResponse(BaseModel):
    location: str  # 場所
    temperature: float  # 気温
    unit: str  # 温度単位
    condition: str  # 天気状態
    recommendation: str  # おすすめ情報

@function_tool
def get_weather(city: str) -> WeatherResponse:
    """指定された都市の天気情報を取得し、WeatherResponse形式で返します。"""
    # ここに天気情報を取得するロジックを実装
    # 仮のデータを返す
    return WeatherResponse(
        location=city,
        temperature=25.0,
        unit="℃",
        condition="晴れ",
        recommendation="日焼け止めを持参してください。"
    )

# エージェントの定義
agent = Agent(
    name="WeatherAssistant",
    instructions="""
    あなたは天気情報を提供するアシスタントです。
    ユーザーからの天気に関する質問には、get_weather関数を使用して回答してください。
    """,
    tools=[get_weather],
    output_type=WeatherResponse
)

# エージェントの実行
result = Runner.run_sync(agent, "東京の天気はどうですか?")
print(result.final_output)

この例では、WeatherResponseというPydanticモデルを定義し、エージェントの出力がこのモデルに従うように設定しています。
​これにより、エージェントの出力が常にこちらで定義した形で出力できるようにしています。

結果は以下のようにかえってきます。

location='東京' temperature=25.0 unit='℃' condition='晴れ' recommendation='日焼け止めを持参してください。'

トレーシング機能での確認

今回発表されたAgents SDKでは、TraceがDashboard上で確認ができるようになりました。
これにより、ユーザの質問に対して、どのエージェントを通って回答が生成されているか確認できるようになり、予期せぬ挙動や処理を行っていないか視覚的に確認できます。

TraceのタブにはOpenAIのDashboardにログインした状態で、このURLから確認できます。

今回は、一覧画面からハンドオフ機能で実行したコードのTraceを行いました。

まとめ

​OpenAIの「Agents SDK」は、AIエージェントの開発と管理を容易にする強力なツールであることがわかりました。
​エージェント間のハンドオフ機能やツール統合、構造化された出力、トレーシング機能など、多彩な機能を備えています。​
これらを活用することで、複雑なタスクの自動化や効率化が可能となり、ビジネスや開発の現場ますます利用されていくこと思われます。

OpenAIの発表の中でも言われていましたが、2025年はAIエージェントが普及する年になりそうです。
その流れに遅れないように​引き続き、Agents SDKについては、活用方法などを探っていきます。