Langchain-Chatchat 本地知识库部署与使用指南
基于 ChatGLM 和 Langchain 构建本地知识库问答应用(RAG)的完整流程。涵盖环境准备、依赖安装、配置文件修改、模型下载及初始化、服务启动与 Web UI 访问。详细解析了常见异常如 OMP 冲突、模型加载失败的处理方案,并补充了 Docker 部署方式及 API 调用示例,帮助开发者快速搭建私有化大模型应用。

基于 ChatGLM 和 Langchain 构建本地知识库问答应用(RAG)的完整流程。涵盖环境准备、依赖安装、配置文件修改、模型下载及初始化、服务启动与 Web UI 访问。详细解析了常见异常如 OMP 冲突、模型加载失败的处理方案,并补充了 Docker 部署方式及 API 调用示例,帮助开发者快速搭建私有化大模型应用。

Langchain-Chatchat 是一个基于 ChatGLM 大语言模型与 Langchain 应用框架实现的开源、可离线部署的检索增强生成 (RAG) 大模型本地知识库问答应用项目。
GitHub:https://github.com/chatchat-space/Langchain-Chatchat
本项目实现原理包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k 个 -> 匹配出的文本作为上下文和问题一起添加到 prompt 中 -> 提交给 LLM 生成回答。
![图片:Langchain-Chatchat 架构图]
推荐使用 Ubuntu 系统,其他系统可能出现兼容性问题。
Linux Ubuntu 22.04.5 kernel version 6.7
最低要求
该要求仅针对标准模式,轻量模式使用在线模型,不需要安装 torch 等库,也不需要显卡即可运行。
Python 版本:>= 3.8, < 3.11
CUDA 版本:>= 12.1
推荐要求
开发者在以下环境下进行代码调试,在该环境下能够避免最多环境问题。
Python 版本 == 3.10.12
CUDA 版本:== 12.3
如果为了体验使用该项目,可以使用线上模型,不需要太高的硬件要求。如果想要顺利在 GPU 运行本地模型的 int4 量化版本,至少需要以下的硬件配置。
ChatGLM2-6B & LLaMA-7B
最低显存要求:7GB
推荐显卡:RTX 3060, RTX 2060
LLaMA-13B
最低显存要求:11GB
推荐显卡:RTX 2060 12GB, RTX 3060 12GB, RTX 3080, RTX A2000
Qwen-14B-Chat
最低显存要求:13GB
推荐显卡:RTX 3090
LLaMA-30B
最低显存要求:22GB
推荐显卡:RTX A5000, RTX 3090, RTX 4090, RTX 6000, Tesla V100, RTX Tesla P40
LLaMA-65B
最低显存要求:40GB
推荐显卡:A100, A40, A6000
注意:
若使用 int8 推理,则显存大致为 int4 推理要求的 1.5 倍
若使用 fp16 推理,则显存大致为 int4 推理要求的 2.5 倍
数据仅为估算,实际情况以 nvidia-smi 占用为准。
同时,Embedding 模型将会占用 1-2G 的显存,历史记录最多会占用数 G 显存,因此,需要多冗余一些显存。
内存最低要求:内存要求至少应该比模型运行的显存大。
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
cd Langchain-Chatchat
创建一个虚拟环境,使项目与项目间进行软件版本隔离。
conda create -n chat python=3.10
conda activate chat
在虚拟环境内安装项目的依赖。
pip install -r requirements.txt
pip install -r requirements_api.txt
pip install -r requirements_webui.txt
默认依赖包括基本运行环境(FAISS 向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。
python copy_config_example.py
脚本将会将所有 config 目录下的配置文件样例复制一份到 config 目录下,方便开发者进行配置。接着,开发者可以根据自己的需求,对配置文件进行修改。
配置文件说明:
basic_config.py:基础配置项:配置记录日志的格式和储存路径,通常不需要修改。kb_config.py:数据库配置:配置分词器、知识库、向量数据库等信息。
CHUNK_SIZE(切片大小)和 OVERLAP_SIZE(重叠大小)以适应不同文档类型。model_config.py:模型配置项:包含本地 LLM 模型、本地 Embeddings 模型、在线 LLM 模型 API 的相关配置。prompt_config.py:提示词配置项:提示词配置分为三个板块,分别对应三种聊天类型:基础的对话提示词、与知识库对话的提示词、与 Agent 对话的提示词。server_config.py:服务和端口配置项:不需要进行大量的修改,仅需确保对应的端口打开,并不互相冲突即可。server_config.py 中的配置优先于 startup.py 中的默认值,注意避免配置文件覆盖。模型下载取决于自己的网络情况,这里需要提前下载 THUDM/chatglm2-6b 与 BAAI/bge-large-zh 到本地,然后在 model_config.py 中配置。
- 若网络良好则完全不需要先下载模型,在执行过程中会自动下载相关模型。
- 如果网络存在问题,则可以事先下载好需要的模型,然后在
model_config.py文件中配置,具体配置参考异常处理部分。
注意: Windows 环境下,会默认自动将该模型下载到 C:\Users\Admin\.cache\torch\sentence_transformers 目录下,若下载失败,参考异常处理部分。
第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,需要以下命令初始化或重建知识库:
python init_database.py --recreate-vs
如果已经有创建过知识库,可以先执行以下命令创建或更新数据库表:
python init_database.py --create-tables
第一次使用时,会自动下载 BAAI/bge-large-zh 模型,用于知识库的初始化构建。
一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务。
python startup.py -a
启动时,如果没用在 model_config.py 中配置配置模型信息,则会自动模型下载 THUDM/chatglm3-6b 到本地使用。
服务端运行信息示例:
OpenAI API Server: http://127.0.0.1:20000/v1
Chatchat API Server: http://127.0.0.1:7861
Chatchat WEBUI Server: http://0.0.0.0:8501
Web UI 地址:http://127.0.0.1:8501
不是一键启动,则可以单独启动 API 服务:
python server/api.py
访问:http://0.0.0.0:7861/docs
不是一键启动,则可以单独启动 Web UI 服务:
streamlit run webui.py
访问:http://localhost:8501/
可以选择本地模型,线上模型,然后进行对话。
可以新建知识库,上传相关资料信息。上传后会建立向量数据库。进行提问,回答基于知识库进行回答。
上传一个报销制度文件,然后提问。
支持接入搜索引擎进行联网问答。
除了源码部署,项目也支持 Docker 容器化部署,适合快速验证和跨平台使用。
docker build -t langchain-chatchat .
docker run -d -p 8501:8501 -p 7861:7861 -v $(pwd)/models:/root/models langchain-chatchat
注意挂载
models目录以避免每次重新下载模型。
开发者可以通过 Python 请求库直接调用 Chatchat 的 API 接口。
import requests
url = "http://127.0.0.1:7861/api/v1/chat"
data = {
"question": "什么是 Langchain?",
"chat_history": [],
"knowledge_base_id": "default_kb"
}
response = requests.post(url, json=data)
print(response.json())
场景: 初始化配置文件
python init_database.py --recreate-vs
问题:
cannot import name 'Doc' from 'typing_extensions'
解决: 因为安装的 typing_extensions 版本不正确,需要重新安装。
pip install typing_extensions==4.8.0
场景: 启动项目
python startup.py -a
问题:
OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
解决: 此错误通常由 OpenMP 运行时冲突引起。在 Linux 环境下(如 Ubuntu),请尝试设置环境变量。
方法 1:设置环境变量
在 startup.py 文件上方添加:
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
方法 2:检查动态库
确保 Anaconda 环境中没有残留的 Windows 动态库文件干扰。如果是 Linux 环境,检查 libiomp5.so 是否重复加载。
场景: 启动项目过程中
python startup.py -a
问题:
OSError: We couldn't connect to 'https://huggingface.co' to load this file...
解决: 默认使用的 LLM 模型 THUDM/ChatGLM3-6B 与 Embedding 模型 BAAI/bge-large-zh,会远程连接模型网站。如果无法访问,需手动下载模型。
/root/models/chatglm3-6b。configs/model_config.py 文件,指定模型存放位置与使用模型名称。# 统一存放模型位置
MODEL_ROOT_PATH = "/root/models"
# 选用的 Embedding 名称
EMBEDDING_MODEL = "bge-large-zh"
# 要运行的 LLM 名称
LLM_MODELS = ["chatglm3-6b", "zhipu-api", "openai-api"]
MODEL_PATH = {
"embed_model": {
"bge-large-zh": "bge-large-zh",
},
"llm_model": {
"chatglm3-6b": "chatglm3-6b",
},
}
address already in use,请检查 20000、7861、8501 端口是否被其他进程占用,并修改 server_config.py 中的端口号。model_config.py 中配置代理。MAX_TOKENS 配置。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online