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

新しい OpenAI API の クイックスタート - Responses API ・ Agents SDK

    新しい「OpenAI API」の クイックスタートをまとめました。

    ・Developer quickstart - OpenAI API

    1. 新しい OpenAI API

    「Responses API」は、​開発者が高度なAIエージェントを構築するための新しいAPIです。「Chat Completions」のシンプルさと、「Assistants API」のツール機能を組み合わせています。1回のAPI呼び出しで、複数のツールやモデルのターンを使用して、複雑なタスクを解決できるようにしています。

    「Agents SDK」は、開発者がエージェント型のAIアプリケーションを構築するための軽量で使いやすいツールキットです。「Swarm⁠」に比べて大幅な改善が加えられています。

    2. OpenAI API の準備

    「Google Colab」での「OpenAI API」の準備手順は次のとおりです。

    (1) パッケージのインストール。
    「Responses API」と「Agent SDK」のパッケージをインストールします。

    # パッケージのインストール
    !pip install -U openai openai-agents

    (2) 環境変数の準備。
    左端の鍵アイコンで「OPENAI_API_KEY」を設定してから、以下のセルを実行してください。

    画像
    import os
    from google.colab import userdata
    
    # 環境変数の準備 (左端の鍵アイコンでOPENAI_API_KEYを設定)
    os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")

    (3) クライアントの準備。

    from openai import OpenAI
    
    # クライアントの準備
    client = OpenAI()

    3. テキスト生成

    (1) メッセージリストの準備。

    # メッセージリストの準備
    messages = [
        {
            "role": "developer",
            "content": "優秀なAIアシスタントです。"
        },
        {
            "role": "user",
            "content": "日本一高い山は?",
        }
    ]

    (2) 推論の実行。

    # 推論の実行
    response = client.responses.create(
        model="gpt-4o",
        input=messages
    )
    print(response.output_text)

    日本一高い山は、富士山です。

    4. 画像認識

    (1) メッセージリストの準備。

    # メッセージリストの準備
    messages = [
        {
            "role": "user", 
            "content": "これは何の画像ですか?"
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "input_image",
                    "image_url": "https://assets.st-note.com/img/1699330153755-AtaoOsjEq4.jpg"
                }
            ]
        }
    ]
    画像

    (2) 推論の実行。

    # 推論の実行
    response = client.responses.create(
        model="gpt-4o",
        input=messages
    )
    print(response.output_text)

    この画像は、白と黒の模様がある猫が、テレビとゲーム機(Nintendo Switch)を背景にしてくつろいでいる様子を示しています。

    5. ツール

    (1) メッセージの準備。

    # メッセージリストの準備
    messages = [
        {
            "role": "user",
            "content": "本日のAI関連のニュースは?",
        }
    ]

    (2) 推論の実行。
    今回は「Web search」(web_search_preview) を使用してWeb検索を行います。

    # 推論の実行
    response = client.responses.create(
        model="gpt-4o",
        tools=[{"type": "web_search_preview"}],
        input=messages
    )
    print(response.output_text)

    本日(2025年3月13日)時点でのAI関連の最新ニュースは以下のとおりです。
    1. **神戸市、AI活用の新条例を計画** 神戸市は、行政分野でのAI活用を推進するため、新たな条例の制定を発表しました。この条例は全国初の試みで、市民サービスの向上や業務効率化を目的としています。条例には、AIの積極的な利用方針や非公開情報の入力禁止などが明記される予定です。また、「AI活用アドバイザー」を設置し、プライバシーや公平性の観点から第三者評価を行う計画です。市長は、市議会での答弁にはAIを使用せず、職員が自ら考えた答弁を行う方針を示しました。条例案は来年2月の市議会に提出される予定です。 ([sedesign.co.jp](https://www.sedesign.co.jp/ai-blog/ai-news-20231201?utm_source=openai))
    2. **ゆうちょ銀行、AIを活用して投資判断を強化** ゆうちょ銀行は、スタートアップ企業への投資先を発掘するため、AIの活用を開始しました。2025年には新システムを導入し、全国約2万4000の郵便局から収集される取引先や出資候補のデータを集約する計画です。AIによるデータ分析を基に、投資の是非を判断し、2030年度までにスタートアップなどへの投資を1兆円規模に増やすことを目指しています。 ([sedesign.co.jp](https://www.sedesign.co.jp/ai-blog/ai-news-20231201?utm_source=openai))
    これらの動向は、AI技術の社会的な活用が進んでいることを示しています。

    6. ストリーミング

    # メッセージリストの準備
    messages = [
        {
            "role": "user",
            "content": "早口言葉を言ってください。",
        }
    ]
    # 推論の実行
    stream = client.responses.create(
        model="gpt-4o",
        input=messages,
        stream=True,
    )
    for event in stream:
       if event.type == 'response.output_text.delta':
            print(event.delta, end='')

    もちろんです!有名な早口言葉をいくつか紹介しますね。

    1. 生麦生米生卵
    2. バスガス爆発
    3. 東京特許許可局

    どれも言うのが難しいので、ぜひ試してみてください!

    Colab上では数文字ずつストリーミング出力されます。

    7. エージェント

    (1) Colabでasyncio.run()を使うための前準備。
    Colabでasyncio.run()を使用するには、以下のコードの実行が必要です。

    # Colabでasyncio.run()を使うための前準備
    !pip install nest_asyncio
    import nest_asyncio
    nest_asyncio.apply()

    (3) エージェントの作成と実行。

    from agents import Agent, Runner
    import asyncio
    
    # 日本語エージェント
    japanese_agent = Agent(
        name="日本語エージェント",
        instructions="あなたは日本語しか話せません。",
    )
    
    # 英語エージェント
    english_agent = Agent(
        name="英語エージェント",
        instructions="あなたは英語しか話せません。",
    )
    
    # トリアージエージェント
    triage_agent = Agent(
        name="トリアージエージェント",
        instructions="リクエストの言語に基づいて適切なエージェントに引き継ぎます。",
        handoffs=[japanese_agent, english_agent],
    )
    
    # メイン
    async def main():
        result = await Runner.run(triage_agent, input="こんにちは")
        print(result.final_output)
    
    # メインの実行
    asyncio.run(main())

    こんにちは!今日はどんなお手伝いをしましょうか?

    次回



     
     

    npaka

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

    あなたへのおすすめ