Gradio + Ollama Ollama + Python 3.11++ Docker+ PyMuPDF+ Huggingface+ Ngrok

本地多PDF问答聊天机器人:RAG检索增强+本地LLM推理+Web界面

LlamaIndex编排RAG流程,Huggingface/Ollama提供嵌入与LLM,Chroma存向量,Gradio做UI,Ngrok暴露公网

✓ 完全本地运行,隐私安全✓ 支持多PDF多语言模型 ✕ 多语言聊天尚未支持

方案简介

本方案基于开源项目 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),并计划支持多语言聊天。

亮点与能力

  • 可在 LocalKaggle 上轻松运行(新增支持)
  • 可使用来自 HuggingfaceOllama 的任意模型
  • 支持处理多个 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 方式(推荐)

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

方式三:手动安装
  1. 安装 Ollama(MacOS/Windows 从官网下载;Linux 见前置要求)
  2. 安装 Ngrok(见前置要求)
  3. 安装 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 原文。

方案出处
datvodinh/rag-chatbot: Chat with multiple PDFs locally
683 star Chat with multiple PDFs locally

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。