1.基础介绍
Langchain-Chatchat 是一种利用 LangChain 思想实现的基于本地知识库的问答应用,旨在建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。其核心流程包括加载文件、读取文本、文本分割、文本向量化、问句向量化、在文本向量中匹配出与问句向量最相似的 top k 个片段,将匹配出的文本作为上下文和问题一起添加到 Prompt 中,最后提交给 LLM 生成回答。
基于 Langchain-Chatchat 框架结合 Qwen 大模型搭建本地知识库的完整流程。涵盖环境准备、依赖安装、模型下载与配置、服务启动及知识库创建步骤。通过引入 BGE 向量模型与 Qwen 对话模型,实现了离线运行的智能问答系统。文中还包含常见问题排查与优化建议,帮助开发者解决显存不足、检索效果差等问题,快速构建私有化 RAG 应用。

Langchain-Chatchat 是一种利用 LangChain 思想实现的基于本地知识库的问答应用,旨在建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。其核心流程包括加载文件、读取文本、文本分割、文本向量化、问句向量化、在文本向量中匹配出与问句向量最相似的 top k 个片段,将匹配出的文本作为上下文和问题一起添加到 Prompt 中,最后提交给 LLM 生成回答。
Qwen-7B(14B)是阿里云研发的通义千问大模型系列的 70(140)亿参数规模的模型。它是基于 Transformer 的大语言模型,在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。在此基础上,使用对齐机制打造了基于大语言模型的 AI 助手 Qwen-7(14)B-Chat。
接下来结合 Langchain-Chatchat 与 Qwen-7B(14B),一步步搭建属于自己的本地知识库。
环境要求:Python 3.10+,torch 推荐使用 2.0 及以上版本。GPU 显存需求:使用 Qwen-7B 和 Qwen-14B-int4 需要大概 24GB 显存,使用 Qwen-14B 需要 40GB 左右显存。
拉取 Langchain-Chatchat 项目代码:
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
安装依赖:
pip install -r requirements.txt
pip install -r requirements_api.txt
pip install -r requirements_webui.txt
模型主要分为两部分:LLM 模型和 Embedding 模型。 支持的 Embedding 模型列表如下(部分):
{
"ernie-tiny": "nghuyong/ernie-3.0-nano-zh",
"text2vec-base": "shibing624/text2vec-base-chinese",
"bge-large-zh-v1.5": "/root/autodl-tmp/bge-large-zh-v1.5",
"m3e-large": "moka-ai/m3e-large"
}
个人推荐使用 bge-large-zh-v1.5。
git clone https://www.modelscope.cn/Xorbits/bge-large-zh-v1.5.git
Langchain-Chatchat v0.28 版本增加了很多 LLM 模型的支持,包括 ChatGLM、Baichuan、Qwen 系列等。本次选用 Qwen-7B-Chat、Qwen-14B-Chat 及 Qwen-14B-Chat-Int4。注意 7B 和 14B-int4 大概需要预留 30GB 硬盘空间,14B 需要 50GB 硬盘空间。
git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git
git clone https://www.modelscope.cn/qwen/Qwen-14B-Chat-Int4.git
git clone https://www.modelscope.cn/qwen/Qwen-14B-Chat.git
14B-int4 需要确保已经安装了 flash-attn 库。
git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
pip install csrc/layer_norm
pip install csrc/rotary
如果 flash-attn 在安装过程中出现卡顿,可以手动安装需要的组件库。
pip install auto-gptq --extra-index-url /autogptq-index/whl/cu120/
执行初始化脚本:
python copy_config_example.py
python init_database.py --recreate-vs
打开 config/model-config.py,修改配置信息及模型路径。
EMBEDDING_MODEL = "bge-large-zh-v1.5"
LLM_MODELS = ["Qwen-14B-Chat", "zhipu-api", "openai-api"]
打开 14B-int4 模型所在文件夹的 config.json,在 quantization_config 下添加 "disable_exllama": true。
{
"quantization_config": {
"bits": 4,
"group_size": 128,
"damp_percent": 0.01,
"desc_act": false,
"static_groups": false,
"sym": true,
"true_sequential": true,
"model_name_or_path": null,
"model_file_base_name": "model",
"disable_exllama": true,
"quant_method": "gptq"
}
}
python server/api.py
启动完成可以通过相应的端口查看 API 文档。
请先确保 API 已经在运行中。
streamlit run webui.py --server.port 6006
python startup.py -a
启动以后点击知识库,支持的知识文件包括 PDF、Word、TXT 等格式。[图示] 显示支持的文件类型列表。 创建一个自己的知识 CSV 文件,可以采用一问一答的形式。[图示] 显示 CSV 编辑界面。导入保存即可。
首先是不使用知识库的情况:[图示] 显示无知识库时的回答效果。 Qwen7B+ 知识库:[图示] 显示 7B 模型配合知识库的效果。 Qwen14B+ 知识库:[图示] 显示 14B 模型配合知识库的效果。 可以看到知识库可以在处理知识库范围之内的内容的同时,保证其他对话正常进行。14B 与 7B 的性能差异明显,14B 在复杂推理上表现更好。[图示] 显示性能对比图。
如果遇到 OOM 错误,可以尝试使用 Int4 量化模型,或者减少 batch size。对于消费级显卡,建议使用 Qwen-7B-Chat-Int4 或 ChatGLM3-6B。
检查文本分割策略(Chunk Size)是否合理。如果文档内容过长,可以适当减小 chunk size 并增加 overlap。此外,更换更强大的 Embedding 模型如 BGE-M3 可能提升检索精度。
确保所有依赖包版本兼容。特别是 torch 和 cuda 版本需对应。如果安装 flash-attn 失败,可尝试使用预编译的 wheel 包。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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