iknowkungfubar/ring-fenced-rag
GitHub: iknowkungfubar/ring-fenced-rag
一个自托管的零信任 RAG 文档问答系统,在数据库层面强制执行基于角色的访问控制,确保未经授权的文档内容不会被检索到。
Stars: 3 | Forks: 1
# Ring-Fenced RAG
[](https://github.com/iknowkungfubar/ring-fenced-rag/actions/workflows/ci.yml)
[](https://www.python.org/)
[](LICENSE)
[](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, 基于角色的访问控制, 大语言模型, 文档问答系统, 本地知识库, 检索增强生成, 测试用例, 请求拦截, 逆向工具, 零信任