OpenAI Agents SDKチートシート
OpenAI Agents SDKは、エージェントアプリを構築するための小さくて意見的なPythonフレームワークです。4つのコアプリミティブを公開しています — エージェント(LLMと指示とツール)、ツール(Pythonの関数またはホストされたツール)、ハンドオフ(別のエージェントへの実行の委譲)、ガードレール(入力と出力の検証) — セッション でのメモリとトレーシングがビルトインされています。プロバイダに柔軟ですが、OpenAIモデルでボックスから動作します。
インストール
| ステップ | コマンド |
|---|
| インストール | pip install openai-agents |
| uvで | uv add openai-agents |
| キーを設定 | export OPENAI_API_KEY="sk-..." |
| 音声エクストラ | pip install "openai-agents[voice]" |
| 確認 | python -c "import agents; print(agents.__version__)" |
最小限のエージェント
from agents import Agent, Runner
agent = Agent(
name="Assistant",
instructions="You are a concise, helpful assistant.",
)
result = Runner.run_sync(agent, "Summarize the Unix philosophy in one line.")
print(result.final_output)
| 呼び出し | 説明 |
|---|
Runner.run_sync(agent, input) | 同期的に実行 |
await Runner.run(agent, input) | 非同期に実行 |
Runner.run_streamed(agent, input) | イベントが発生したときにストリーム |
result.final_output | エージェントの最終的な答え |
result.new_items | 構造化された実行アイテム(メッセージ、ツール呼び出し、ハンドオフ) |
ツール
from agents import Agent, function_tool
@function_tool
def get_weather(city: str) -> str:
"""Return the weather for a city."""
return f"Sunny in {city}"
agent = Agent(name="Weather", tools=[get_weather])
| コンセプト | 説明 |
|---|
@function_tool | 型付きPython関数をツールに変える(スキーマはシグネチャ/ドキュ文字列から自動生成) |
| ホストされたツール | Webサーチとファイルサーチのようなビルトイン |
tool_use_behavior | ツール出力がターンを終わらせるかどうかを制御 |
| エージェント as ツール | agent.as_tool(...)は1つのエージェントを別のエージェントの呼び出し可能なツールとして公開 |
ハンドオフ
from agents import Agent, handoff
billing = Agent(name="Billing", instructions="Handle billing questions.")
triage = Agent(
name="Triage",
instructions="Route the user to the right specialist.",
handoffs=[billing], # or handoff(billing, ...)
)
ハンドオフは1つの実行内で完全な会話を受信エージェントに転送します。入力ガードレールは最初のエージェントに適用され、出力ガードレールは最終出力を生成するエージェントに適用されます。
ガードレール
from agents import Agent, input_guardrail, GuardrailFunctionOutput
@input_guardrail
async def no_secrets(ctx, agent, user_input):
tripped = "password" in user_input.lower()
return GuardrailFunctionOutput(output_info={}, tripwire_triggered=tripped)
agent = Agent(name="Safe", input_guardrails=[no_secrets])
| タイプ | 実行 | 目的 |
|---|
@input_guardrail | エージェントの前 | ユーザー入力を検証/スクリーン |
@output_guardrail | 最終出力後 | エージェントの応答を検証 |
| ツールガードレール | 各ツール呼び出しの周囲 | 個別ツールの入出力をチェック |
| トリップワイヤ | トリガー時 | 実行を中止するための例外を発生 |
セッション(メモリ)
from agents import Agent, Runner, SQLiteSession
session = SQLiteSession("user-123", "conversations.db")
Runner.run_sync(agent, "My name is Nick.", session=session)
Runner.run_sync(agent, "What's my name?", session=session) # remembers
| セッション | 使用方法 |
|---|
SQLiteSession | ローカル/永続的な会話メモリ |
| インメモリセッション | プロセス内の短命コンテキスト |
| カスタムセッション | セッションプロトコルを実装して独自のストアに対応 |
トレーシング
| 機能 | 説明 |
|---|
| 自動トレース | すべてのRunner.runはモデル呼び出し、ツール呼び出し、ハンドオフ、ガードレール結果、タイミングを記録 |
| ダッシュボード | トレースはOpenAIプラットフォームのプロジェクト下に表示 |
trace(...) | 複数の実行を1つのワークフロートレースにグループ化 |
| 外部プロセッサ | サードパーティの可観測性ツールにスパンをエクスポート |
一般的なワークフロー
# UIにトークンをストリーミング
import asyncio
from agents import Agent, Runner
async def main():
agent = Agent(name="Writer", instructions="Write vividly.")
streamed = Runner.run_streamed(agent, "Describe a thunderstorm.")
async for event in streamed.stream_events():
print(event)
asyncio.run(main())
リソース