動かします。
🤖 Agents SDK - Swarmをベースとして改善したマルチエージェントワークフローをオーケストレーションする新たなオープンソースSDKです。ビルトインのツール、タスクの引き継ぎ、安全ガードレイルの追加、デバッグとパフォーマンス最適化のための実行トレースの可視化を用いてエージェントを設定します。
SDK自体はこちらに。
Hello Worldサンプル
%pip install openai-agents
%restart_python
import os
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get(scope="demo-token-takaaki.yayoi", key="openai_api_key")
Hello Worldサンプルを動かします。コメントやリテラルは翻訳しています。
from agents import Agent, Runner
agent = Agent(name="アシスタント", instructions="あなたは役に立つアシスタントです")
result = Runner.run_sync(agent, "プログラミングにおける再帰について俳句を書いてください。")
print(result.final_output)
# コードの中のコード、
# 自分自身を呼び出す関数、
# 無限ループの舞。
しかし、RuntimeError: This event loop is already runningとエラーになります。すでにループが実行中とな。
こちらに理由が。
ノートブック環境ではすでにイベントループが実行されているので、新規に作成する必要はないのでawait
すればいいとのこと。なので、以下のようにawait
します。
from agents import Agent, Runner
agent = Agent(name="アシスタント", instructions="あなたは役に立つアシスタントです")
result = await Runner.run(agent, "プログラミングにおける再帰について俳句を書いてください。")
print(result.final_output)
# コードの中のコード、
# 自分自身を呼び出す関数、
# 無限ループの舞。
動きました。
再帰せし
自己を呼び出し
解を探す
そして、トレースはhttps://platform.openai.com/traces
で確認できます。
引き継ぎサンプル
from agents import Agent, Runner
import asyncio
spanish_agent = Agent(
name="スペイン語エージェント",
instructions="あなたはスペイン語のみを話します。",
)
english_agent = Agent(
name="英語エージェント",
instructions="あなたは英語のみを話します。",
)
triage_agent = Agent(
name="トリアージエージェント",
instructions="リクエストの言語に基づいて適切なエージェントに引き継ぎます。",
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__":
await main()
¡Hola! Estoy bien, gracias. ¿Y tú?
スペイン語エージェントに引き継がれています。
関数サンプル
import asyncio
from agents import Agent, Runner, function_tool
@function_tool
def get_weather(city: str) -> str:
return f"{city}の天気は晴れです。"
agent = Agent(
name="こんにちは世界",
instructions="あなたは役に立つエージェントです。",
tools=[get_weather],
)
async def main():
result = await Runner.run(agent, input="東京の天気は?")
print(result.final_output)
# 東京の天気は晴れです。
if __name__ == "__main__":
await main()
経緯的にはこちら(SwarmのLangchain実装)ともオーバーラップしてきてます。OpenAIのAPIだけを使うのであればOpenAI Agents SDKの方が使いやすいのかもしれません。エージェントの足回りもどんどん整備されてきていますね。