OpenAI APIで、GPTのstreamレスポンスをPythonで実装する方法のメモです。
OpenAI APIでGPTを呼び出すと、デフォルトでは全ての回答生成が終わってからレスポンスが返ってきます。
これを、ブラウザのChatGPTのように順次レスポンスをstreamで返させる方法をメモします。
# 作業環境# openai version0.28.0
なお本記事のコードは下記GitHubレポジトリに配置しています。
下記のように実装します:
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にすることで待ち時間が短縮され、多くのケースでユーザー体験が向上します。
上手く使いこなしていきたいところです。
[関連記事]
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。