見出し画像

OpenAI Agents SDK 入門 (1) - 事始め

「OpenAI Agents SDK」の概要についてまとめました。

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

次回



いいなと思ったら応援しよう!