组织积累了大量内部文档——技术手册、政策文件、研究论文和操作指南。一直以来的挑战是如何将这些静态知识转化为可对话查询的形式。Langchain-Chatchat 提供了一个开源解决方案,将 LangChain 编排框架与 ChatGLM 对话式 AI 结合,实现基于文档的问答功能。
该项目主要由中国 AI 开发社区打造,托管于 GitHub 上的 chatchat-space 组织,在希望部署私有知识库问答系统的企业和个人中获得了大量关注。该项目通过在普通硬件上即可运行的自托管替代方案,消除了对 OpenAI 的 GPT 或企业 SaaS 知识平台等商业服务的依赖。
系统架构遵循一个定义明确的 RAG 流水线:文档被摄入、分块、嵌入并存储在向量数据库中。当用户提出问题时,系统会检索最相关的文档块,并将其作为上下文传递给 LLM,由 LLM 生成基于事实的回答。与直接对专业领域使用原始 LLM 查询相比,这种方法大幅降低了幻觉风险。
Langchain-Chatchat 中的 RAG 流水线如何工作?
Langchain-Chatchat 中的检索增强生成流水线是其驱动问答能力的核心引擎。了解其各个阶段是有效部署系统的关键。
graph TD
A[上传文档] --> B[文档解析\nPDF / Word / Txt / MD]
B --> C[文本分块\n滑动窗口分割]
C --> D[嵌入生成\nbge / text2vec / m3e]
D --> E[(向量数据库\nFAISS / Milvus / Chroma)]
F[用户提问] --> G[问题嵌入]
G --> H[相似度搜索]
E --> H
H --> I[上下文组装\nTop-K 区块]
I --> J[LLM 答案生成\nChatGLM / Qwen / API]
J --> K[基于事实的回答]
流水线从文档摄入开始,文件被解析为原始文本。然后文本使用可配置的策略进行分割——滑动窗口、递归字符分割或语义分割。每个区块使用 BGE、text2vec 或 M3E 等模型转换为密集向量嵌入。这些嵌入存储在向量数据库中,查询时用户问题被嵌入并针对此索引进行搜索,以找到最相关的内容。
支持哪些文档格式和语言?
Langchain-Chatchat 旨在支持广泛的文档格式,以处理真实世界的企业内容。
| 文档类型 | 支持格式 | 解析引擎 |
|---|---|---|
| Office 文档 | PDF、DOCX、XLSX、PPTX | PyMuPDF、python-docx、openpyxl |
| 网页格式 | HTML、Markdown、reStructuredText | BeautifulSoup、markdown 解析器 |
| 纯文本 | TXT、CSV、JSON、YAML | 内置文本解析器 |
| 代码 | Python、JS、Java 等 | 语言感知分割器 |
| 图片 | PNG、JPG、TIFF | 通过 PaddleOCR 或 Tesseract 进行 OCR |
系统内置支持多语言内容,在中文和英文文档处理上表现尤为出色。可用的嵌入模型包含针对不同语言优化检索准确度的语言特定变体。
多模型架构如何工作?
Langchain-Chatchat 支持多个模型协同工作,每个模型在流水线中扮演不同的角色。
| 模型角色 | 示例模型 | 用途 |
|---|---|---|
| LLM 后端 | ChatGLM3、Qwen、Baichuan | 根据上下文生成答案 |
| 嵌入模型 | BGE-Large、text2vec、M3E | 将文本转换为向量嵌入 |
| 重排序器 | BGE-Reranker、Cohere | 对检索到的区块进行重排序以提高准确度 |
| 在线 API 备用 | OpenAI、文心、通义 | 本地 GPU 不足时使用云端模型 |
重排序阶段对于生产部署尤其重要。在初始向量搜索检索到一组候选区块后,重排序模型会对每个区块与问题的相关性进行评分,并剔除不相关的结果。这种两阶段检索策略显著提高了答案质量。
有哪些部署选项?
Langchain-Chatchat 提供灵活的部署方式,以适应不同的硬件预算。
| 部署模式 | 硬件需求 | 用户规模 |
|---|---|---|
| 仅 CPU | 8+ GB 内存 | 小型团队、实验用途 |
| 单 GPU | 1x NVIDIA 16GB+ VRAM | 中型团队、生产环境 |
| 多 GPU | 2x+ NVIDIA A100 | 大型企业、高吞吐量 |
| API 模式 | 不需要本地 GPU | 依赖云端、快速设置 |
仅 CPU 模式对于数千页以下的文档集出乎意料地实用,使没有专用 GPU 资源的团队也能使用。对于较大的知识库和较低的延迟需求,GPU 部署则变得不可或缺。
常见问题
什么是 Langchain-Chatchat? Langchain-Chatchat 是一个开源的知识库问答系统,结合 LangChain 与 ChatGLM 实现本地文档检索与回答。用户可以上传文档并根据文档内容提出问题,系统通过完整的检索增强生成流水线来回答。
Langchain-Chatchat 支持哪些 LLM? Langchain-Chatchat 以 ChatGLM 系列模型为主要后端,同时支持其他开源 LLM,包括 Qwen、Baichuan 以及各种 API 型模型。系统采用模块化的模型抽象层设计,可轻松切换不同的 LLM 后端。
文档处理是如何工作的? 文档通过一个包含文档解析、文本分块、嵌入生成和向量存储的流水线进行处理。支持的格式包括 PDF、Word、Excel、Markdown、纯文本以及具备 OCR 支持的图片。分块后的内容会被索引到向量数据库中,以便在查询时进行高效的相似度搜索。
可以完全离线运行吗? 可以,Langchain-Chatchat 支持使用本地 LLM 和本地嵌入模型的完全离线部署。这使其非常适合具有严格数据隐私要求的企业环境,因为数据无需离开本地网络。
支持哪些向量数据库? Langchain-Chatchat 支持多种向量数据库后端,包括 FAISS(默认)、Milvus、Chroma 和 PostgreSQL 搭配 pgvector。用户可以根据规模和性能需求选择最合适的后端。
延伸阅读
- Langchain-Chatchat GitHub 仓库 – 源代码、文档和社区问题
- LangChain 官方文档 – RAG 流水线构建的框架文档
- ChatGLM 官方页面 – 驱动问答引擎的 ChatGLM 模型系列
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!