LlamaIndex + Ollama Ollama+ Python Python + Docker+ NVIDIA GPU+ Python 3.14++ Hugging Face

离线开源RAG:摄取本地文件、GitHub仓库、网站,用本地Ollama模型问答

Ollama提供本地聊天与嵌入模型,LlamaIndex负责检索与流式响应,Streamlit提供Web界面,全程离线

✓ 数据不出本地网络✓ 支持三种数据摄取源 ✕ WSL未测试,建议Linux✕ 上传单文件限25MB

方案简介

Local RAG 是一个离线、开源的检索增强生成(RAG)应用。它将本地文件、GitHub 仓库和网站作为数据源摄取并建立索引,通过本地 Ollama 模型进行问答。整个方案的聊天、嵌入与索引内容都保留在你的机器或网络内,不依赖第三方服务,敏感数据不会离开本地网络。适合希望在本地搭建私有知识库问答、对数据隐私有要求的开发者与团队。

亮点与能力

  • 本地 Ollama 聊天模型
  • Ollama 或本地 Hugging Face 嵌入模型
  • 多种摄取来源:本地文件、GitHub 仓库、网站
  • 通过 LlamaIndex 流式输出 RAG 响应
  • 浏览器本地设置持久化
  • 聊天历史导出
  • 上传、URL、仓库及摄取防护措施

组成与分工

  • Ollama:本地运行聊天模型(如 gemma4、llama3)与嵌入模型(默认 embeddinggemma),是 LLM 推理与嵌入后端
  • LlamaIndex:构建查询引擎,负责检索 Top K 相似块并以 compact 模式生成流式响应
  • Hugging Face 模型:可选的本地嵌入后端,默认使用 Alibaba-NLP/gte-modernbert-base
  • Streamlit:Web 应用界面,通过 streamlit run main.py 启动,设置存储在浏览器 localStorage
  • Docker:提供容器化部署,官方镜像 jonfairbanks/local-rag 运行在 8501 端口

前置要求

开始前请确保具备:

  • 一个本地 Ollama 实例
  • Ollama 中至少有一个支持聊天的模型
  • 如使用默认 Ollama 嵌入后端,至少有一个嵌入模型(默认模型名为 embeddinggemma)
  • Python 3.14+

警告:本应用在 Windows Subsystem for Linux 上未测试,建议使用 Linux 主机。

实施步骤

1. 安装并拉取模型

安装 pipenv 与依赖:

bash
pip install pipenv
pipenv install

拉取所需模型:

bash
ollama pull gemma4:latest
ollama pull embeddinggemma
ollama list

2. 启动应用

本地方式启动:

bash
pipenv run streamlit run main.py

或使用 Docker:

bash
docker compose up -d

3. 配置并使用

  1. 打开 Settings 确认 Ollama 端点。
  2. 选择有效的聊天模型。
  3. 选择嵌入后端和模型。
  4. 从本地文件、GitHub 仓库或网站导入数据。
  5. 摄取完成后,在聊天框中提问。

在必需的模型设置有效之前,数据导入控件保持禁用状态。

使用与配置要点

默认 Ollama 端点为 http://localhost:11434,可在 Settings 标签页修改,应用会刷新该端点下的聊天与嵌入模型列表。

关键设置:

  • Top K:每次查询检索的最相似块数量,默认 3
  • Chunk Size:索引源文本的最大块大小,默认 1024
  • Chunk Overlap:相邻块之间的文本重叠,必须小于 Chunk Size,默认 200

设置存储在浏览器 localStorage 中,下次访问同一浏览器时恢复。聊天历史不以此方式持久化,请使用 Export Data 部分下载。

本地文件上传限制:每次最多 10 个文件,单文件 25 MB,单次上传总计 100 MB。上传的文件被写入临时 data/ 目录进行摄取,索引完成后删除。

注意事项与常见问题

  • 本应用在 WSL 上未测试,建议使用 Linux 主机
  • GitHub 源仅支持 github.com 仓库 URL,必须直接指向仓库,issue、PR、分支等路径会被拒绝;仓库以 --depth 1 克隆
  • 网站摄取一次最多接受 5 个公共 HTTPS URL,仅允许 HTTPS,阻止本地/私有等网络地址,重定向最多 3 次,响应体每 URL 限 5 MB
  • 如 Ollama 运行在宿主机而非容器内,Linux Docker 可能需要 extra_hosts: - 'host.docker.internal:host-gateway',然后使用 http://host.docker.internal:11434 作为端点

优缺点

  • ✓ 数据不出本地网络
  • ✓ 支持三种数据摄取源
  • ✕ WSL未测试,建议Linux
  • ✕ 上传单文件限25MB

出处

本方案挖掘自开源项目 jonfairbanks/local-rag,方案内容与实施命令均来自其 README 原文。

方案出处
jonfairbanks/local-rag:Ingest files for retrieval augmented generation (RAG) with open-source Large Lan
759 star Ingest files for retrieval augmented generation (RAG) with open-source Large Language Models (LLMs), all without 3rd parties or sensitive data leaving your network.

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