最近一直在想怎么优化chatgpt在猫说AI的响应速度,参考了很多开源项目在流式对话的处理,对比我的项目进行了优化,下面说说优化的思路:
以下是一个简单的Python Flask应用程序,用于实现SSE(Server-Sent Events)流式对话的例子:
python复制代码
from flask import Flask, Response, render_template
import time
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/stream')
def stream():
def generate():
while True:
yield "data: {}\n\n".format("Hello, client!")
time.sleep(1)
return Response(generate(), mimetype='text/event-stream')
if __name__ == '__main__':
app.run(debug=True)
在这个例子中,我们创建了一个简单的Flask应用程序,包含两个路由。/
路由用于渲染一个HTML模板,/stream
路由用于实现SSE流式对话。
这是对话的最初版,我们发现这里有个问题,time.sleep(1)每输出一次,就要睡眠,不管你这里是毫秒还是1秒,只要这儿不改,那基本没法优化,实测响应很慢,而且是一段或者一个字一个字输出,用户可能需要等待半天才能得到响应的结果。
那怎么去解决这个问题呢,看了不少开源项目的实现,发现一个很不错的方案,就是redis!没错,乍一看,哎这货不是做缓存的么,但他还有一个发布订阅机制!
这里我们可以创建一个channel去订阅它,然后在返回消息里面去监听它!
这样就省去了time.sleep的时间。
这样修改完毕后效果很哇塞,刚开始生成全部文字需要30多秒,现在直接省去一半的耗时!这样在用户体验方面就会好很多。
第一步优化就结束了。
由于是python flask应用,一直觉得python慢,但其实对于chatgpt而言更多的耗时在网络IO方面。但默认的flask应用用于开发是可以,但是用于生产它的性能和稳定性就会差很多,固又继续探索。
紧接着又发现了一个好用的pythonHTTP服务器,它叫Gunicorn,首先我们让chatgpt给我们介绍一下它:
说白了就是它性能很高,且它配合gevent 可以实现轻量级的线程,极少的资源消耗,但是给大家说个坑,这货只能在linux下使用。
历尽千辛万苦终于全部优化完了,最后尽量减少线程间变量的传递来进一步减少耗时和内存占用。最后直接上实测结果:
最初的效果得30秒,现在一对比,一个天上一个地下。得到响应最多只需要两秒,全部响应完实测最低1秒,最多不到10秒
猫说AI现在注册即送300积分,每日签到免费用chatgpt,手机电脑都能用哦