Langchain-Chatchat搭建本地知识库实战
Langchain-Chatchat 搭建本地知识库实战
在企业数字化转型加速的今天,如何高效管理和利用海量内部文档——从技术手册到管理制度——成为一大痛点。传统的关键词搜索往往难以理解语义,而将敏感资料上传至公有云AI服务又存在数据泄露风险。有没有一种方式,既能实现自然语言智能问答,又能完全掌控数据主权?
答案是肯定的:Langchain-Chatchat 正是为此类场景量身打造的开源解决方案。它基于 LangChain 架构,融合主流大语言模型(LLM)与本地向量数据库,支持将 PDF、Word、TXT 等私有文件转化为可对话的知识库,所有处理均在本地完成,真正实现“数据不出门”。
更令人兴奋的是,这套系统不仅功能完整,部署也相当友好。无论你是想搭建一个企业级文档助手,还是为科研项目构建专属问答引擎,Langchain-Chatchat 都是一个值得信赖的选择。
下面,我将以实际操作为主线,带你一步步从零开始部署并优化这个强大的本地知识库系统。
我们先从环境准备说起。一套稳定运行的基础环境是成功的关键。官方推荐使用 Python 3.10~3.11 版本,并建议配置如下硬件:
- CPU:Intel i5 或以上
- 内存:至少 16GB(处理大模型时建议 32GB)
- 显卡:NVIDIA GTX 1650 / RTX 3050 及以上(支持 CUDA)
- 存储空间:50GB 以上可用空间(用于存放模型和数据库)
- 操作系统:Windows 10/11 或 Ubuntu 20.04+
需要特别提醒的是,如果仅依赖 CPU 进行推理,尤其是加载本地大模型时,响应速度会非常缓慢,用户体验大打折扣。因此,强烈建议配备独立显卡并启用 GPU 加速。这不仅是性能问题,更是决定能否实用化的关键。
准备好环境后,就可以开始项目部署了。
首先从 GitHub 获取源码:
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
cd Langchain-Chatchat
该项目集成了 FastChat、LangChain、Streamlit 和多种中文 LLM 接口封装,开箱即用,支持一键启动 WebUI 与 API 服务,非常适合快速验证和落地。
接下来建议使用 conda 创建独立虚拟环境,避免依赖冲突:
conda create -n chatchat python=3.11
conda activate chatchat
然后安装依赖:
pip install -r requirements.txt
国内用户若遇到下载慢的问题,可以指定镜像源加速:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,执行脚本复制默认配置文件:
python copy_config_example.py
该脚本会自动将 config_example/ 目录下的示例配置复制到 config/,后续修改都基于这些文件进行。
系统要理解文本内容,离不开 Embedding 模型对文档进行向量化编码。目前常用的中文 Embedding 模型包括 text2vec-base-chinese、bge-base-zh-v1.5 和 m3e-base。其中,BGE-ZH-V1.5 在中文语义匹配任务中表现尤为出色,是生产环境的首选。
我们从魔搭(ModelScope)平台下载该模型:
git lfs install
git clone https://www.modelscope.cn/AI-ModelScope/bge-base-zh-v1.5.git models/bge-base-zh-v1.5
建议统一将所有模型放置于项目根目录下的 models/ 文件夹中,便于集中管理。
接下来打开 config/model_config.py 进行核心配置修改。
首先是设置模型路径根目录:
MODEL_ROOT_PATH = "E:\\LLM\\Langchain-Chatchat\\models"
请根据你的实际路径进行替换。
然后指定使用的 Embedding 模型名称:
EMBEDDING_MODEL = "bge-base-zh-v1.5"
确保该名称与你下载的模型文件夹名完全一致。
最关键的一步是配置 LLM 的接入方式。这里有两种选择:在线 API 或本地模型。
对于初学者,推荐使用 智谱AI 的 glm-4-flash 在线 API,响应快、成本低。只需在配置中添加:
LLM_MODELS = ["zhipu-api"]
ONLINE_LLM_MODEL = {
"zhipu-api": {
"api_key": "your_api_key_here",
"version": "glm-4-flash",
"provider": "ZhipuWorker",
"online_api": True,
}
}
前往 智谱开放平台 注册账号即可获取 API Key。
如果你拥有高性能 GPU(如 RTX 3090/4090),也可以选择运行本地大模型,比如 Qwen-7B-Chat 或 ChatGLM3-6B。这种方式虽然部署复杂一些,但能彻底摆脱网络依赖和隐私顾虑。
以本地 Qwen 模型为例:
LOCAL_LLM_MODEL = {
"qwen-7b-chat": {
"model_path": "models/Qwen-7B-Chat",
"device": "cuda",
"provider": "QwenWorker",
}
}
前提是你要提前下载好 GGUF 或 HuggingFace 格式的模型文件,并放入对应目录。
完成配置后,需要初始化向量数据库。Langchain-Chatchat 默认使用 FAISS 作为向量存储引擎。
执行以下命令重建索引:
python init_database.py --recreate-vs
正常情况下,会在 data/vectordb 目录下生成相应的索引文件。
不过在 Windows 上可能会遇到 ModuleNotFoundError: No module named 'pwd' 的报错。这是因为某些模块依赖 Unix 系统的 pwd 模块。解决方法很简单:手动创建一个兼容性脚本。
在 Python 安装路径的 Lib/ 目录下新建 pwd.py 文件,写入以下内容:
import os
def getpwuid(uid):
return ('user', '', uid, 0, '', os.path.expanduser('~'), '')
def getuid():
return 1000
保存后重新运行初始化命令即可绕过此问题。
一切就绪后,就可以启动整个系统了。
Langchain-Chatchat 提供了一键启动脚本,能够同时拉起 LLM Worker、API Server 和 WebUI:
python startup.py -a
启动成功后,控制台会输出类似日志:
==============================Langchain-Chatchat Configuration==============================
操作系统:Windows-10-10.0.19045
python版本:3.11.7
项目版本:v1.0.0
langchain版本:0.1.14. fastchat版本:0.4.15
当前使用的分词器:ChineseRecursiveTextSplitter
当前启动的LLM模型:['zhipu-api'] @ cpu
当前Embeddings模型: bge-base-zh-v1.5 @ cuda
服务端运行信息:
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
此时打开浏览器访问 http://127.0.0.1:8501,即可进入图形化界面。
进入 WebUI 后,操作流程非常直观:
- 切换到「知识库管理」页面;
- 点击「新建知识库」,命名如“公司制度手册”;
- 上传支持格式的文档(PDF、DOCX、TXT、PPTX、XLSX 等);
- 等待后台处理完成(显示“加载完成”状态);
系统后台会依次执行以下步骤:
加载文件 → 解析内容 → 中文分句 → 分块切片 → 向量化存入 FAISS
整个过程耗时取决于文档大小和硬件性能,初次建库可能需要几分钟。
处理完毕后,切换回「对话」页面,选择对应的知识库,就可以开始提问了。
例如输入:
“员工请假流程是怎样的?”
假设上传的文档中包含相关条款,系统会自动检索最相关的段落,并结合大模型生成自然流畅的回答。这种“检索+生成”的架构,既保证了答案的事实准确性,又具备良好的语言表达能力。
当然,默认配置只是起点。要想获得更佳的体验,还需要进行几项关键优化。
首先是 GPU 加速推理。如果你已经安装了 NVIDIA 显卡和 CUDA 环境,务必启用 GPU 来提升性能。
第一步是安装 CUDA Toolkit(推荐 11.8 或 12.1),可在 NVIDIA 官网 下载。安装后通过以下命令验证:
nvcc -V
nvidia-smi
第二步是安装支持 CUDA 的 PyTorch:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
安装完成后测试:
import torch
print(torch.cuda.is_available()) # 应输出 True
若返回 False,请检查 CUDA 驱动版本与 PyTorch 是否匹配。
第三步是在 model_config.py 中启用 GPU:
EMBEDDING_DEVICE = "cuda" # 或设为 "auto" 让程序自动判断
重启服务后,Embedding 模型将在 GPU 上运行,向量化速度可提升数倍。
其次是 更换更优的 Embedding 模型。模型质量直接影响检索准确率。以下是几个主流中文模型的对比:
| 模型名称 | 维度 | 中文能力 | 推荐场景 |
|---|---|---|---|
| text2vec-base-chinese | 768 | 一般 | 快速测试 |
| bge-base-zh-v1.5 | 768 | 优秀 | 生产推荐 |
| m3e-large | 1024 | 极强 | 高精度需求 |
实践中发现,bge-base-zh-v1.5 在大多数中文任务中表现均衡,是性价比极高的选择。如果有更高要求,还可以引入 bge-reranker-large 作为重排序模型,进一步提升召回质量。
更换方法也很简单:
1. 下载新模型到 models/ 目录;
2. 修改 EMBEDDING_MODEL 配置项;
3. 重新运行 init_database.py --recreate-vs 重建索引。
最后是 调整文本分块策略。这是影响问答效果的一个隐藏关键点。
默认使用 ChineseRecursiveTextSplitter,按中文语义递归切分。可以在 config/kb_config.py 中调整参数:
CHUNK_SIZE = 256 # 每个文本块最大长度
OVERLAP_SIZE = 50 # 块间重叠长度,防止信息割裂
这里有一些经验法则:
- 如果文档结构清晰、段落分明,可以适当增大
CHUNK_SIZE(如 512),减少碎片化; - 对于内容密集或专业性强的文档(如法律条文、技术规范),建议减小块大小并增加重叠,避免关键信息被截断;
- 若涉及代码、数学公式等特殊内容,最好启用专用解析器或自定义分块逻辑。
合理的分块不仅能提高检索命中率,还能增强上下文连贯性,让回答更完整可信。
Langchain-Chatchat 不只是一个工具,它代表了一种新的可能性:让大模型真正服务于私域知识,而不是停留在通用闲聊层面。通过本文的实践,你应该已经掌握了从环境搭建到性能调优的全流程技能。
未来还可以在此基础上做更多拓展:
- 对接 OA/ERP 系统,实现文档自动同步;
- 添加权限控制,支持多部门或多租户隔离;
- 集成语音识别与合成,打造全链路智能助手;
- 引入 Rerank 或 Cross-Encoder 模型,进一步提升答案精准度。
真正的智能,不是炫技,而是融入业务流、解决实际问题。现在,你已经有了构建“专属知识大脑”的钥匙,下一步,就是让它真正运转起来。
更多推荐

所有评论(0)