Movatterモバイル変換


[0]ホーム

URL:


BioErrorLog Tech Blog

試行錯誤の記録

トップ>ChatGPT>OpenAI APIでGPTのstreamレスポンス | Python
最終更新日

OpenAI APIでGPTのstreamレスポンス | Python

OpenAI APIで、GPTのstreamレスポンスをPythonで実装する方法のメモです。

はじめに

OpenAI APIでGPTを呼び出すと、デフォルトでは全ての回答生成が終わってからレスポンスが返ってきます。

これを、ブラウザのChatGPTのように順次レスポンスをstreamで返させる方法をメモします。

# 作業環境# openai version0.28.0

なお本記事のコードは下記GitHubレポジトリに配置しています。

github.com

OpenAI APIでGPTのstreamレスポンス

下記のように実装します:

import osimport openaiopenai.api_key = os.environ["OPENAI_API_KEY"]defmain() ->None:    response = openai.ChatCompletion.create(        model="gpt-3.5-turbo-0613",        messages=[            {'role':'user','content':'Hello?'}        ],        stream=True    )    collected_chunks = []    collected_messages = []for chunkin response:        collected_chunks.append(chunk)        chunk_message = chunk['choices'][0]['delta'].get('content','')        collected_messages.append(chunk_message)print(f"Message received: {chunk_message}")    full_reply_content =''.join(collected_messages)print(f"Full conversation received: {full_reply_content}")if __name__ =="__main__":    main()

Ref.python-examples/openai_stream/main.py at main · bioerrorlog/python-examples · GitHub

まずはChatCompletion.createに対してstream=Trueのオプションを渡すことで、レスポンスをstreamにすることができます。

その上で、responseに追加されていくchunkをforループで取り出します:

    collected_chunks = []    collected_messages = []for chunkin response:        collected_chunks.append(chunk)        chunk_message = chunk['choices'][0]['delta'].get('content','')        collected_messages.append(chunk_message)print(f"Message received: {chunk_message}")

chunkは下記のフォーマットで返されるので、deltaに含まれるメッセージコンテンツをchunk['choices'][0]['delta'].get('content', '')のようにして取り出しています。

{  "id": "chatcmpl-123",  "object": "chat.completion.chunk",  "created":1677652288,  "model": "gpt-3.5-turbo",  "choices":[{    "index":0,    "delta":{      "content": "Hello",    },    "finish_reason": "stop"  }]}

Ref.The chat completion chunk object - OpenAI API Reference

上記のコードの実行結果はこんな感じです:

Message received: Message received: HelloMessage received: !Message received:  HowMessage received:  canMessage received:  IMessage received:  assistMessage received:  youMessage received:  todayMessage received: ?Message received: Full conversation received: Hello! How can I assist you today?


OpenAIが公式に出しているサンプルコードもあるので、こちらも参照ください:openai-cookbook/examples/How_to_stream_completions.ipynb at main · openai/openai-cookbook · GitHub

おわりに

以上、OpenAI APIでGPTのstreamレスポンスをPythonで実装する方法をまとめました。

レスポンスをstreamにすることで待ち時間が短縮され、多くのケースでユーザー体験が向上します。

上手く使いこなしていきたいところです。

Follow @bioerrorlog

[関連記事]

www.bioerrorlog.work

参考

筆者
id:BioErrorLog

BioErrorLog
AI/クラウド/データエンジニアリングなど. ゲームもつくる.

カテゴリー
検索

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp