Langchain-Chatchat 简介
Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型与 Langchain 应用框架实现的开源项目。它支持检索增强生成 (RAG) 技术,提供可离线部署的本地知识库问答解决方案。
本项目利用 Langchain 思想实现基于本地知识库的问答应用。目前 Langchain 是开发大语言模型 (LLM) 应用的首选框架之一。本项目的目标是建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
依托于本项目支持的开源 LLM 与 Embedding 模型,可实现全部使用开源模型进行离线私有部署。同时,项目也支持 OpenAI GPT API 的调用,并持续扩充对各类模型及模型 API 的接入。
实现原理
本项目全流程使用开源模型来实现本地知识库问答应用。最新版本中通过 FastChat 接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型。依托于 Langchain 框架,支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。
数据流程
整个流程的执行过程主要包含以下步骤:
- 文档加载:读取本地文件(PDF, TXT, Markdown 等)。
- 文本分割:将长文本按策略切分为小块(Chunk)。
- 向量化:使用 Embedding 模型将文本块转换为向量。
- 存储:将向量存入向量数据库(如 FAISS, Milvus, PG_Vector)。
- 检索:根据用户问题检索相关向量片段。
- 生成:将检索到的上下文与问题结合,输入 LLM 生成回答。
从文档处理角度来看,实现流程包括解析、清洗、分块、嵌入和索引。需要注意的是,本项目未涉及微调或训练过程,但可利用微调或训练对本项目效果进行优化。
部署要求
软件要求
- 操作系统:推荐 Linux Ubuntu 22.04.5 kernel version 6.7。其他系统可能出现兼容性问题。
- Python 版本:>= 3.8 (< 3.12)。建议 Python 3.11.7 以获得最佳稳定性。
- CUDA 版本:>= 12.1。若使用轻量模式在线模型则不需要 CUDA。
硬件要求
在 GPU 上运行本地模型的 FP16 版本需要足够的显存以保证稳定连续对话:
- 7B 模型 (如 ChatGLM3-6B, LLaMA-7B-Chat):最低显存 14GB,推荐显卡 RTX 4080。
- 14B 模型 (如 Qwen-14B-Chat):最低显存 30GB,推荐显卡 V100。
- 34B 模型 (如 Yi-34B-Chat):最低显存 69GB,推荐显卡 A100。
- 72B 模型 (如 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
部署 Langchain-Chatchat
Docker 部署
开发组提供了一键部署的 Docker 镜像文件。开发者可以在 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,使用 v0.2.10,以
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 3.8 - 3.10 版本。
python --version
conda create -p /your_path/env_name python=3.8
source activate /your_path/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
默认依赖包括基本运行环境(FAISS 向量库)。以下是可选依赖说明:
- 如果要使用 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
启动界面
正常启动后,会有两种使用界面:
- WebUI:基于 Streamlit 的图形化界面,方便管理知识库和进行问答。
- API:基于 FastAPI 提供的接口,便于集成到其他系统中。
最轻模式 (Lite Mode)
对于没有显卡的用户,项目提供了 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 名称即可。
配置详解
模型配置文件
核心配置文件位于 config/model_config.py。在此文件中可以自定义以下参数:
- LLM Model: 选择使用的语言模型,例如
chatglm3, qwen, llama2 等。
- Embedding Model: 选择向量模型,例如
m3e-base, bge-large-zh 等。
- Vector Store: 选择向量数据库类型,如
faiss, milvus, pgvector。
- Device: 指定计算设备,如
cuda, cpu。
向量数据库选择
- FAISS: 适合单机部署,速度快,但扩展性较差。
- Milvus: 适合大规模数据,支持分布式部署,性能优异。
- PG_Vector: 基于 PostgreSQL 插件,适合已有 Postgres 环境的用户。
常见问题与排查
显存不足
如果报错 CUDA out of memory,尝试以下方法:
- 减小
batch_size。
- 使用量化模型(如 INT8 版本)。
- 更换显存更大的显卡。
- 减少并发请求数。
模型加载失败
如果提示找不到模型文件,请检查 model_config.py 中的路径是否正确,并确保模型文件已下载到本地目录。
依赖冲突
如果遇到依赖包版本冲突,建议使用虚拟环境隔离,并严格按照 requirements.txt 安装。
总结
Langchain-Chatchat 项目结构清晰,针对当前热门的 AI 知识库给出了一种非常好的构建方式,并且做到了全链条的开源产品。无论你是希望直接使用它来构建知识库,还是希望通过本项目学习和实现自己的解决方案,都会是非常好的选择。
建议深入理解项目的架构设计,因为这类项目最精华的部分在于其架构逻辑。通过合理配置模型和向量库,可以实现高效、私有的本地智能问答系统。