本地多PDF问答聊天机器人:RAG检索增强+本地LLM推理+Web界面
LlamaIndex编排RAG流程,Huggingface/Ollama提供嵌入与LLM,Chroma存向量,Gradio做UI,Ngrok暴露公网
方案简介
本方案基于开源项目 datvodinh/rag-chatbot(683 star),实现「本地与多个 PDF 聊天」的问答系统。它属于典型的 RAG(检索增强生成)架构:用 LlamaIndex 解析并切分 PDF 文档,通过 Huggingface 嵌入模型生成向量并存入 Chroma 向量库,检索时结合 BM25 检索器召回相关片段,再交给由 Ollama 或 Huggingface 托管的本地大模型(如 Llama3、Mistral)生成回答,最终通过 Gradio 提供简单的 Web 聊天界面。
这套组合的最大特点是全程可在本地或 Kaggle 免费环境运行,无需将文档上传到第三方云服务,适合希望对私有/敏感文档进行问答、又不想依赖 OpenAI 等云端 API 的个人用户和开发者。同时它保留了接入 OpenAI 模型的灵活性(依赖中包含 llama-index-llms-openai),并计划支持多语言聊天。
亮点与能力
- 可在
Local或Kaggle上轻松运行(新增支持) - 可使用来自
Huggingface和Ollama的任意模型 - 支持处理多个 PDF 输入
- 多语言聊天支持(即将推出)
- 使用
Gradio提供简洁的用户界面 - 混合检索:内置 BM25 检索器与向量检索(依赖 llama-index-retrievers-bm25)
- 实验性 RAG Flow 可视化(Retriever 流程图)
组成与分工
- LlamaIndex:核心 RAG 编排框架,负责文档读取、切分、索引与查询流程;依赖中的 llama-index-readers-file 负责读取 PDF。
- Huggingface:提供嵌入模型(llama-index-embeddings-huggingface、sentence-transformers)及任意开源模型。
- Ollama:本地运行 LLM(如 Llama3、Mistral),通过 llama-index-llms-ollama 接入。
- Chroma:向量数据库(llama-index-vector-stores-chroma),存储文档嵌入向量供检索。
- Gradio:构建简单的聊天 Web UI。
- PyMuPDF:PDF 解析与处理。
- Ngrok:将本地运行的服务暴露为公网链接,方便 Kaggle 等环境访问。
- uv:Python 包管理与虚拟环境工具,用于同步锁定依赖。
前置要求
- Python >= 3.11(requires-python = ">=3.11")
- Docker(可选,用于容器化运行)
- Ollama(本地 LLM 推理)
- Ngrok(可选,用于公网访问/Kaggle 场景)
安装 uv(一次性):
bash
curl -LsSf https://astral.sh/uv/install.sh | sh
Linux 安装 Ollama:
bash
curl -fsSL https://ollama.com/install.sh | sh
MacOS 安装 Ngrok:
bash
brew install ngrok/ngrok/ngrok
一键安装额外依赖(Ollama、Ngrok、python 包):
bash
bash ./scripts/install_extra.sh
实施步骤
1. Kaggle 方式(推荐)
- 将
notebooks/kaggle.ipynb导入 Kaggle - 将
替换为你的 token
2. 本地部署
2.1 克隆项目
bash
git clone https://github.com/datvodinh/rag-chatbot.git
cd rag-chatbot
2.2 安装
方式一:Docker
bash
docker compose up --build
方式二:脚本安装(Ollama、Ngrok、python 包)
bash
bash ./scripts/install_extra.sh
方式三:手动安装
- 安装 Ollama(MacOS/Windows 从官网下载;Linux 见前置要求)
- 安装 Ngrok(见前置要求)
- 安装 rag_chatbot 包:
bash
uv sync --locked
2.3 运行
bash
bash ./scripts/run.sh
或:
bash
uv run python -m rag_chatbot --host localhost
使用 Ngrok 公网访问:
bash
bash ./scripts/run.sh --ngrok
3. 访问
安装完成后访问 http://0.0.0.0:7860/ 或 Ngrok 链接。
使用与配置要点
- 默认 Web 界面地址为
http://0.0.0.0:7860/,也可使用--host参数指定主机。 - Kaggle 模式需在 notebook 中替换
为自己的 Ngrok token,setup 完成后通过 Ngrok 链接访问。 - 可通过
--ngrok参数启动并获取公网链接。 - 验证成功标志:浏览器打开上述地址后看到 Gradio 聊天界面,即可上传多个 PDF 开始提问。
注意事项与常见问题
- 多语言聊天功能为「Coming soon(即将推出)」,尚未正式支持。
- RAG Flow(含 Retriever 流程)目前标记为实验性(Experiment)。
- Kaggle 方式为官方推荐运行方式。
- 安装 uv 后需确认
~/.local/bin(默认安装位置)在PATH中。
优缺点
- ✓ 完全本地运行,隐私安全
- ✓ 支持多PDF多语言模型
- ✕ 多语言聊天尚未支持
出处
本方案挖掘自开源项目 datvodinh/rag-chatbot,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。