如何做到实时停止Chatgpt的内容输出?

        我们在以流的模式开发Chatgpt的应用时,通常会需要有一个能够停止Chatgpt内容输出的功能。如下图所示:

        我们如果用OpenAI的模块开发这样的代码时,一般会这样写实现代码:

import time
import openai# 设置OpenAI API访问密钥
openai.api_key = "YOUR_API_KEY"class ChatGPTStream:def __init__(self):self.stop_flag = Falsedef callback(self, response):# 在回调函数中处理ChatGPT的响应# 这里只是简单地打印响应内容,您可以根据需求进行其他处理print(response['choices'][0]['text'])def generate(self):# 创建Completion对象completion = openai.Completion.create(engine='text-davinci-003',prompt='What is your question?',temperature=0.7,max_tokens=100)# 获取生成的回调URLcallback_url = completion['choices'][0]['callback_url']# 使用长轮询来获取ChatGPT的响应while not self.stop_flag:response = openai.Completion.fetch(callback_url)self.callback(response)time.sleep(3)  # 每个循环等待3秒def start(self):self.stop_flag = Falseself.generate()def stop(self):self.stop_flag = True# 示例使用方法
stream = ChatGPTStream()
stream.start()# 点击按钮来停止生成请求
stream.stop()

        可以看到,这种方式并不是真正意义上的实时停止,我们只是暂停了 openai.Completion.fetch 获取输出内容,但OpenAI还是会源源不断继续发送内容过来,造成了token的实际消耗。

        那么,究竟如何实现实时停止Chatgpt的内容输出呢?

        这里提供两种思路:

  • 如果我们是直接用EventSource协议直连OpenAI的话,也是可以通过 eventSource.close()方法真正实时中断内容输出的。
  • 如果我们是采用WebSocket协议的话,如Bmob AI SDK的采用的方式,可以直接通过关闭WebSocket连接,同样可以达到实时中断内容输出的目的。

        当然了,不管是什么样的方法,都要优先考虑可行性,分析这两种协议的优缺点,找出对你最有利的实现方式出来。不管黑猫白猫,能抓老鼠的就是好猫。

        欢迎对AI应用感兴趣的朋友联系我(微信:xiaowon12),一起交流AI大计。

 

本文链接:https://my.lmcjl.com/post/10404.html

展开阅读全文

4 评论

留下您的评论.