srinath1505/free_tier-enterprise_grade-rag
GitHub: srinath1505/free_tier-enterprise_grade-rag
NexusRAG:免费企业级RAG系统,提供安全、可观察性和高级检索。
Stars: 0 | Forks: 0
[](LICENSE)
[](https://www.python.org/)
[](https://fastapi.tiangolo.com/)
[](frontend/static/)
[](test_report.md)
[](benchmark_results_final.json)
[](benchmark_results_final.json)
[-FFD21E?logo=huggingface&logoColor=000)](https://huggingface.co/spaces/Srinath-54/rag-backend)
**NexusRAG 是一个生产就绪、自托管的检索增强生成平台,** 它在中等笔记本电脑或免费云层上运行——无需云预算。 它提供了企业系统所期望的检索准确性、安全态势和可观察性,同时保持完全免费、完全私有和完全属于您。
[](https://rag-frontend-txy6.onrender.com/) **默认凭证 | 用户名:** `admin` **密码:** `1234567890qwerty` ### Ollama — 本地,完全离线(默认) ``` LLM_PROVIDER=local OLLAMA_BASE_URL=http://localhost:11434 OLLAMA_MODEL=phi3:mini ``` 从 [ollama.com](https://ollama.com) 安装 Ollama,然后拉取模型: ``` ollama pull phi3:mini # ~2 GB, fast on CPU ollama pull mistral # ~4 GB, better quality ollama pull llama3.2:3b # ~2 GB, good balance ``` 在 **Mac / Windows** 的 Docker 中使用 `http://host.docker.internal:11434`。 在 **Linux** 中替换为您的主机 IP 或单独运行 Ollama 作为 Compose 服务。
### Hugging Face Inference API — 免费云层 ``` LLM_PROVIDER=hf HF_TOKEN=hf_your_token_here HF_INFERENCE_API_URL=mistralai/Mistral-7B-Instruct-v0.2 ``` 在 [huggingface.co/settings/tokens](https://huggingface.co/settings/tokens) 获取免费令牌。 免费层包括慷慨的请求配额。无需信用卡。
### Groq — 高级/高吞吐量选项 ``` LLM_PROVIDER=groq GROQ_API_KEY=gsk_your_key_here GROQ_MODEL=llama-3.1-8b-instant ``` 在 [console.groq.com/keys](https://console.groq.com/keys) 获取免费 API 密钥。 Groq 的免费层提供高令牌吞吐量和非常低的延迟——在运行基准套件或构建需要一致响应时间的集成时推荐。 建议的模型: | 模型 | 速度 | 质量 | 用例 | |-------|-------|---------|----------| | `llama-3.1-8b-instant` | 非常快 | 好 | 开发,高容量 | | `llama-3.3-70b-versatile` | 中等 | 极佳 | 评估,生产查询 | | `gemma2-9b-it` | 快 | 好 | 平衡默认 | ## 支持的文档类型 | 格式 | 文本 | 表格 | 图片 | 备注 | |--------|:----:|:------:|:------:|-------| | **PDF** | ✅ | ✅ markdown | ✅ captioned* | pdfplumber; 表格区域从纯文本传递中排除 | | **DOCX** | ✅ | ✅ markdown | ✅ captioned* | python-docx; 保留段落 + 表格顺序 | | **TXT / MD / MDX** | ✅ | — | — | UTF-8,作为纯文本加载 | *图像字幕是 **可选的**。在 `.env` 中设置 `GROQ_API_KEY` 以在摄取时启用它。 如果密钥不存在,则静默跳过图像——其余文档正常摄取,无错误。 ## 环境变量 将 `.env.example` 复制到 `.env` 并在第一次运行之前进行编辑。所有变量都有本地开发的安全默认值;标记为 **必须更改** 的变量应在任何面向互联网的部署之前更新。 ``` cp .env.example .env ``` | 变量 | 默认 | 必需 | 描述 | |----------|---------|:--------:|-------------| | `SECRET_KEY` | placeholder | **必须更改** | JWT 签名密钥——使用 `python -c "import secrets; print(secrets.token_hex(32))"` 生成 | | `ADMIN_DEFAULT_PASSWORD` | `password` | **必须更改** | 管理员账户种子密码 | | `DATABASE_URL` | `sqlite+aiosqlite:///./users.db` | — | 在 Docker Compose 中覆盖为命名卷路径 | | `LLM_PROVIDER` | `local` | — | `local` (Ollama) · `hf` (HF Inference) · `groq` | | `OLLAMA_BASE_URL` | `http://localhost:11434` | if `local` | 在 Mac/Windows 的 Docker 中使用 `http://host.docker.internal:11434` | | `OLLAMA_MODEL` | `phi3:mini` | if `local` | 通过 `ollama pull` 拉取的任何模型 | | `HF_TOKEN` | _(empty)_ | if `hf` | 具有推理权限的 HF 令牌 | | `HF_INFERENCE_API_URL` | `mistralai/Mistral-7B-Instruct-v0.2` | if `hf` | 支持聊天完成的任何 HF 模型 ID | | `GROQ_API_KEY` | _(empty)_ | if `groq` | Groq API 密钥——还启用 PDF/DOCX 图像字幕在摄取时 | | `GROQ_MODEL` | `gemma2-9b-it` | if `groq` | Groq 平台上可用的任何模型 | | `EMBEDDING_MODEL_NAME` | `sentence-transformers/all-MiniLM-L6-v2` | — | 任何与 sentence-transformers 兼容的模型 | | `RERANKER_MODEL_NAME` | `cross-encoder/ms-marco-TinyBERT-L-2-v2` | — | 任何与 CrossEncoder 兼容的模型 | | `MAX_UPLOAD_SIZE_MB` | `50` | — | 文件上传大小上限(兆字节) | | `RATE_LIMIT_AUTH_PER_MIN` | `20` | — | `/token` 和 `/register` 的每 IP 每分钟请求 | | `RATE_LIMIT_QUERY_PER_MIN` | `20` | — | `/rag/query` 的每用户每分钟请求 | | `RATE_LIMIT_UPLOAD_PER_MIN` | `10` | — | `/ingest/upload` 的每用户每分钟请求 | | `LOG_FILE_DIR` | _(empty)_ | — | 旋转文件日志的目录;留空仅输出到 stdout | | `LANGCHAIN_TRACING_V2` | `false` | — | 将 `true` + `LANGCHAIN_API_KEY` 设置为启用 LangSmith 跟踪 | ## API 参考 所有端点都以前缀 `/api/v1` 开头。交互式文档在 `http://localhost:8000/api/v1/openapi.json`。 ### 认证 | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `POST` | `/token` | — | 使用用户名 + 密码登录 → JWT | | `POST` | `/register` | — | 注册新账户 → JWT(查看者角色) | | `GET` | `/me` | JWT | 返回 `{username, role}` 对于当前令牌 | ### RAG | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `POST` | `/rag/query` | JWT | 混合检索 → 重新排序 → LLM → 基于事实的答案 | 请求体: ``` { "query": "string", "top_k": 5, "alpha": 0.5, "use_query_expansion": true } ``` 响应: ``` { "answer": "string", "sources": [...], "confidence": 87, "warning": null } ``` ### 知识库(仅管理员) | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `POST` | `/ingest/upload` | 管理员 JWT | 上传 PDF / DOCX / TXT → 块 → 嵌入 → 索引 | | `GET` | `/ingest/files` | 管理员 JWT | 列出索引文件及其块计数 | | `DELETE` | `/ingest/files/{filename}` | 管理员 JWT | 从知识库中删除文件 | | `POST` | `/ingest/rebuild` | 管理员 JWT | 从头开始擦除并重新摄取所有文件 | ### 历史 & 分析 | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `GET` | `/history/{session_id}` | JWT | 获取会话的聊天历史(仅限自己的会话) | | `GET` | `/analytics` | 管理员 JWT | 查询计数,延迟分布,顶级查询 | ### 系统 | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `GET` | `/health` | — | `{"status": "ok"}` — Docker / 负载均衡器探测 | | `GET` | `/` | — | 欢迎信息 | ## QA & 测试 NexusRAG 随附一个全面的烟雾测试,涵盖认证、RBAC、上传、查询、幻觉检测、速率限制、历史记录和安全护栏。 ``` # 终端 1 — 启动后端 uvicorn backend.main:app --host 0.0.0.0 --port 8000 # 终端 2 — 运行完整套件 python smoke_test.py ``` **最后结果:71 / 71 断言 — 100% 通过率。** 完整测试报告:[`test_report.md`](test_report.md) ## 路线图 | 功能 | 状态 | |---------|--------| | SQLite 用户存储 + JWT 认证 | ✅ 完成 | | 持久聊天历史 | ✅ 完成 | | Docker Compose(后端 + 前端) | ✅ 完成 | | 速率限制 | ✅ 完成 | | 输入验证 + 安全护栏 | ✅ 完成 | | 一键渲染 + HF Spaces 部署 | ✅ 完成 | | RAGAS 评估框架 | ✅ 完成 | | HTML / CSS / JS SPA 前端 | ✅ 完成 | | PDF 表格 + 图像提取 | ✅ 完成 | | DOCX 表格 + 图像提取 | ✅ 完成 | | 150 个问题的 LLM-as-judge 基准测试 | ✅ 完成 | | 幻觉抵抗指标 | ✅ 完成 | | 多租户(按用户文档隔离) | 🔄 计划 | | 流式响应 | 🔄 计划 | | 演示 GIF / 视频教程 | 🔄 计划 | ## 贡献 & 归属 NexusRAG 在 Apache 2.0 许可证下是开源的。通过拉取请求欢迎贡献。 **归属要求:** 如果您使用 NexusRAG——无论是在个人项目、商业产品还是已部署的服务中——请包含可见的信用: ``` Powered by NexusRAG — created by Srinath Selvakumar https://github.com/srinath1505/free_tier-enterprise_grade-rag ``` 这不是 Apache 2.0 许可证下内部使用的法律义务,但它是一个合理的请求。如果您在 NexusRAG 之上构建公开或商业产品,提及可以保持项目活力,并让其他人发现它。 ## 许可证 ``` Copyright 2024 Srinath Selvakumar Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` ## 开发者 **Srinath Selvakumar** — 构建可访问的生产级 AI 工具。 [](https://github.com/srinath1505)
**NexusRAG 是一个生产就绪、自托管的检索增强生成平台,** 它在中等笔记本电脑或免费云层上运行——无需云预算。 它提供了企业系统所期望的检索准确性、安全态势和可观察性,同时保持完全免费、完全私有和完全属于您。
[](https://rag-frontend-txy6.onrender.com/) **默认凭证 | 用户名:** `admin` **密码:** `1234567890qwerty` ### Ollama — 本地,完全离线(默认) ``` LLM_PROVIDER=local OLLAMA_BASE_URL=http://localhost:11434 OLLAMA_MODEL=phi3:mini ``` 从 [ollama.com](https://ollama.com) 安装 Ollama,然后拉取模型: ``` ollama pull phi3:mini # ~2 GB, fast on CPU ollama pull mistral # ~4 GB, better quality ollama pull llama3.2:3b # ~2 GB, good balance ``` 在 **Mac / Windows** 的 Docker 中使用 `http://host.docker.internal:11434`。 在 **Linux** 中替换为您的主机 IP 或单独运行 Ollama 作为 Compose 服务。
### Hugging Face Inference API — 免费云层 ``` LLM_PROVIDER=hf HF_TOKEN=hf_your_token_here HF_INFERENCE_API_URL=mistralai/Mistral-7B-Instruct-v0.2 ``` 在 [huggingface.co/settings/tokens](https://huggingface.co/settings/tokens) 获取免费令牌。 免费层包括慷慨的请求配额。无需信用卡。
### Groq — 高级/高吞吐量选项 ``` LLM_PROVIDER=groq GROQ_API_KEY=gsk_your_key_here GROQ_MODEL=llama-3.1-8b-instant ``` 在 [console.groq.com/keys](https://console.groq.com/keys) 获取免费 API 密钥。 Groq 的免费层提供高令牌吞吐量和非常低的延迟——在运行基准套件或构建需要一致响应时间的集成时推荐。 建议的模型: | 模型 | 速度 | 质量 | 用例 | |-------|-------|---------|----------| | `llama-3.1-8b-instant` | 非常快 | 好 | 开发,高容量 | | `llama-3.3-70b-versatile` | 中等 | 极佳 | 评估,生产查询 | | `gemma2-9b-it` | 快 | 好 | 平衡默认 | ## 支持的文档类型 | 格式 | 文本 | 表格 | 图片 | 备注 | |--------|:----:|:------:|:------:|-------| | **PDF** | ✅ | ✅ markdown | ✅ captioned* | pdfplumber; 表格区域从纯文本传递中排除 | | **DOCX** | ✅ | ✅ markdown | ✅ captioned* | python-docx; 保留段落 + 表格顺序 | | **TXT / MD / MDX** | ✅ | — | — | UTF-8,作为纯文本加载 | *图像字幕是 **可选的**。在 `.env` 中设置 `GROQ_API_KEY` 以在摄取时启用它。 如果密钥不存在,则静默跳过图像——其余文档正常摄取,无错误。 ## 环境变量 将 `.env.example` 复制到 `.env` 并在第一次运行之前进行编辑。所有变量都有本地开发的安全默认值;标记为 **必须更改** 的变量应在任何面向互联网的部署之前更新。 ``` cp .env.example .env ``` | 变量 | 默认 | 必需 | 描述 | |----------|---------|:--------:|-------------| | `SECRET_KEY` | placeholder | **必须更改** | JWT 签名密钥——使用 `python -c "import secrets; print(secrets.token_hex(32))"` 生成 | | `ADMIN_DEFAULT_PASSWORD` | `password` | **必须更改** | 管理员账户种子密码 | | `DATABASE_URL` | `sqlite+aiosqlite:///./users.db` | — | 在 Docker Compose 中覆盖为命名卷路径 | | `LLM_PROVIDER` | `local` | — | `local` (Ollama) · `hf` (HF Inference) · `groq` | | `OLLAMA_BASE_URL` | `http://localhost:11434` | if `local` | 在 Mac/Windows 的 Docker 中使用 `http://host.docker.internal:11434` | | `OLLAMA_MODEL` | `phi3:mini` | if `local` | 通过 `ollama pull` 拉取的任何模型 | | `HF_TOKEN` | _(empty)_ | if `hf` | 具有推理权限的 HF 令牌 | | `HF_INFERENCE_API_URL` | `mistralai/Mistral-7B-Instruct-v0.2` | if `hf` | 支持聊天完成的任何 HF 模型 ID | | `GROQ_API_KEY` | _(empty)_ | if `groq` | Groq API 密钥——还启用 PDF/DOCX 图像字幕在摄取时 | | `GROQ_MODEL` | `gemma2-9b-it` | if `groq` | Groq 平台上可用的任何模型 | | `EMBEDDING_MODEL_NAME` | `sentence-transformers/all-MiniLM-L6-v2` | — | 任何与 sentence-transformers 兼容的模型 | | `RERANKER_MODEL_NAME` | `cross-encoder/ms-marco-TinyBERT-L-2-v2` | — | 任何与 CrossEncoder 兼容的模型 | | `MAX_UPLOAD_SIZE_MB` | `50` | — | 文件上传大小上限(兆字节) | | `RATE_LIMIT_AUTH_PER_MIN` | `20` | — | `/token` 和 `/register` 的每 IP 每分钟请求 | | `RATE_LIMIT_QUERY_PER_MIN` | `20` | — | `/rag/query` 的每用户每分钟请求 | | `RATE_LIMIT_UPLOAD_PER_MIN` | `10` | — | `/ingest/upload` 的每用户每分钟请求 | | `LOG_FILE_DIR` | _(empty)_ | — | 旋转文件日志的目录;留空仅输出到 stdout | | `LANGCHAIN_TRACING_V2` | `false` | — | 将 `true` + `LANGCHAIN_API_KEY` 设置为启用 LangSmith 跟踪 | ## API 参考 所有端点都以前缀 `/api/v1` 开头。交互式文档在 `http://localhost:8000/api/v1/openapi.json`。 ### 认证 | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `POST` | `/token` | — | 使用用户名 + 密码登录 → JWT | | `POST` | `/register` | — | 注册新账户 → JWT(查看者角色) | | `GET` | `/me` | JWT | 返回 `{username, role}` 对于当前令牌 | ### RAG | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `POST` | `/rag/query` | JWT | 混合检索 → 重新排序 → LLM → 基于事实的答案 | 请求体: ``` { "query": "string", "top_k": 5, "alpha": 0.5, "use_query_expansion": true } ``` 响应: ``` { "answer": "string", "sources": [...], "confidence": 87, "warning": null } ``` ### 知识库(仅管理员) | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `POST` | `/ingest/upload` | 管理员 JWT | 上传 PDF / DOCX / TXT → 块 → 嵌入 → 索引 | | `GET` | `/ingest/files` | 管理员 JWT | 列出索引文件及其块计数 | | `DELETE` | `/ingest/files/{filename}` | 管理员 JWT | 从知识库中删除文件 | | `POST` | `/ingest/rebuild` | 管理员 JWT | 从头开始擦除并重新摄取所有文件 | ### 历史 & 分析 | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `GET` | `/history/{session_id}` | JWT | 获取会话的聊天历史(仅限自己的会话) | | `GET` | `/analytics` | 管理员 JWT | 查询计数,延迟分布,顶级查询 | ### 系统 | 方法 | 端点 | 认证 | 描述 | |--------|----------|:----:|-------------| | `GET` | `/health` | — | `{"status": "ok"}` — Docker / 负载均衡器探测 | | `GET` | `/` | — | 欢迎信息 | ## QA & 测试 NexusRAG 随附一个全面的烟雾测试,涵盖认证、RBAC、上传、查询、幻觉检测、速率限制、历史记录和安全护栏。 ``` # 终端 1 — 启动后端 uvicorn backend.main:app --host 0.0.0.0 --port 8000 # 终端 2 — 运行完整套件 python smoke_test.py ``` **最后结果:71 / 71 断言 — 100% 通过率。** 完整测试报告:[`test_report.md`](test_report.md) ## 路线图 | 功能 | 状态 | |---------|--------| | SQLite 用户存储 + JWT 认证 | ✅ 完成 | | 持久聊天历史 | ✅ 完成 | | Docker Compose(后端 + 前端) | ✅ 完成 | | 速率限制 | ✅ 完成 | | 输入验证 + 安全护栏 | ✅ 完成 | | 一键渲染 + HF Spaces 部署 | ✅ 完成 | | RAGAS 评估框架 | ✅ 完成 | | HTML / CSS / JS SPA 前端 | ✅ 完成 | | PDF 表格 + 图像提取 | ✅ 完成 | | DOCX 表格 + 图像提取 | ✅ 完成 | | 150 个问题的 LLM-as-judge 基准测试 | ✅ 完成 | | 幻觉抵抗指标 | ✅ 完成 | | 多租户(按用户文档隔离) | 🔄 计划 | | 流式响应 | 🔄 计划 | | 演示 GIF / 视频教程 | 🔄 计划 | ## 贡献 & 归属 NexusRAG 在 Apache 2.0 许可证下是开源的。通过拉取请求欢迎贡献。 **归属要求:** 如果您使用 NexusRAG——无论是在个人项目、商业产品还是已部署的服务中——请包含可见的信用: ``` Powered by NexusRAG — created by Srinath Selvakumar https://github.com/srinath1505/free_tier-enterprise_grade-rag ``` 这不是 Apache 2.0 许可证下内部使用的法律义务,但它是一个合理的请求。如果您在 NexusRAG 之上构建公开或商业产品,提及可以保持项目活力,并让其他人发现它。 ## 许可证 ``` Copyright 2024 Srinath Selvakumar Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` ## 开发者 **Srinath Selvakumar** — 构建可访问的生产级 AI 工具。 [](https://github.com/srinath1505)
标签:Apache 2.0, AV绕过, FastAPI, Hugging Face Spaces, LLM评估, Ollama, Python, RAG系统, SPA, Vanilla JS, 事实准确性, 企业级功能, 免费基础设施, 准确性, 可扩展性, 可观察性, 安全, 幻觉抵抗, 开源, 技术支持, 技术教程, 无后门, 本地化, 检索增强生成, 模型, 测试, 演示, 生产级, 离线, 自托管, 请求拦截, 超时处理, 逆向工具, 高级检索技术