OpenAI Agents SDK 入門 (1) - 事始め
「OpenAI Agents SDK」の概要についてまとめました。
1. Agents SDK
「Agents SDK」は、Agentシステムを構築するための軽量パッケージです。これは、以前の実験プロジェクト「Swarm」の本番環境対応版となります。
「Agents SDK」は、以下な最小限のプリミティブで構成されています。
・Agent : 指示とToolを備えたLLM
・Handoff : 特定のタスクを他のAgentに委任できる機能
・Guardrail : Agentへの入力を検証するしくみ
これらのプリミティブを Python と組み合わせることで、ToolとAgentの間の複雑な関係を表現し、学習コストなしに実用的なアプリケーションを構築できます。
さらに、SDK には トレース機能(Agentの動作を可視化・デバッグできる機能)が組み込まれており、フローの評価や、アプリケーション向けのモデルのファインチューニングも可能です。
2. Agents SDK を使うべき理由
「Agents SDK」の設計には、以下の2つの基本原則があります:
(1) 十分な機能を備えつつ、学習コストを抑えるためにプリミティブを最小限にする。
(2) すぐに使える便利さを持ちながら、動作のカスタマイズも可能にする。
「Agent SDK」の主な特徴は、次のとおりです。
・Agent Loop
AgentがToolを呼び出し、結果をLLMに送信し、LLMが処理を終了するまで繰り返す「Agent Loop」が組み込まれています。
・Python-first
新しい抽象概念を学ぶ必要はなく、Pythonの組み込み機能を使ってAgentの連携やオーケストレーションを行えます。
・Handoff
複数のAgent間でタスクの調整・委任を行うための強力な機能を提供します。
・Guardrail
入力の検証やチェックをAgentの処理と並行して実行し、問題があれば早期に処理を停止できます。
・Function Tool
どんな Python関数でもToolとして利用可能。自動スキーマ生成と Pydantic によるバリデーションを備えています。
・トレース
トレース機能が組み込まれており、ワークフローの可視化・デバッグ・監視が可能。また、OpenAI の評価、ファインチューニング、ディスティレーションToolと統合できます。
3. Agents SDK の HelloWorld の実行
ローカルPCのPython仮想環境で「Hello World」を実行します。
(1) ローカルPCでPython仮想環境を準備。
(2) ローカルPCの環境変数「OPENAI_API_KEY」にAPIキーを指定。
export OPENAI_API_KEY=sk-...(3) パッケージのインストール。
pip install openai-agents(4) コードの作成。
・helloworld.py
from agents import Agent, Runner
# Agentの作成
agent = Agent(name="Assistant", instructions="あなたは役に立つアシスタントです")
# Agentの実行
result = Runner.run_sync(agent, "プログラミングにおける再帰について俳句を書いてください。")
print(result.final_output)(5) コードの実行。
python helloworld.py関数呼び
自らをまた
呼ぶ響き
4. Agents SDK の オーケストレーション の実行
ローカルPCのPython仮想環境で「オーケストレーション」を実行します。
(1) コードの作成。
・homework.py
from agents import Agent, InputGuardrail, GuardrailFunctionOutput, Runner
from pydantic import BaseModel
import asyncio
# 数学家庭教師Agentの定義
math_tutor_agent = Agent(
name="Math Tutor",
handoff_description="数学の質問に特化したAgent",
instructions="あなたは数学の問題を手助けします。各ステップで論理的な説明を行い、例を含めてください。",
)
# 歴史家庭教師Agentの定義
history_tutor_agent = Agent(
name="History Tutor",
handoff_description="歴史の質問に特化したAgent",
instructions="あなたは歴史に関する質問を手助けします。重要な出来事や背景を明確に説明してください。",
)
# 宿題に関する質問かどうかを判断するモデル
class HomeworkOutput(BaseModel):
is_homework: bool # 宿題に関する質問かどうか
reasoning: str # その判断の理由
# Guardrail Agentの定義
guardrail_agent = Agent(
name="Guardrail check",
instructions="ユーザーが宿題について質問しているか確認してください。",
output_type=HomeworkOutput,
)
# Guardrail関数の定義
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,
)
# トリアージAgentの定義
triage_agent = Agent(
name="Triage Agent",
instructions="ユーザーの質問が宿題に関するものかを判断し、適切なAgentを選択してください。",
handoffs=[history_tutor_agent, math_tutor_agent], # ハンドオフ
input_guardrails=[
InputGuardrail(guardrail_function=homework_guardrail),
],
)
# メイン
async def main():
# 「アメリカの最初の大統領は誰ですか?」の質問を処理
try:
result = await Runner.run(triage_agent, "アメリカの初代大統領は誰ですか?")
print(result.final_output)
except Exception as e:
print("エラー:", e)
# 「人生とは何か?」の質問を処理
try:
result = await Runner.run(triage_agent, "人生とは何か")
print(result.final_output)
except Exception as e:
print("エラー:", e)
# メインの実行
if __name__ == "__main__":
asyncio.run(main())(2) コードの実行。
1問目は歴史家庭教師が答え、2問目はGuardrailで却下されます。
python homework.pyアメリカの初代大統領はジョージ・ワシントンです。
エラー: Guardrail InputGuardrail triggered tripwire
