Langchain-Chatchat 服务端部署指南:从安装、初始化配置到知识库构建与服务启动
Langchain-Chatchat(原 Langchain-ChatGLM)是一个基于 ChatGLM、Qwen、Llama 等大语言模型与 Langchain 应用框架的开源、可离线部署的 RAG 与 Agent 应用项目。本文基于仓库中 libs/chatchat-server/README_en.md 的完整内容展开,并结合 chatchat/cli.py、chatchat/settings.py 等源码,系统讲解项目安装、数据目录与 YAML 配置初始化、知识库向量库重建,以及 API Server 与 WebUI 双进程服务的启动方式,读完即可独立完成一次完整的离线 RAG 服务部署。
项目定位与核心能力
Langchain-Chatchat 的核心目标是建立一套对中文场景与开源模型友好、可离线运行的本地知识库问答解决方案。其 RAG 流程为:加载文件 → 读取文本 → 文本分割 → 文本向量化 → 问句向量化 → 在向量库中检索出与问句最相似的 top-k 文本 → 将检索结果与问题共同注入 prompt → 提交给 LLM 生成回答。
项目实现原理如下图所示:
从文档处理的角度看,整体数据流如下:
0.3.x 版本在 LLM 对话、知识库对话、搜索引擎对话之外,还统一了 File RAG(支持 BM25+KNN 混合检索)、数据库对话(Text2SQL)、多模态图片对话、文生图、Agent 工具调用等能力,详细功能对照可参考根目录 README.md 中的「0.3.x 版本功能一览」。模型接入侧,项目通过 Xinference、LocalAI、Ollama、FastChat 等本地模型加载框架接入 GLM-4-Chat、Qwen2-Instruct、Llama3 等开源模型,同时兼容 OpenAI SDK 协议的各类在线 API。
项目安装
1. 通过 PyPI 安装(推荐)
pip install langchain-chatchat
# 如果使用 xinference 提供模型 API:
# pip install langchain-chatchat[xinference]
# 从旧版本升级时,建议重新执行 init 以更新 yaml 配置模板:
# pip install -U langchain-chatchat
# chatchat init
安装 langchain-chatchat 后,会注册一个名为 chatchat 的命令行入口,其指向 chatchat/cli.py 中的 main 命令组(在 pyproject.toml 中声明为 chatchat = 'chatchat.cli:main')。
需要注意两点(原文档明确标注):
- 虚拟环境隔离:Chatchat 应放置在独立的虚拟环境中(conda、venv、virtualenv 等),避免与业务项目依赖冲突。
- 已知问题:
langchain-chatchat与xinference不能安装在同一个环境中,否则可能导致部分插件出现 bug(如文件上传问题)。因此推荐为模型服务与 Chatchat 分别创建环境。
从 pyproject.toml 可以看到,Python 版本要求为 >=3.10,<3.12,!=3.9.7,核心依赖锁定在 langchain 0.1.17、langchain-community 0.0.36、fastapi ~0.109.2、streamlit 1.34.0、faiss-cpu ~1.7.4、SQLAlchemy ~2.0.25 等版本;可选依赖 xinference、zhipuai 以 extras 形式提供,与上述 pip install langchain-chatchat[xinference] 的用法对应。
2. 源码安装
除 PyPI 外,也可以从源码启动。源码配置方式便于定位 bug 和修改基础设施,但项目方并不建议初学者使用此方式,开发部署细节可参考 开发指南。
3. Docker 部署
docker pull chatimage/chatchat:0.3.1.2-2024-0720
docker pull ccr.ccs.tencentyun.com/chatchat/chatchat:0.3.1.2-2024-0720 # 国内镜像
项目方强烈建议使用 docker compose 进行部署,详细说明见 Docker 部署指南;仓库根目录下的 Dockerfile 可作为自定义镜像构建的参考。
4. AutoDL 镜像
项目提供 AutoDL 镜像(0.3.0 版本),其中使用的代码已更新至本项目 v0.3.0 版本,适合在 GPU 云主机上一键体验。
初始化数据目录与 YAML 配置
项目运行需要独立的数据目录来存放知识库、SQLite 数据库、日志等。通过环境变量 CHATCHAT_ROOT 指定数据根路径(不设置时默认使用当前目录),随后执行 chatchat init 生成全部默认配置:
# 设置数据存储根路径
# 未设置时使用当前目录
export CHATCHAT_ROOT=/path/to/chatchat_data
# 初始化数据目录与 yaml 配置模板
chatchat init
CHATCHAT_ROOT 下会生成什么
在 chatchat/settings.py 中可以看到 CHATCHAT_ROOT = Path(os.environ.get("CHATCHAT_ROOT", ".")).resolve(),即所有数据路径均相对该变量解析。chatchat init 执行的 init 命令 会依次完成:
- 调用 BasicSettings.make_dirs() 创建全部数据目录(
data/、data/logs/、data/media/{image,audio,video}、data/temp/、data/knowledge_base/); - 将内置的示例知识库 samples 目录(含大模型技术文档、Excel/CSV 样例等)复制到
CHATCHAT_ROOT/data/knowledge_base/samples; - 调用
create_tables()初始化知识库 SQLite 数据库; - 生成全部 YAML 配置模板文件。
初始化后可在 CHATCHAT_ROOT(或当前目录)下找到 *_settings.yaml 系列文件。从 Settings.createl_all_templates() 的源码结构看,模板共 5 个:
| 配置文件 | 对应配置类 | 主要内容 |
|---|---|---|
basic_settings.yaml |
BasicSettings | 日志开关 log_verbose、HTTPX_DEFAULT_TIMEOUT、知识库路径 KB_ROOT_PATH、数据库 SQLALCHEMY_DATABASE_URI、跨域开关 OPEN_CROSS_DOMAIN、API/WebUI 服务地址端口 |
kb_settings.yaml |
KBSettings | 默认知识库 DEFAULT_KNOWLEDGE_BASE(默认 samples)、默认向量库类型 DEFAULT_VS_TYPE(可选 faiss/milvus/zilliz/pg/es/relyt/chromadb,默认 faiss)、文本分割器等 |
model_settings.yaml |
ApiModelSettings | MODEL_PLATFORMS 模型平台列表、默认 LLM DEFAULT_LLM_MODEL(默认 glm4-chat)、默认 Embedding DEFAULT_EMBEDDING_MODEL、LLM_MODEL_CONFIG 分角色温度/历史轮数配置等 |
tool_settings.yaml |
ToolSettings | Agent 工具开关与 API Key 等 |
prompt_settings.yaml |
PromptSettings | 各场景系统提示词模板 |
这些配置类支持热加载(set_auto_reload),但 BasicSettings 的注释 明确说明:除 log_verbose/HTTPX_DEFAULT_TIMEOUT 外,其余配置修改后需重启服务才生效。
chatchat init 的可选参数
chatchat init 还接受若干选项,可在初始化时直接落定模型配置(见 cli.py):
| 参数 | 说明 |
|---|---|
-x, --xinference-endpoint |
指定 Xinference API 服务地址,默认 http://127.0.0.1:9997/v1 |
-l, --llm-model |
指定默认 LLM 模型,默认 glm4-chat |
-e, --embed-model |
指定默认 Embedding 模型(CLI 帮助默认 bge-large-zh-v1.5;而 settings.py 中 DEFAULT_EMBEDDING_MODEL 的当前默认值为 bge-m3,以实际生成模板为准) |
-r, --recreate-kb |
初始化同时重建知识库(必须确保指定的 embed model 可用) |
-k, --kb-names |
要重建的知识库名称,多个名称以英文逗号分隔,默认 samples |
初始化完成后,程序会提示「请先检查确认 model_settings.yaml 里模型平台、LLM 模型和 Embed 模型信息已经正确」——这是后续所有 RAG 功能正常工作的前提。
构建知识库并启动服务
chatchat kb -r:重建向量库
确认配置无误后(尤其是 LLM 与 Embedding 模型),先重建知识库向量库:
chatchat kb -r
该命令对应 init_database.py 中注册的 kb 子命令。从源码可以看到它除 -r, --recreate-vs(重建向量库,适用于向 content 目录新增文档后、或 DEFAULT_VS_TYPE/DEFAULT_EMBEDDING_MODEL 变更后重新向量化)外,还提供了一整套知识库运维选项:
| 参数 | 作用 |
|---|---|
-r, --recreate-vs |
重建向量库 |
--create-tables |
不存在时创建空表 |
--clear-tables |
重建向量库前清空/删除数据库表 |
-u, --update-in-db |
仅重建数据库中已存在文件的向量(跳过本地新增文件) |
-i, --increment |
仅对本地新增且不在库中的文件做增量向量化 |
--prune-db |
删除库中在本地目录已不存在的文档记录 |
--prune-folder |
删除本地目录中在库中不存在的文档文件(释放磁盘) |
-n, --kb-name |
指定要操作的知识库名称,默认为 KB_ROOT_PATH 下全部知识库 |
-e, --embed-model |
指定 Embedding 模型,默认取配置中的 DEFAULT_EMBEDDING_MODEL |
--import-db |
从指定 sqlite 数据库导入表 |
实际重建时,会调用 migrate.py 中的 folder2db(kb_names, mode="recreate_vs", vs_type=..., embed_model=...),按 kb_settings.yaml 中的 DEFAULT_VS_TYPE 将 content 目录下的文档切分并向量化入库。
chatchat start -a:双进程启动
chatchat start -a
start 子命令注册于 startup.py,三个开关为:
-a, --all:同时启动 API Server 与 WEBUI Server(即chatchat start -a的效果);--api:仅启动 API 服务;-w, --webui:仅启动 WebUI 服务。
从 start_main_server 的源码结构看,服务启动采用 multiprocessing 的 spawn 方式派生两个独立进程:
- API Server:由 run_api_server 以 uvicorn 运行 FastAPI 应用(create_app),默认监听
basic_settings.yaml中API_SERVER的0.0.0.0:7861; - WEBUI Server:由 run_webui 通过 Streamlit bootstrap 机制运行 webui.py,默认端口
8501。
启动时 dump_server_info 会打印操作系统、Python 版本、项目版本(当前仓库源码版本为 0.3.1.3,见 chatchat/init.py)、langchain 版本、数据目录、当前分词器与默认 Embedding 名称,便于快速核对部署状态;日志则写入 basic_settings.yaml 的 LOG_PATH(默认 CHATCHAT_ROOT/data/logs)。
如果配置无误,浏览器页面会自动弹出,此时即可在对话页选择知识库提问,或在知识库页管理文档。
更新日志与项目里程碑
0.3.1.1 (2024-07-15) 修复清单
- 修复 WEBUI 中 system message 设置无效的问题;
- 修复模型平台不支持代理的问题;
- 移除无效的
vqasprocessor与aqa_processor工具; - 修复 Prompt 配置错误导致的
KeyError: template; - 修复 Searx 搜索引擎不支持中文的问题;
- 修复初始化时默认连接 xinference、默认服务不存在时报错的问题;
- 修复初始化时
shutil.copytree在 src 与 dst 相同时报错的问题。
项目里程碑
- 2023 年 4 月:Langchain ChatGLM 0.1.0 发布,支持基于 ChatGLM-6B 模型的本地知识库问答;
- 2023 年 8 月:项目更名并采用 fastchat 作为模型加载方案,支持更多模型与数据库;
- 2023 年 10 月:0.2.5 版本发布,引入 Agent 能力;
- 2023 年 12 月:开源项目累计获得超过 20K stars;
- 2024 年 6 月:0.3.0 版本发布,带来全新的项目架构(即本文所述的
chatchat init / kb / startCLI 体系)。
许可与引用
项目代码遵循 Apache 2.0 协议(见 LICENSE)。如果该项目对你的研究有帮助,建议按以下方式引用:
@software{langchain_chatchat,
title = {{langchain-chatchat}},
author = {Liu, Qian and Song, Jinke, and Huang, Zhiguo, and Zhang, Yuxuan, and glide-the, and Liu, Qingwei},
year = 2024,
journal = {GitHub repository},
publisher = {GitHub}
}
小结
部署 Langchain-Chatchat 的完整路径可以归纳为四步:
- 在独立虚拟环境中
pip install langchain-chatchat(避免与 xinference 混装); export CHATCHAT_ROOT=...后执行chatchat init,生成数据目录与*_settings.yaml配置模板,并核对model_settings.yaml中的模型平台、LLM 与 Embedding 配置;- 执行
chatchat kb -r将 samples(或自建)知识库向量化入库; - 执行
chatchat start -a同时拉起 7861 端口的 FastAPI 服务与 8501 端口的 Streamlit WebUI。
这套「环境变量定根目录、YAML 定行为、CLI 管生命周期」的设计,使得离线私有化 RAG 部署只需数条命令即可完成;如需深入定制,建议结合 贡献指南、设置说明 与 仓库结构文档 进一步阅读源码。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00

