OpenAIが新たにリリースしたAgents SDKを試してみる
はじめに
2025年3月12日にOpenAIからAgents SDKや新たなAPIの発表がありました。
詳細については以下の動画にデモベースでのアップデート内容の説明があるため、ご覧ください。
Agent SDKとは?
OpenAIが新たに提供をはじめたAgent機能を構築するためのSDKです。GithubでOSSとして公開されています。以前はSwarmという名称でexperimental versionとして提供が行われていたものの進化形であると理解しています。
AgentSDKを利用すると、自律的なふるまいをもつAgentが比較的に簡単に実行ができるようです。GithubのReadMEをベースに挙動を試してみたいと思います。
早速やってみよう
今回はResponseAPIの提供など様々な新機能の提供がありましたが、この記事では Agent SDKを実際に試してみたいと思います。
まずはサンプルコードをベースにHaikuを書いてもらう
サンプルコードではHello World的な役割でHaikuをAgentに読ませるコードの記載があったため、これを実行してみます。
■ソースコード
import os
from agents import Agent, Runner, set_tracing_export_api_key
os.environ["OPENAI_API_KEY"] = "sk-proj-xxxxxx"
set_tracing_export_api_key("sk-proj-xxxxxx")
# run_config = RunConfig(model_provider=model_provider)
agent = Agent(name="Assistant", instructions="You are a helpful assistant, always respond in Japanese")
result = Runner.run_sync(agent, "Write a haiku about recursion in programming in Japanese")
print(result.final_output)
出力内容
(openai-agent-experiment) tannerjohn@MacBook-Pro-2 openai-agent-experiment % python main.py
コード巡る
無限の中に
美を見る
(openai-agent-experiment) tannerjohn@MacBook-Pro-2 openai-agent-experiment %
エモい、なんかエモい。
一点、留意点としては、 set_tracing_export_api_key
の関数を実行しない場合、
OPENAI_API_KEY is not set, skipping trace export
の問題が発生しました。Agentのトレースを行うことができるDashboardが今回のリリースで追加されましたが、トレースがうまくいかなかったです。
上記の関数にAPIKeyを指定することでトレース内容が確認できました。(参考にしたIssue)
Trace機能が追加された。
上述のように、Agentの挙動を確認することができるTraceがDashboard上で確認ができるようになりました。この役割としては、Agentに与えるToolの実行履歴などを確認することで予期せぬ挙動や処理を行っていないかを確認することが目的のようです。
TraceのタブにはOpenAIのDashboardにログインした状態でコチラのURLから確認ができます。
Traceの情報は以下のように確認が可能です。今回は簡易的にHaikuを実施したのみであるため、以下のようにシンプルな実行結果ができました。
実際の構築を行う際には、様々なToolを連携させながら処理を行うことになると思います。
その際にはこのように実行履歴が確認できるTrace機能は非常に有効であると感じました。
エージェントの切り替え
Agentsを利用すると、入力内容に応じて自動的にエージェントを切り替える(ハンドオフする)ことができます。以下は言語に応じてスペイン語Agentと英語Agentを切り替える例です。
サンプルコードの内容になりますが、triage_agent
にAgentsを handoffs
に指定することでオーケストレーションが可能になります。
from agents import Agent, Runner
import asyncio
spanish_agent = Agent(
name="Spanish agent",
instructions="You only speak Spanish.",
)
english_agent = Agent(
name="English agent",
instructions="You only speak English",
)
triage_agent = Agent(
name="Triage agent",
instructions="Handoff to the appropriate agent based on the language of the request.",
handoffs=[spanish_agent, english_agent],
)
async def main():
result = await Runner.run(triage_agent, input="Hola, ¿cómo estás?")
print(result.final_output)
# ¡Hola! Estoy bien, gracias por preguntar. ¿Y tú, cómo estás?
if __name__ == "__main__":
asyncio.run(main())
Functionsの利用
Agent SDKでは、Pythonの関数をツールとして簡単に登録し、エージェントから呼び出すことができます。以下は、天気情報を取得する関数をツールとして利用し、その結果をエージェントが返却する例です。
import asyncio
from agents import Agent, Runner, function_tool
@function_tool
def get_weather(city: str) -> str:
return f"The weather in {city} is sunny."
agent = Agent(
name="Hello world",
instructions="You are a helpful agent.",
tools=[get_weather],
)
async def main():
result = await Runner.run(agent, input="What's the weather in Tokyo?")
print(result.final_output)
# The weather in Tokyo is sunny.
if __name__ == "__main__":
asyncio.run(main())
@function_tool というデコレータを使用することで、通常のPython関数がエージェントのツールとして認識され、内部で関数を呼び出す流れが生成されます。必要に応じて、外部APIとの連携などをツールとして定義すれば、エージェントが自然言語を介して柔軟に動作できるようになります。
おわりに
今回の記事では、OpenAIが提供を開始したAgent SDKでReadMEの内容をベースに試してみるを記載しました。
今回のリリースでは、Agentがブラウザの操作が可能なComputer useの機能や簡単にRAGの構築が可能なResponseAPIも追加されたため、これらの機能も試してみたいと思います。
冒頭に紹介したYouTube動画では、明確にOpenAIのCPOであるKevin Weliから「2025年はAgentの年になる」との言及がありました。
これまでのLLMの主要な体験であった「対話」から「対話 + Agentによる実行」に変化していく潮流になると予測されます。
様々な機能を組み合わせたAgent構築も今後試してみたいと思います!
Discussion