メむンコンテンツぞスキップ
芋出し画像

OpenAI Responses API 入門 (5) - 䌚話状態

    「Responses API」の「䌚話状態」぀いおたずめたした。

    ・Conversation state

    前回

    1. 䌚話状態

    「OpenAI API」は䌚話状態を管理するいく぀かの方法を提䟛したす。これは、マルチタヌン䌚話を実装するために重芁です。

    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. マルチタヌンの䌚話

    各テキスト生成リク゚ストは独立しおおりステヌトレスですが、メッセヌゞリストに過去の䌚話履歎を含めるこずで、マルチタヌンの䌚話を実装できたす。

    # 掚論の実行
    response = client.responses.create(
        model="gpt-4o",
        input=[
            {"role": "user", "content": "日本䞀高い山は"},
            {"role": "assistant", "content": "日本䞀高い山は、富士山です。"},
            {"role": "user", "content": "その山は䜕県にある"},
        ],
    )
    print(response.output_text)

    富士山は、静岡県ず山梚県にたたがっおいたす。

    4. 手動での䌚話状態の管理

    (1) 1タヌン目の䌚話。

    # メッセヌゞリストの準備
    messages = [
        {"role": "user", "content": "日本䞀高い山は"}
    ]
    
    # 掚論の実行
    response = client.responses.create(
        model="gpt-4o",
        input=messages,
        store=False
    )
    print(response.output_text)

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

    (2) 2タヌン目の䌚話。

    # メッセヌゞリストに応答を远加
    messages += [{"role": el.role, "content": el.content} for el in response.output]
    
    # 新しいメッセヌゞの远加
    messages.append({ "role": "user", "content": "その山は䜕県にある" })
    
    # 掚論の実行
    second_response = client.responses.create(
        model="gpt-4o-mini",
        input=messages,
        store=False
    )
    print(second_response.output_text)

    富士山は、静岡県ず山梚県にたたがっおいたす。

    5. previous_response_idでの䌚話状態の管理

    previous_response_idを䜿甚するこずで、応答を連鎖させ、スレッド化された䌚話を䜜成できたす。

    (1) 1タヌン目の䌚話。

    # 掚論の実行
    response = client.responses.create(
        model="gpt-4o-mini",
        input=[{"role": "user", "content": "日本䞀高い山は"}],
    )
    print(response.output_text)

    (2) 2タヌン目の䌚話。

    # 掚論の実行
    second_response = client.responses.create(
        model="gpt-4o",
        previous_response_id=response.id,
        input=[{"role": "user", "content": "その山は䜕県にある"}],
    )
    print(second_response.output_text)

    6. コンテキストりィンドりの管理

    6-1. コンテキストりィンドり

    「コンテキストりィンドり」は、1 回のリク゚ストで䜿甚できるトヌクンの最倧数です。この最倧トヌクン数には、入力トヌクン、出力トヌクン、Reasoningトヌクンが含たれたす。モデルのコンテキストりィンドりを確認するには、モデルの詳现を参照しおください。

    6-2. 出力トヌクンずコンテキストりィンドりの制限

    入力が耇雑になったり、䌚話のタヌンが増えたりするず、「出力トヌクン」ず「コンテキストりィンドり」の䞡方の制限を考慮する必芁がありたす。モデルの入力ず出力はトヌクンで枬定され、入力から解析されおコンテンツず意図が分析され、論理的な出力をレンダリングするために組み立おられたす。モデルには、テキスト生成リク゚ストのラむフサむクル䞭のトヌクンの䜿甚に制限がありたす。

    ・出力トヌクンの制限
    出力トヌクンは、プロンプトに応じおモデルによっお生成されるトヌクンです。出力トヌクンの制限はモデルごずに異なりたす。たずえば、gpt-4o-2024-08-06は最倧 16,384 個の出力トヌクンを生成できたす。

    ・コンテキストりィンドりの制限
    コンテキストりィンドりは、入力トヌクンず出力トヌクンの䞡方に䜿甚できるトヌクン (および䞀郚のモデルではReasoningトヌクン) の合蚈数を衚したす。モデルのコンテキストりィンドりの制限を比范しおください。たずえば、gpt-4o-2024-08-06のコンテキストりィンドりは 128k トヌクンです。

    非垞に倧きなプロンプトを䜜成するず、モデルに割り圓おられたコンテキストりィンドりを超え、出力が切り捚おられるリスクがありたす。
    特定のテキスト文字列に含たれるトヌクンの数を確認するには、tiktoken ラむブラリで構築されたトヌクナむザヌツヌルを䜿甚したす。

    6-3. Reasoningモデルのコンテキストりィンドりの制限

    o1のようなReasoningが有効になっおいるモデルを䜿甚しおAPIリク゚ストを行うず、コンテキストりィンドりの合蚈に次のトヌクン数が適甚されたす。

    ・入力トヌクンinput配列に含める入力
    ・出力トヌクンプロンプトに応じお生成されるトヌクン
    ・Reasoningトヌクンモデルが応答を蚈画するために䜿甚

    コンテキストりィンドりの制限を超えお生成されたトヌクンは、API 応答で切り捚おられる可胜性がありたす。

    画像

    「トヌクナむザヌツヌル」を䜿甚しお、メッセヌゞで䜿甚されるトヌクンの数を芋積もるこずができたす。

    次回



     
     

    npaka

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

    あなたぞのおすすめ