代码小鬼才 2023-05-17 10:20 采纳率: 100%
浏览 70
已结题

sanic+文字流式传输+打字机效果

分别使用了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)

期望解惑!

  • 写回答

7条回答 默认 最新

  • 天池小天 2023-05-25 18:34
    关注

    涛哥 我爱你😍

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 赞助了问题酬金50元 5月25日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 MATLAB报错问题
  • ¥100 多线程+连接池+代理 运行一段时间线程阻塞
  • ¥15 matlab导致电脑重启问题
  • ¥15 Android studio打开dex
  • ¥20 为何R语言love图显示的分类变量点与smd值不一致
  • ¥15 asp.net实验:数据库写入不成功
  • ¥15 C#视频播放器的原码,有的发一
  • ¥15 用FDTD计算并提取光栅结构的正负一级衍射光的光功率
  • ¥30 AVL fire DVI中的Design Explorer里面的Run的Status为什么总是Terminated?哪里出问题了?需要修改哪里?
  • ¥15 有二开IOT平台code的来搞钱了。