分别使用了flask框架和sanic框架进行openai接口的流式传输,结果flask可以,但是sanic不行(具体表现为flask可以出现打字机效果而sanic同样是流式输出却只能一次性全部输出)代码均已调试成功,目前
找不出sanic框架无法出现打字机效果的原因。以下是没有办法实现打字机效果的sanic-21.3.1框架代码:
import openai, os
from sanic import Sanic, request
app = Sanic(name='gpt_sanic')
from sanic.views import stream
from sanic_cors import CORS
from sanic import HTTPResponse
# from sanic.views import stream
from sanic.response import stream
# app.config['SECRET_KEY'] = os.urandom(24)
CORS(app, sources=r'/*')
def text_handle(text_0, parame_dict):
import re
parame_list = parame_dict.keys()
z = re.findall(r'[{](.*?)[}]', text_0)
for i in z:
if i in parame_list:
text_0 = text_0.replace("{" + i + "}", parame_dict[i])
else:
text_0 = text_0.replace("{" + i + "}", '')
print(f'{i}字段未定义')
return text_0
@app.route('/', methods=['POST', "GET"])
async def get_gpt_response(request):
application4 = request.json["text_"]
parame_dict = request.json
print(parame_dict, type(parame_dict))
question = text_handle(application4, parame_dict)
temperature = int(request.json['temperature']) / 10
question = str(question).strip()
openai.api_key = ""
messages = []
user_message_dict = {"role": "user", "content": question}
messages.append(user_message_dict)
response0 = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages, stream=True,temperature=temperature)
async def streaming_fn0(response):
# response=request.respond(content_type="text/csc")
for i, text in enumerate(response0, start=1):
if text["choices"][0]['finish_reason'] is not None:
data = '[DONE]'
# response.write(data)
else:
data = text["choices"][0].get('delta', '').get('content', '')
print(data)
await response.write("%s\n\n" % data.replace('\n', '<br>'))
# yield "%s\n\n" % data.replace('\n', '<br>')
return stream(streaming_fn0,content_type="text/csc")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
期望解惑!