基于 Langchain-Chatchat 快速构建本地 LLM 智能知识库
简介
Langchain-Chatchat 是一个开源、可离线部署的检索增强生成 (RAG) 大模型知识库项目。它基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,旨在建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
本项目利用 Langchain 思想实现基于本地知识库的问答应用。目前 Langchain 可以说是开发 LLM 应用的首选框架。依托于本项目支持的开源 LLM 与 Embedding 模型,可实现全部使用开源模型进行离线私有部署。同时,项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。
实现原理
本项目全流程使用开源模型来实现本地知识库问答应用。最新版本中通过使用 FastChat 接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型。依托于 Langchain 框架,支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。
文档处理流程
从文档处理角度来看,实现流程主要包括以下步骤:
- 数据加载:读取本地文件(PDF, TXT, Markdown 等)。
- 文本分割:将长文本按策略切分为适合模型处理的片段。
- 向量化:使用 Embedding 模型将文本片段转换为向量。
- 存储:将向量存入向量数据库(如 FAISS, Milvus 等)。
- 检索与生成:用户提问时,检索相关向量片段,结合 Prompt 发送给 LLM 生成回答。
需要注意的是,本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。
部署要求
软件要求
- 操作系统:推荐 Linux Ubuntu 22.04.5 kernel version 6.7。其他系统可能出现兼容性问题。
- Python 版本:>= 3.8 (< 3.12)。推荐使用 Python 3.11.7 以获得最佳稳定性。
- CUDA 版本:>= 12.1。若使用轻量模式在线运行,则不需要安装 torch 等库。
硬件要求
如果想要顺利在 GPU 运行本地模型的 FP16 版本,建议参考以下配置以保证稳定连续对话:
| 模型类型 | 最低显存要求 | 推荐显卡 |
|---|
| ChatGLM3-6B / LLaMA-7B-Chat | 14GB | RTX 4080 |
| Qwen-14B-Chat | 30GB | V100 |
| Yi-34B-Chat | 69GB | A100 |
| Qwen-72B-Chat | 145GB | 多卡 A100 以上 |
实际部署配置示例:
处理器:Intel® Core™ i9 processor 14900K
内存:256 GB DDR5
显卡组:NVIDIA RTX4090 X 1 / NVIDIA RTXA6000 X 1
硬盘:1 TB
操作系统:Ubuntu 22.04 LTS / Arch Linux, Linux Kernel 6.6.7
显卡驱动版本:545.29.06
Cuda 版本:12.3 Update 1
Python 版本:3.11.7
部署方案
Docker 部署
开发组提供了一键部署的 Docker 镜像文件。开发者可以在 AutoDL 平台和 Docker 平台一键部署。
docker run -d --gpus all -p 80:8501 isafetech/chatchat:0.2.10
docker run -d --gpus all -p 80:8501 ccr.ccs.tencentyun.com/chatchat/chatchat:0.2.10
docker run -d --gpus all -p 80:8501 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.10
注意事项:
- 该版本镜像大小约 50.1GB,以 nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 为基础镜像。
- 内置并默认启用一个 Embedding 模型:bge-large-zh-v1.5,内置并默认启用 ChatGLM3-6B。
- 请确保您已经在 Linux 发行版上安装了 NVIDIA 驱动程序。
- 不需要在主机系统上安装 CUDA 工具包,但需要安装 NVIDIA Driver 以及 NVIDIA Container Toolkit。
本地部署方案
1. 安装 Python 环境
$ python --version
Python 3.8.13
$ conda create -p /your_path/env_name python=3.8
$ source activate /your_path/env_name
$ conda create -n env_name python=3.8
$ conda activate env_name
$ pip3 install --upgrade pip
2. 安装项目依赖
$ git clone --recursive https://github.com/chatchat-space/Langchain-Chatchat.git
$ cd Langchain-Chatchat
$ pip install -r requirements.txt
可选依赖说明:
- 如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。
- 如果要开启 OCR GPU 加速,请安装 rapidocr_paddle[gpu]。
- 如果要使用在线 API 模型,请安装对应的 SDK。
3. 下载模型
如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地。通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。
$ git lfs install
$ git clone https://huggingface.co/THUDM/chatglm2-6b
$ git clone https://huggingface.co/moka-ai/m3e-base
4. 初始化数据库
当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库。
$ python init_database.py --create-tables
$ python init_database.py --recreate-vs
5. 启动服务
使用一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务。
$ python startup.py -a
Lite 模式(无显卡模式)
对于没有显卡的用户,项目提供了 Lite 模式。该模式的配置方式与常规模式相同,但无需安装 torch 等重依赖,通过在线 API 实现 LLM 和 Embeddings 相关功能。
$ pip install -r requirements_lite.txt
$ python startup.py -a --lite
该模式支持的在线 Embeddings 包括:智谱 AI、MiniMax、百度千帆、阿里云通义千问。在 model_config.py 中将 LLM_MODELS 和 EMBEDDING_MODEL 设置为可用的在线 API 名称即可。
使用指南
正常启动后,会有两种主要使用界面:
- WebUI:通过浏览器访问本地地址,提供直观的聊天窗口和知识库管理页面。支持上传文档、查看历史对话、管理知识库索引。
- API:提供 FastAPI 接口,方便集成到其他业务系统中。可通过 Swagger UI 查看和测试提供的 API 端点。
高级配置与优化
自定义模型配置
在 config.yaml 或 model_config.py 中,可以灵活切换不同的 LLM 和 Embedding 模型。例如,若需更换为 Qwen 系列模型,只需修改配置文件中的模型路径和参数。
LLM_MODELS = {
"qwen-chat": {
"path": "./models/qwen-7b-chat",
"model_type": "llama"
}
}
向量数据库选择
默认使用 FAISS 作为向量存储,适用于单机小数据量场景。若需生产级高并发支持,可配置 Milvus 或 PgVector。
pip install pymilvus
性能调优
- 显存优化:对于显存受限环境,可使用 INT4 量化模型,显著降低显存占用。
- 并发控制:调整 FastAPI 的 worker 数量,平衡 CPU 与 GPU 资源。
- 缓存机制:启用响应缓存,减少重复请求的计算开销。
常见问题排查
-
CUDA Out of Memory
- 尝试减小 batch size。
- 使用量化模型(INT4/INT8)。
- 关闭不必要的后台进程释放显存。
-
模型加载失败
- 检查
git-lfs 是否正确安装。
- 确认模型文件完整性,重新下载。
- 检查
model_config.py 中的路径是否指向正确的本地目录。
-
WebUI 无法访问
- 检查防火墙设置,确保端口 8501 开放。
- 确认 Docker 端口映射正确。
- 查看日志输出是否有报错信息。
总结
Langchain-Chatchat 针对当前热门的 AI 知识库需求,给出了一种非常好的构建方式。它做到了全链条的开源产品,无论你是希望直接使用它来构建知识库,还是希望通过本项目学习和实现自己的解决方案,都会是非常好的选择。
建议开发者不要单纯使用现成代码,而是深入研究项目的架构设计。这类项目最精华的部分在于其 RAG 流程的实现与模块解耦,理解这些有助于在实际业务中进行定制化开发。通过掌握该项目,你可以更好地应对企业数据 AI 应用开发需求,实现大模型理论、GPU 算力、硬件、LangChain 开发框架和项目实战技能的一站式掌握。