点击上方“阿三先生”↑↑↑关注我
开发在使用gpt的过程中,我们知道gpt的响应是很慢的,如果是商用过程中,会使用户等待不耐烦,直接放弃产品。在对话过程中,及时的交互是很有必要的。
所以我们可以使用gpt的流式进行响应。
首先,让我们解释一下什么是流式技术。流式技术是指在数据传输过程中,数据被切成小块,按照一定的顺序流动,以便能够在不等待全部数据传输完成的情况下立即开始处理这些数据。这种技术可用于各种应用程序中,例如视频流媒体、语音识别和实时聊天等。
ChatGPT利用流式技术实现了实时聊天的功能。当用户输入一条消息时,ChatGPT会将这条消息拆分成小块,并按照顺序发送到服务器。服务器会在收到每个小块后,立即对其进行处理,并返回一个响应。这个响应被分成小块,并按照顺序发送回客户端,以便能够立即显示给用户。
在ChatGPT中,当一个新的用户连接到服务器时,服务器会为该用户创建一个新的GPT-3.5模型实例。这个模型实例会根据用户之前的对话历史来自动调整模型参数,以便更好地适应该用户的对话风格和语言习惯。当用户输入新的消息时,服务器会使用这个模型实例来生成一个响应,并将响应分成小块进行流式传输。
ChatGPT的流式技术具有多种优点。首先,它可以实现实时聊天,让用户可以立即看到响应。其次,它可以处理大量的消息,而不会出现内存不足或处理延迟等问题。最后,它可以适应不同用户的对话风格和语言习惯,从而提高对话质量和用户体验。
gpt提供参数stream:是否流式返回,会通过结束符告知流的结束stop。
但在使用时发现也会返回length:代表流数据结束,但内容并不完整;因为token导致的,token用完了但内容还未返回完整。
在实际使用过程中发现在gpt-3(text-davinci-003)中,并没有结束符stop,需要在流数据结束时,手动添加结束符stop。
在使用gpt的SDK中发现,会有两个函数create 和 异步函数acreate。
在开发流服务的时候使用异步函数acreate,
response = await openai.ChatCompletion.acreate(
model=model,
messages=data["messages"],
temperature=0.0,
max_tokens=500,
stream=True,
timeout=3
)
注意返回的是异步迭代器,处理如下:
async for tmp in response:
choices = tmp["choices"]
流数据展示如下:
数据返回是按字节返回的,如果接入公众号,按字节返回,估计用户得炸,哈哈
所以我门修改为按标点断句,按短句返回:
结论:
以“讲个故事”为例,gpt返回时间大致如下
1、使用GPT一句话返回时,一个长文本返回耗时约20秒
2、使用GPT按字节返回时,第一个数据返回耗时约0.6秒
3、使用GPT按短句返回时,第一个短句返回耗时约1.1秒
关注公众号回复:chatgpt
对chatgpt感兴趣的小伙伴欢迎进群交流,可做技术探讨、需求付费解答、提供付费服务等