Langchain-Chatchat 部署本地知识库

LangChain-Chatchat 是基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。

本文使用 LangChain-Chatchat,基于在线 LLM 模型(智谱AI API)和离线 Embedding 模型(text2vec-base-chinese 或 bge-base-zh-v1.5)搭建本地知识库。

1. 本机环境

处理器: Intel i5-7500
内存: 16 GB
显卡: NVIDIA GTX750Ti
硬盘: 1 TB
操作系统: Win10

2. 项目部署

源码下载

下载 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

将下载后的模型放置在项目目录下:
Embedding Model

修改配置

在开始参数配置之前,先执行以下脚本:

python copy_config_example.py

该脚本将会将所有 config 目录下的配置文件样例复制一份到 config 目录下。

接下来,对 model_config.py 文件内容进行修改。

首先,配置本地离线模型的文件路径。

MODEL_ROOT_PATH = "E:\\LLM\\Langchain-Chatchat\\model"

可知,Langchain-Chatchat 支持的 Embedding 模型列表如下。

model_path
由于本文使用的是 text2vec-base-chinese 模型,因此修改配置:

# 选用的 Embedding 名称
EMBEDDING_MODEL = "text2vec-base"

最后,配置 LLM 模型为智谱AI API。

LLM_MODELS = ["zhipu-api"]

前往智谱 AI 官网 http://open.bigmodel.cn 申请 API Key。

zhipu-api将 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/ 下。

pwd.py

最后,重新运行 python init_database.py --recreate-vs

3. 项目启动

执行启动脚本 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

应用界面如下:

Chatchat

4. 知识库问答

在知识库管理一栏中,选择新建知识库,上传本地 docx 文档。

在这里插入图片描述

等待后台执行 加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 过程,时间会比较久。

在这里插入图片描述

文档处理完毕之后,回到对话一栏,选择知识库文档,此时对 AI 进行提问,可以根据我们配置的知识文档进行回答。

ai
可以看到,虽然能实现基础的问答,但是回答效果不佳,需要进一步优化。

5. 知识库优化

知识库的搜索情况取决于嵌入模型的准度,分词器的设置,知识库的排版和大模型的数量,提示词设定等多个因素。因此,需要开发者进行深度的优化和调试。

配置 GPU 环境

Embedding 模型默认是跑在 CPU 上,由于本机 GPU 具有 2G 显存,足够跑小型的 Embedding 模型。
如果依旧选择在 CPU 上跑 Embedding 模型,可以跳过这一步。

首先,安装 CUDA 环境,这里选择 CUDA Toolkit 11.8.0,下载后进行安装。

安装完毕之后,使用以下两个命令检查 CUDA 是否安装正确。

nvcc -V
nvidia-smi

cuda

接着,进入 Pytorch 官网,选择与 CUDA 对应的 Pytorch 版本。

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()

Pytorch
如果结果为 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 模型重建知识库,调整文本切分长度。

chatchat

可以看到,文档切分更为合理,回答结果也更为准确。

chatchat

chatchat

6. 参考

  • 28
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值