赞
踩
LangChain-Chatchat 是基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。
本文使用 LangChain-Chatchat,基于在线 LLM 模型(智谱AI API)和离线 Embedding 模型(text2vec-base-chinese 或 bge-base-zh-v1.5)搭建本地知识库。
处理器: Intel i5-7500
内存: 16 GB
显卡: NVIDIA GTX750Ti
硬盘: 1 TB
操作系统: Win10
下载 Langchain-Chatchat 项目源码,当前版本为 v0.2.10。
git clone git@github.com:chatchat-space/Langchain-Chatchat.git
使用 Anaconda 创建 Python 虚拟环境,根据 Langchain-Chatchat 官方文档,指定 Python 版本为 3.11.7。
conda create -n chatchat python==3.11.7
进入项目目录,修改 requirements.txt,追加智谱 AI 依赖。
zhipuai==1.0.7
激活 Python 虚拟环境。
activate chatchat
安装项目全部依赖。
pip install -r requirements.txt
从魔搭社区下载 Embedding 模型 text2vec-base-chinese。
git lfs install
git clone https://www.modelscope.cn/Jerry0/text2vec-base-chinese.git
将下载后的模型放置在项目目录下:
在开始参数配置之前,先执行以下脚本:
python copy_config_example.py
该脚本将会将所有 config 目录下的配置文件样例复制一份到 config 目录下。
接下来,对 model_config.py 文件内容进行修改。
首先,配置本地离线模型的文件路径。
MODEL_ROOT_PATH = "E:\\LLM\\Langchain-Chatchat\\model"
可知,Langchain-Chatchat 支持的 Embedding 模型列表如下。
由于本文使用的是 text2vec-base-chinese 模型,因此修改配置:
# 选用的 Embedding 名称
EMBEDDING_MODEL = "text2vec-base"
最后,配置 LLM 模型为智谱AI API。
LLM_MODELS = ["zhipu-api"]
前往智谱 AI 官网 http://open.bigmodel.cn 申请 API Key。
将 API Key 填入。这里选用 glm-3-turbo 模型。
ONLINE_LLM_MODEL = {
"zhipu-api": {
"api_key": "ac...wE5",
"version": "glm-3-turbo",
"provider": "ChatGLMWorker",
}
}
当前项目的知识库信息存储在数据库中,在正式运行项目之前需要先初始化数据库。
python init_database.py --recreate-vs
执行以上命令的时候,出现报错:ModuleNotFoundError: No module named 'pwd'
查阅 Github issue,可用以下方法解决。
首先,创建 pwd.py 文件,内容如下:
from os import *
from pwd import *
def get_username():
return getpwuid(getuid())[0]
然后,将 pwd.py 文件拷贝到 Python 虚拟环境安装路径 /Lib/ 下。
最后,重新运行 python init_database.py --recreate-vs
执行启动脚本 startup.py, 一键启动所有 Fastchat 服务、API 服务、WebUI 服务。
python startup.py -a
项目启动成功,打印日志如下:
E:\LLM\Langchain-Chatchat>activate chatchat
(E:\ENV\chatchat) E:\LLM\Langchain-Chatchat>python startup.py -a
==============================Langchain-Chatchat Configuration==============================
操作系统:Windows-10-10.0.18363-SP0.
python版本:3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)]
项目版本:v0.2.10
langchain版本:0.0.354. fastchat版本:0.2.35
当前使用的分词器:ChineseRecursiveTextSplitter
当前启动的LLM模型:['zhipu-api'] @ cpu
{'api_key': 'ac...wE5',
'device': 'auto',
'host': '127.0.0.1',
'infer_turbo': False,
'online_api': True,
'port': 21001,
'provider': 'ChatGLMWorker',
'version': 'glm-3-turbo',
'worker_class': <class 'server.model_workers.zhipu.ChatGLMWorker'>}
当前Embbedings模型: text2vec-base @ cpu
==============================Langchain-Chatchat Configuration==============================
2024-02-23 09:14:53,058 - startup.py[line:655] - INFO: 正在启动服务:
2024-02-23 09:14:53,083 - startup.py[line:656] - INFO: 如需查看 llm_api 日志,请前往 E:\LLM\Langchain-Chatchat\logs
E:\ENV\chatchat\Lib\site-packages\langchain_core\_api\deprecation.py:117: LangChainDeprecationWarning: 模型启动功能将于 Langchain-Chatchat 0.3.x重写,支持更多模式和加速启动,0.2.x中相关功能将废弃
warn_deprecated(
2024-02-23 09:15:40 | INFO | model_worker | Register to controller
2024-02-23 09:15:44 | ERROR | stderr | INFO: Started server process [14228]
2024-02-23 09:15:44 | ERROR | stderr | INFO: Waiting for application startup.
2024-02-23 09:15:44 | ERROR | stderr | INFO: Application startup complete.
2024-02-23 09:15:44 | ERROR | stderr | INFO: Uvicorn running on http://127.0.0.1:20000 (Press CTRL+C to quit)
INFO: Started server process [41872]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:7861 (Press CTRL+C to quit)
==============================Langchain-Chatchat Configuration==============================
操作系统:Windows-10-10.0.18363-SP0.
python版本:3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)]
项目版本:v0.2.10
langchain版本:0.0.354. fastchat版本:0.2.35
当前使用的分词器:ChineseRecursiveTextSplitter
当前启动的LLM模型:['zhipu-api'] @ cpu
{'api_key': 'ac8...xmwE5',
'device': 'auto',
'host': '127.0.0.1',
'infer_turbo': False,
'online_api': True,
'port': 21001,
'provider': 'ChatGLMWorker',
'version': 'glm-3-turbo',
'worker_class': <class 'server.model_workers.zhipu.ChatGLMWorker'>}
当前Embbedings模型: text2vec-base @ cpu
服务端运行信息:
OpenAI API Server: http://127.0.0.1:20000/v1
Chatchat API Server: http://127.0.0.1:7861
Chatchat WEBUI Server: http://127.0.0.1:8501
==============================Langchain-Chatchat Configuration==============================
You can now view your Streamlit app in your browser.
URL: http://127.0.0.1:8501
应用界面如下:
在知识库管理一栏中,选择新建知识库,上传本地 docx 文档。
等待后台执行 加载文件 -> 读取文本 -> 文本分割 -> 文本向量化
过程,时间会比较久。
文档处理完毕之后,回到对话一栏,选择知识库文档,此时对 AI 进行提问,可以根据我们配置的知识文档进行回答。
可以看到,虽然能实现基础的问答,但是回答效果不佳,需要进一步优化。
知识库的搜索情况取决于嵌入模型的准度,分词器的设置,知识库的排版和大模型的数量,提示词设定等多个因素。因此,需要开发者进行深度的优化和调试。
Embedding 模型默认是跑在 CPU 上,由于本机 GPU 具有 2G 显存,足够跑小型的 Embedding 模型。
如果依旧选择在 CPU 上跑 Embedding 模型,可以跳过这一步。
首先,安装 CUDA 环境,这里选择 CUDA Toolkit 11.8.0,下载后进行安装。
安装完毕之后,使用以下两个命令检查 CUDA 是否安装正确。
nvcc -V
nvidia-smi
接着,进入 Pytorch 官网,选择与 CUDA 对应的 Pytorch 版本。
这里选择 CUDA 11.8 版本对应的 Pytorch,激活 Python 虚拟环境,进行安装。
activate chatchat
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
检查 Pytorch 是否安装成功。
import torch
torch.cuda.is_available()
如果结果为 True,则说明 Pytorch 安装成功。
如果为 False,则说明自己电脑上对应 cuda 版本和 torch、torchvision 版本文件不一致。
可以通过 torch.__version__
命令检查 torch 版本是否正确。
自动安装有可能会安装 CPU 版本的 Pytorch,可以通过卸载重装解决。
pip config unset global.index-url
pip uninstall torch
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
这里将 Embedding 模型换成 bge-base-zh-v1.5 模型,实现更好的文档匹配效果。
git clone https://www.modelscope.cn/AI-ModelScope/bge-base-zh-v1.5.git
修改项目配置,重新启动,可以看到跟换了 Embedding 模型,并且是运行在 GPU 上。
使用 bge-base-zh-v1.5 模型重建知识库,调整文本切分长度。
可以看到,文档切分更为合理,回答结果也更为准确。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。