xianggao31412-png/production-rag-system

GitHub: xianggao31412-png/production-rag-system

一个具备混合检索、reranking、可靠引用和运营仪表盘的生产级企业知识问答 RAG 平台,支持从离线零依赖模式一键切换至本地大模型生产配置。

Stars: 0 | Forks: 0

# 企业知识助手 一个具备 reranking、可靠引用、namespace 隔离、API-key 认证、速率限制、结构化日志、健康/就绪探针以及内置**实时运营 dashboard** 的**最低生产级混合检索 RAG 平台**。 它**开箱即用,完全离线运行**(无需下载模型,无需 GPU,无需网络),使用确定性哈希 embedder、内存向量存储和抽取式回答生成器——然后只需切换几个环境变量,即可升级为**本地 Ollama**(`qwen3-coder:30b` + `nomic-embed-text`)、**ChromaDB** 和 **cross-encoder reranker**。API 或 dashboard 的任何内容都不会改变。 ## 为什么这不是玩具 大多数“RAG 演示”只是将单个向量搜索连接到 LLM。以下是将其转变为平台的三个升级: 1. **混合搜索** — 通过 Reciprocal Rank Fusion 将 BM25 词法检索与稠密向量检索融合。它能捕捉被 embedding 淡化的确切术语、ID 和缩写,*以及*关键词遗漏的语义匹配。 2. **Reranking** — 对融合后的候选结果进行第二阶段相关性筛选(默认为启发式,可选 cross-encoder),从而确保交给 LLM 的 chunk 是*最*相关的,而不仅仅是最容易被检索到的。 3. **运营 dashboard** — 一个真正的仪表盘,可逐阶段追踪实时检索 pipeline 并测量每个阶段的延迟,此外还提供目录、指标和最近的查询反馈。 除此之外,它还具备一个真正的服务所需的功能:摄入时的去重、与向量索引解耦的持久化目录 (SQLite)、每请求追踪、token-bucket 速率限制、一致的 JSON 错误封装、约 40 个测试套件,以及 Docker 打包。 ## 功能概览 | 领域 | 您将获得 | |------|--------------| | 检索 | 混合 BM25 + 向量,RRF 或加权融合,每个阶段可配置 top-k | | Reranking | 启发式(无需下载)或 cross-encoder(`sentence-transformers`) | | 生成 | 兼容 OpenAI 的聊天 (Ollama/llama.cpp),带有**抽取式存根回退**,确保回答*始终*有理有据并附有引用 | | 引用 | 每个回答都带有映射到源 chunk 的 `[n]` 标记;`grounded` 标志 | | 隔离 | Namespace 划分文档、检索和分析数据 | | 安全性 | API-key 认证 (`X-API-Key`),基于客户端的 token-bucket 速率限制 | | 可观测性 | 结构化 JSON 日志 + 请求 ID,`/health`、`/ready`、`/v1/admin/metrics`、实时 dashboard | | 存储 | SQLite 目录 + 分析数据;numpy 向量存储(pickle 持久化)或 ChromaDB | | 摄入 | TXT、Markdown、CSV/TSV、PDF;sha256 去重;边界感知分块 | | 运维 | Dockerfile + compose、Makefile、`run.sh` / `run.bat`、冒烟测试 + seed 脚本 | ## 快速开始 ### 最简单 — 在 Windows 上一键运行 1. **运行应用程序:** 双击 **`START_SOFTWARE.bat`**。它将创建虚拟环境、安装依赖项、生成 `.env`、创建 `data/ logs/ output/` 文件夹、启动服务器,并在 `http://127.0.0.1:8000/dashboard` 打开 dashboard。(无需管理员权限,包含空格的路径也可以正常运行,且绝不会删除您的文件。) 2. **查看所有功能:** 在 dashboard 中点击 **Run showcase demo** —— 它会加载捆绑的展示文档并运行一系列引导式问题,使整个 pipeline 亮起。或者双击 **`RUN_DEMO.bat`** 进行有旁白的命令行之旅(可离线工作,无需服务器)。 ### 选项 A — 离线演示(除 pip 外零依赖) ``` # 1. 安装 python -m pip install -r requirements.txt # 2. (可选)复制 demo env;默认已支持离线运行 cp .env.example .env # 3. 运行 uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` 然后打开 **http://localhost:8000/dashboard**,在顶部栏粘贴 API key `dev-local-key`,即可摄入文件或运行查询。或者使用内置示例进行 seed: ``` python scripts/seed_examples.py --api-key dev-local-key ``` 在 Windows 上,您只需双击 **`run.bat`**(创建虚拟环境、安装、复制演示环境并启动服务器)。 ### 选项 B — 使用本地 Ollama 的生产配置 ``` ollama pull qwen3-coder:30b ollama pull nomic-embed-text ``` 在 `.env` 中,注释掉演示块并启用生产块(参见 [`docs/CONFIGURATION.md`](docs/CONFIGURATION.md))。关键切换项: ``` EMBEDDING_PROVIDER=openai_compatible EMBEDDING_BASE_URL=http://127.0.0.1:11434/v1 EMBEDDING_MODEL=nomic-embed-text EMBEDDING_DIM=768 LLM_FORCE_STUB=false LLM_MODEL=qwen3-coder:30b # 可选的较重 backends: # VECTOR_BACKEND=chroma (pip install chromadb) # RERANK_PROVIDER=cross_encoder (pip install sentence-transformers) ``` 重启服务器。Dashboard 现在将显示实时的模型名称和真实的生成延迟。 ## 从命令行尝试 ``` KEY=dev-local-key # ingest curl -s -X POST "http://localhost:8000/v1/documents?namespace=demo" \ -H "X-API-Key: $KEY" -F "file=@demo/examples/company_policy.txt" # ask curl -s -X POST "http://localhost:8000/v1/query" \ -H "X-API-Key: $KEY" -H "Content-Type: application/json" \ -d '{"question":"How many vacation days do employees get?","namespace":"demo"}' ``` 请参阅 [`docs/API.md`](docs/API.md) 获取完整的 endpoint 参考。 ## 项目结构 ``` enterprise-knowledge-assistant/ ├── app/ │ ├── config.py # env-driven settings (pydantic-settings) │ ├── logging_config.py # JSON logs + request-id context │ ├── errors.py # typed errors + JSON envelope handlers │ ├── models/ # domain dataclasses + Pydantic wire schemas │ ├── core/ │ │ ├── extraction.py # TXT/MD/CSV/PDF text extraction │ │ ├── chunking.py # boundary-aware sliding-window chunker │ │ ├── embeddings/ # hash (default) | openai_compatible │ │ ├── vectorstore/ # memory (default) | chroma │ │ ├── keyword/ # BM25 index │ │ ├── fusion.py # RRF + weighted fusion │ │ ├── rerank/ # heuristic (default) | cross_encoder │ │ ├── retriever.py # the hybrid retrieval pipeline │ │ ├── llm.py # OpenAI-compatible client + extractive stub │ │ └── rag.py # context assembly + citation extraction │ ├── storage/ # SQLite catalogue + analytics │ ├── services/ # ingest / query / admin orchestration │ ├── middleware/ # request-id + rate-limit │ ├── api/ # FastAPI routers + auth deps │ ├── dashboard/ # single-page ops console (HTML/CSS/JS) │ ├── container.py # dependency wiring │ └── main.py # app factory + lifespan ├── tests/ # ~40 unit + integration tests ├── demo/ # all demonstration & example files (kept separate from app code) │ ├── showcase/ # AI_SOFTWARE_SHOWCASE_FILE.md (the guided-demo document) │ └── examples/ # sample corpus: policy (TXT), FAQ (MD), employees (CSV) ├── scripts/ # smoke_test.py, seed_examples.py ├── docs/ # USAGE, ARCHITECTURE, API, CONFIGURATION, DEPLOYMENT, DEVELOPMENT_LOOP ├── START_SOFTWARE.bat # Windows one-click: setup + run + open dashboard ├── RUN_DEMO.bat / run_demo.py # one-click / CLI guided feature demo ├── Dockerfile, docker-compose.yml, Makefile, run.sh, run.bat └── requirements.txt, requirements-optional.txt, .env.example ``` ## 文档 | 文档 | 内容 | |-----|----------| | [docs/USAGE.md](docs/USAGE.md) | 平台操作:摄入、查询、dashboard、切换后端(包含中文操作手册) | | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | 分层、检索 pipeline、设计决策和权衡 | | [docs/API.md](docs/API.md) | 每个 endpoint 的请求/响应示例 | | [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | 每个环境变量,包含演示与生产环境的配置对比 | | [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) | Docker、compose 以及生产环境强化清单 | | [docs/DEVELOPMENT_LOOP.md](docs/DEVELOPMENT_LOOP.md) | 迭代构建日志、验证表,以及发现并修复的三个真实 bug | ## 测试 ``` python -m pytest # ~40 unit + integration tests python scripts/smoke_test.py # end-to-end boot + ingest + query ``` ## 技术栈 FastAPI · Pydantic v2 · SQLite · NumPy · rank-bm25 · pypdf · httpx · 原生 HTML/CSS/JS dashboard。可选:ChromaDB、sentence-transformers。专为本地 Ollama runtime(`qwen3-coder:30b`、`nomic-embed-text`)设计。 ## 致审阅者 / 面试简介 ## License 按“原样”提供,用于作品集和评估目的。
标签:AI风险缓解, AV绕过, ChromaDB, DLL 劫持, FastAPI, RAG系统, 大语言模型, 检索增强生成, 请求拦截, 运维监控, 运行时操纵, 逆向工具