构建可离线部署的本地知识库RAG问答应用
LangChain负责应用编排,Xinference与Ollama承载模型接入,FastAPI和Streamlit分别提供API与WebUI。
方案简介
这是一套面向中文场景的本地知识库问答方案,以开源大语言模型和应用框架为基础,围绕文档处理、向量检索与回答生成建立完整的 RAG 流程。项目目标是提供友好的中文和开源模型支持,并尽可能在本地、离线环境中完成部署。
方案适合需要使用本地资料进行问答、希望控制数据部署位置,或希望通过开源模型构建知识库应用的使用者。它既提供基于 FastAPI 的服务调用方式,也提供基于 Streamlit 的 WebUI 操作方式;同时保留对 OpenAI GPT API 的调用能力。
亮点与能力
- 支持本地知识库问答,覆盖从文件加载到回答生成的主要流程。
- 支持主流开源 LLM、Embedding 模型与向量数据库。
- 可通过 Xinference、Ollama 等模型部署框架接入模型。
- 可接入 GLM-4-Chat、Qwen2-Instruct、Llama3 等模型。
- 通过 FastAPI 提供 API 服务调用。
- 通过 Streamlit 提供 WebUI 操作。
- 支持全部使用开源模型进行离线私有部署,同时也支持 OpenAI GPT API 调用。
组成与分工
- LangChain:提供应用编排思想和知识库问答流程的框架基础。
- Xinference:作为本地模型部署框架,负责承载可接入的模型服务。
- Ollama:作为另一种本地模型部署框架,提供模型接入能力。
- GLM-4-Chat:可接入的开源大语言模型之一。
- FastAPI:对外提供 API 服务调用入口。
- Streamlit:提供可交互的 WebUI 操作界面。
- Embedding 模型:将文档和问题转换为向量,参与相似度检索。
- 向量数据库:保存文本向量并支持相似内容匹配。
实施步骤
1. 选择模型部署方式
先确定使用 Xinference、Ollama 等已支持的本地模型部署框架,并准备相应的开源大语言模型和 Embedding 模型。模型服务需要先由使用者启动,项目再通过配置接入。
2. 准备知识库材料
将需要问答的文件作为知识库输入。方案按“加载文件—读取文本—文本分割—文本向量化”的顺序处理文档,为后续检索建立向量表示。
3. 建立检索链路
用户提出问题后,系统先对问题进行向量化,在文本向量中匹配与问题向量最相似的 top k 个片段,再把匹配出的文本作为上下文与问题一起放入 prompt。
4. 接入回答模型
将检索得到的上下文和问题提交给 LLM,由模型生成最终回答。模型部署框架和项目之间通过配置完成连接。
5. 选择访问入口
需要程序化调用时使用 FastAPI 提供的 API;需要交互式操作时使用 Streamlit WebUI。两者都建立在同一套知识库问答能力之上。
使用与配置要点
日常使用时,核心操作是维护知识库文件、选择已接入的模型,并提交问题进行检索问答。回答生成依赖检索到的上下文,因此应先确认知识库已完成文本处理和向量化。
验证方案是否跑通,可以检查以下链路是否连续:文件能够被加载,文本能够被切分,文档和问题能够完成向量化,系统能够返回 top k 相似文本,并将这些文本连同问题提交给 LLM 生成回答。若需要外部系统接入,则通过 FastAPI API 调用;若面向用户操作,则通过 Streamlit WebUI 使用。
注意事项与常见问题
- 本项目本身不涉及微调和训练过程;微调或训练可以用于优化本项目效果,但不属于该方案的基础流程。
- 使用本地模型时,模型部署框架需要由用户自行启动,然后再通过修改配置信息接入项目。
- README 提到 Docker 镜像将会在近期更新,因此 Docker 部署信息不能作为当前材料中完整的实施依据。
- 除离线开源模型外,项目也支持调用 OpenAI GPT API;这属于额外的模型 API 接入路径。
优缺点
- ✓ 支持离线私有部署
- ✓ 支持主流开源模型与向量数据库
- ✕ 需自行启动模型部署框架
- ✕ 需修改配置信息接入
出处
本方案挖掘自开源项目 chatchat-space/Langchain-Chatchat,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。