想实现sse事件流,但是最终还是一次性返回的响应数据

想用python请求openai接口,然后使用事件流返回响应数据,但是实际应用却是一起返回的。猜测可能是最后的 return response 语句的问题。这个代码应该如何修改达到想要的效果呢?(ps:刚学python,有很多东西不了解,还望指点!!!)(也尝试了flask-sse,失败了。。。没搞出来)

@app.route('/api/stream', methods=["POST"])
def stream():
    message = request.form.get('message')
    user_id = request.form.get('user_id')
    _message = json.loads(message)
    openai.api_key = mod2.getKey()
    response = openai.ChatCompletion.create(model='gpt-3.5-turbo', messages=_message,stream=True)
    # 以上代码获取chatgpt响应,
    def eventStream():
        for item in response:
            json_data = item['choices'][0]['delta']
            res_data = json.dumps(item['choices'][0]['delta'], ensure_ascii=False)
            if json_data.__contains__('content'):
                yield 'data: {}\n\n'.format( res_data)
    return Response(eventStream(), mimetype="text/event-stream")


if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True, port=8000)
讨论数量: 1

更新:应该是nginx的原因,不使用nginx,单独运行python脚本是没问题的。

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!