iknowkungfubar/ring-fenced-rag

GitHub: iknowkungfubar/ring-fenced-rag

一个自托管的零信任 RAG 文档问答系统,在数据库层面强制执行基于角色的访问控制,确保未经授权的文档内容不会被检索到。

Stars: 3 | Forks: 1

# Ring-Fenced RAG [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/af0eb4d2cf115311.svg)](https://github.com/iknowkungfubar/ring-fenced-rag/actions/workflows/ci.yml) [![Python](https://img.shields.io/badge/python-3.13-blue.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![PyPI](https://img.shields.io/pypi/v/ring-fenced-rag)](https://pypi.org/project/ring-fenced-rag/) ## 什么是 Ring-Fenced RAG? Ring-Fenced RAG (RFR) 是一个自托管的文档问答系统,其**访问控制是在数据库层面强制执行的** —— 而非应用层。每个文档块在摄入时都会被标记上角色元数据。当用户查询系统时,向量数据库会**从数学层面上直接拒绝**返回用户无权查看的文档块。 无需云 API。没有数据传出。不存在“我们承诺在检索后进行过滤”的情况。 ``` pip install ring-fenced-rag rfr init rfr up rfr ingest ./docs/ --role senior_engineer rfr query "How do I restart Nginx?" ``` ## 核心功能 - **🔒 环形隔离检索** — PostgreSQL JSONB `@>` 操作符在查询时强制执行基于角色的访问控制。未经授权的查询将返回零结果。 - **🏠 100% 本地化** — Embedding (sentence-transformers)、存储 (pgvector) 和生成 (Ollama/vLLM/LM Studio) 全部在你的硬件上运行。默认情况下零数据传出。 - **♻️ 幂等摄入** — LangChain `SQLRecordManager` 跟踪内容哈希。同一份文档摄入 10 次,最终只会保留 1 份副本。 - **🔌 可插拔 LLMs** — 支持 vLLM、Ollama、LM Studio 以及任何兼容 OpenAI 的 API。可在 `~/.rfr/config.toml` 中进行配置。 - **🎛️ 四种接口** — CLI、Web UI、TUI、REST API。 - **🐧 AMD ROCm 支持** — 可通过 ROCm vLLM 或 Ollama 在 AMD GPU 上运行。 ## 快速开始 ### 前置条件 - Python 3.13+ - Docker & Docker Compose(用于生产模式) - 或者:仅需 Python(用于带有 SQLite 的独立模式) ### 安装 ``` pip install ring-fenced-rag ``` ### 初始化 ``` cd my-project rfr init ``` 这会创建以下内容: - `~/.rfr/config.toml` — 你的配置文件 - `docker-compose.yml` — 可直接运行 ### 启动技术栈 ``` # 生产模式(Docker — 推荐) rfr up # 独立模式(无 Docker) rfr standalone ``` ### 访问 Web UI 技术栈运行后,在浏览器中打开 **[http://localhost:8080](http://localhost:8080)**。 Web UI 提供: - **Dashboard** — 针对你的文档进行提问 - **Documents** — 浏览并管理已索引的文档 - **Ingest** — 上传带有角色元数据的文档 - **Settings** — 管理 API 密钥并查看系统健康状况 ### 摄入文档 ``` rfr ingest ./manuals/ --role senior_engineer rfr ingest ./onboarding/ --role junior_engineer ``` ### 提问 ``` rfr query "How do I restart the Nginx server?" ``` ## CLI 参考 所有 CLI 命令一览: | 命令 | 描述 | |---------|-------------| | `rfr init` | 生成 config + docker-compose.yml | | `rfr up [-d]` | 启动 Docker 服务 | | `rfr down` | 停止 Docker 服务 | | `rfr status` | 显示组件健康状况 | | `rfr version` | 显示版本、git commit、平台 | | `rfr --version` | 显示版本(简短) | | `rfr standalone` | 在独立模式下运行(SQLite,无需 Docker) | | `rfr config show` | 打印当前配置 | | `rfr config set ` | 更新配置值 | | `rfr ingest ` | 从文件/目录摄入文档 | | `rfr query ` | 针对你的文档提出问题 | | `rfr keys create/list/revoke` | 管理 API 密钥 | | `rfr docs list/delete` | 浏览并删除已索引的文档 | | `rfr logs [service]` | 跟踪 Docker 服务日志 | | `rfr tui` | 启动终端 UI (Textual) | ## 配置 编辑 `~/.rfr/config.toml` 或使用 `RFR_*` 环境变量: ``` [llm] provider = "ollama" # vllm, ollama, lm-studio, openai base_url = "http://localhost:11434/v1" model = "llama3.2:3b" [embedding] model = "all-MiniLM-L6-v2" # 384-dim, CPU-friendly [ingestion] chunk_size = 512 default_role = "user" ``` ## 架构 ``` User (CLI/Web/TUI) → FastAPI API → LCEL Pipeline │ ┌─────────▼──────────┐ │ pgvector (PostgreSQL) │ JSONB @> role filter │ HNSW vector index └─────────┬──────────┘ │ ┌─────────▼──────────┐ │ LLM (Ollama/vLLM) │ │ Zero egress │ └────────────────────┘ ``` ## 开发 ``` # Clone git clone https://github.com/iknowkungfubar/ring-fenced-rag.git cd ring-fenced-rag # 安装 dev dependencies uv sync --group dev # 运行测试 uv run pytest tests/ -q --tb=short --cov=src/rfr # Format 和 lint uv run ruff format src/ tests/ uv run ruff check src/ tests/ # 安装 TUI dependencies(可选) uv pip install textual ``` ## 贡献 欢迎贡献!请阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 了解有关我们的开发流程、代码规范、PR 工作流以及行为准则的详细指南。 ## 许可证 MIT
标签:AI风险缓解, DLL 劫持, JSONLines, pgvector, 基于角色的访问控制, 大语言模型, 文档问答系统, 本地知识库, 检索增强生成, 测试用例, 请求拦截, 逆向工具, 零信任