メインコンテンツへスキップ
見出し画像

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

    次回



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ