在chatchat结合chatGLM搭建的私有化知识库中,使用原生的webUI画面是可以流式输出的,而直接调用api接口,不管stream为true还是false,都是阻塞式输出的,也就是一口气返回给接口。
我们的解决方案是修改StreamingResponse方式返回,变更为EventSourceResponse。以下是详细步骤:
1、 增加sse依赖,Python -m pip install sse-starlette
2、找到工程中的/server/chat/knowledge_base_chat.py
文件,将其拷贝一份,命名为:knowledge_base_chat_sse.py
3、 增加依赖:from sse_starlette.sse import EventSourceResponse,并且修改文件内方法名,和文件明对应上。
4、把方法返回值类型StreamingResponse改为EventSourceResponse
注意python的换行问题。
5、修改init文件:
6、修改aip.py文件:
与
7、最后
Conda中增加环境变量:
conda env config vars set openai_api_key=""
conda env config vars list
然后重载一下环境:
conda activate LangChain-Chatchat-0.2.3
启动即可:
python startup.py –a 或者 nohup python startup.py -a
如果报openai错,将modal中配置文件的GPT3.5的key改为””,如下图:
然后在启动就行了。
备注,常用命令:
conda activate LangChain-Chatchat-0. 2.3 //进入指定conda空间
nohup python startup.py -a //后台启动
ps -ef |grep -i python //检索进程
bash shutdown_all.sh //停止chatchat