LangChain-Chatchat(原 Langchain-ChatGLM): 基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。
由于工作需要,尝试本地私有化部署了LangChain-Chatchat,整体部署过程是按照仓库中的readme和INSTALL.md来的,不过也遇到了一些小问题,比如部署过程中缺少库,一键启动脚本启动的服务无法使用服务器ip外部访问。
首先克隆项目
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
进入目录cd Langchain-Chatchat
下载所需LLM模型文件和Embedding模型
我下载的是chatglm2-6b
:git clone https://huggingface.co/THUDM/chatglm2-6b
Embedding模型下载的是m3e-base
模型: git clone https://huggingface.co/moka-ai/m3e-base
修改config配置文件
将configs目录下的配置文件进行修改,分别在LLM模型和embedding模型处填入自己所下载的模型的绝对路径;
安装虚拟环境
conda安装虚拟环境 env-langchain-chatchat
:
激活环境:conda activate env-langchain-chatchat
更新库:
pip install -r requirements.txt
知识库初始化
由于是第一次使用,进行知识库初始化:
$ python init_database.py --recreate-vs
启动LLM模型服务
在项目根目录下,执行 server/llm_api.py
脚本启动 LLM 模型服务:
$ python server/llm_api.py
修改GPU相关参数: 该项目支持多卡加载,需在 llm_api.py
中修改 create_model_worker_app
函数中,修改如下三个参数:
gpus='1', # 使用第2块gpu
num_gpus=1,
max_gpu_memory="20GiB"
其中,gpus
控制使用的显卡的ID,如 "0,1", 表示使用前两块显卡;
num_gpus
控制使用的卡数;
max_gpu_memory
控制每个卡使用的显存容量。
执行python server/llm_api.py
报错,找不到库accelerate, 于是又安装pip install accelerate
。
这里我遇到了一个bug,将上面函数中的gpus参数修改为第二块GPU后,仍在第一块卡上加载LLM模型。无奈之下,只能将第一块卡的服务切换到第二块卡中,这才暂时解决了这个问题。
启动API服务
创建新终端,进入虚拟环境,启动API服务:
python server/api.py
启动Web UI服务
最后启动Web UI服务,创建新终端,进入虚拟环境,
streamlit run webui.py
搜索引擎问答
可以向bing搜索引擎问问题,需要安装spacy
库,也是在问答过程中后台报错少这个库;
一键启动脚本
更新一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码:
$ python startup.py --all-webui
并可使用 Ctrl + C
直接关闭所有运行服务。
可选参数包括 --all-webui
, --all-api
, --llm-api
, --controller
, --openai-api
, --model-worker
, --api
, --webui
,其中:
--all-webui
为一键启动 WebUI 所有依赖服务;--all-api
为一键启动 API 所有依赖服务;--llm-api
为一键启动 Fastchat 所有依赖的 LLM 服务;--openai-api
为仅启动 FastChat 的 controller 和 openai-api-server 服务;- 其他为单独服务启动选项。
一键脚本启动的webui服务,只能在服务器上通过
127.0.0.1:端口号
来访问ui界面,不能使用服务器的IP地址访问,不知道是不是要修改相关配置。
一键关闭脚本
ps -eo pid,user,cmd|grep -P 'server/api.py|webui.py|fastchat.serve|multiprocessing'|grep -v grep|awk '{print $1}'|xargs kill -9
知识库问答不能设置答案最大长度参数
在上传了本地的PDF文档知识库中后,通过文档的名称可以构建模块获得所上传文档的内容,但是答案的长度无法设置,还没有回答完就截断了,再回复继续想让其继续回答,但只会从知识库中找和继续
相似的内容作为答案。
总结
部署后使用的体验,普通的对话和ChatGLM2-6b单独使用差不多。 知识库问答在上传PDF文档并向量化后,询问模型相关内容,的确是能回答出一些PDF中的内容,并且不是原搬不动的照抄,而是略微有改写并扩展的。但是在知识库问答使用过程中,会有一种无从下手的感觉,不知道该如何提问,能提问哪些问题,希望能够在知识库问答界面提供一些样例方便使用。
此外,问答相关的一些模型参数设置在UI界面无法设置,不够灵活。