JEen-wang / Adaptive-rag
git clone https://github.com/JEen-wang/Adaptive-rag.git
按问题复杂度自动分流的电商客服 RAG:简单问题直接回答;复杂问题经过多跳检索并自我纠错;查单、退改通过工具调用完成,且高风险写操作必须先经人工确认。基于 FastAPI 和 LangGraph,混合检索并附带引用,内置离线评测与 Prometheus 指标。涵盖简历写法和项目面试拷打
+11
stars, 24h · #3,082
+~75
stars, 7 days · #2,788
+139
stars, 30 days · #5,434
139
★ total · +75% this week
17
forks · 2 open issues
Star history (as recorded here)
LanguagePython
LicenseMIT
Created2026-09-29 (24d ago)
Last push1d ago
Watchers0
OwnerUser
GitHub topics
Links
README excerpt
Adaptive RAG · 电商客服工作流 让简单问题直接回答,让复杂问题找到证据,让业务操作停在确认之前。 FastAPI × LangGraph × 混合检索 · API、流式对话与 ChatGPT 风格 Web 工作台 项目亮点 · 快速开始 · 系统架构 · 实测结果 · 简历写法 · 完整文档 · 使用边界 · 后续路线图 --- ## ✨ 一眼看懂 > **Adaptive RAG** 的核心决策是:这个问题需要直接回答、检索一条证据、交叉核对多条证据、调用业务工具,还是拒绝处理? 电商客服里的问题跨度很大。「你好」无需查知识库;退货政策需要可靠出处;「定制商品超过七天但有质量问题」要同时判断定制、时效与质量例外;取消订单则必须检查订单状态、权限与确认。项目用明确的路由策略处理这些差异,避免把所有输入都塞进同一条向量检索链路。 | 能力 | 你能看到什么 | 关键实现 | |:---|:---|:---| | 🧭 **按复杂度路由** | 每次回答带有 `strategy`,便于追踪实际路径 | Graph 与节点 · 策略枚举 | | 🔎 **有出处的检索** | BM25、稠密向量、RRF 融合与精排;回答可带 `citations` | 检索模块 | | 🧩 **多跳与自纠错** | 复合问题拆分检索,答案经过忠实度检查 | 智能体节点 | | 🛡️ **人工确认** | 高风险写操作先返回 `pending_action`,确认后才执行 | 工具与权限 | | 💬 **Web 对话工作台** | 流式显示、引用、本地会话搜索、深色模式与确认卡片 | 前端 | | 📈 **可测可观测** | 离线评测、回归测试、结构化日志与 Prometheus 指标 | 评测 · 可观测性 | ### 五条处理路径 | 策略 | 适合的问题 | 处理方式 | |:---:|:---|:---| | `DIRECT` | 问候、闲聊 | 直接生成,不做知识检索 | | `SINGLE` | 单一政策问题 | 一轮混合检索与精排 | | `MULTI` | 多条件、跨条款问题 | 查询改写、多路检索与自纠错 | | `AGENT` | 查询订单、物流或发起业务操作 | 规划后调用受权限约束的工具 | | `REFUSE` | 越权、注入或证据不足 | 拒答或引导人工处理 | > [!TIP] > 第一次了解项目,可以先看架构图,再按快速开始提问。想看每条路径怎样落到代码,读智能体与工具。 ## 🚀 快速开始 默认使用 SQLite 和内存检索组件,不要求先部署 Redis 或 Qdrant。需要 **Python 3.11+**;Web 开发另需满足前端 Node.js 要求。 ### 1. 安装并启动 API [code] Windows PowerShell 激活虚拟环境可使用 `.venv\Scripts\Activate.ps1`。首次启用本地 Embedding / Cross-Encoder 时可能需要下载模型;需要完整的本地精排依赖可安装 `pip install -e ".[rerank]"`。更多选项见配置参考。 `.env` 中的 `DEEPSEEK_API_KEY` 可留空:此时系统进入离线演示模式,展示检索原文或可核对的订单状态,不会假装生成完整答案。要体验生成式回答,需要配置可用的 DeepSeek 密钥。**不要提交 `.env` 或密钥。** ### 2. 发送第一条消息 [code] 响应包含 `answer`、`strategy`、`trace_id`,需要检索时还会带 `citations`。也可以运行 `python -m app.cli` 进入终端对话;流式接口为 `POST /api/v1/chat/stream`,完整字段见 API 参考。 ### 3. 打开 Web 工作台 保持 API 运行,另开终端: [code] 访问 **http://127.0.0.1:5173**。开发服务器会把 `/api` 代理到本地 FastAPI。执行 `npm run build` 后,FastAPI 检测到 `frontend/dist` 也会在根路径提供页面;Docker 镜像会自动构建前端。前端会话列表存于浏览器本地,详见前端 README。 🧪 想体验订单工具与人工确认?展开查看演示数据步骤 当前分支默认启动**不会自动写入**演示订单。先停止 API,在仓库根目录、已激活虚拟环境的终端执行: [code] mermaid flowchart LR U["用户 · Web / CLI / HTTP"] --> API["FastAPI · JSON / SSE"] API --> S["ChatService"] S --> G["LangGraph:护栏 → 意图 → 复杂度路由"] G --> D["DIRECT"] G --> R["SINGLE / MULTI"] G --> A["AGENT"] G --> F["REFUSE"] R --> H["BM25 + 向量 → RRF → 精排"] A --> T["权限校验 → 工具 → 人工确认"] D --> O["生成 / 忠实度检查"] H --> O T --> O F --> O O --> X["回答 + 引用 + trace_id"] [code] bash python -m pytest -q python -m eval.runner --task retrieval cd frontend && npm test && npm run build [code] text app/ api/ HTTP 路由、校验、SSE services/ ChatService、依赖容器、演示数据 agents/ LangGraph 状态机与节点 retrieval/ 解析、切块、混合检索、精排与自纠错 tools/ 业务工具、注册表与权限 repositories/ 订单、会话与幂等 providers/ 生成、Embedding 与 Rerank guardrails/ 注入、边界与忠实度检查 memory/ 上下文预算与压缩 observability/ 日志、指标与请求上下文 frontend/ React + TypeScript Web 工作台 knowledge/ 政策文档 eval/ 离线评测与口径 tests/ 单元、集成与端到端测试 docs/ 技术手册与教学文档 ``` ## ⚠️ 使用边界 这是可运行的工程示例,**目前不应直接面向不可信用户开放**: - API 尚未认证请求中的 `user_id`;前端默认 `u_demo` 仅供本地演示。部署前应由可信服务端认证并绑定身份。 - 订单与物流来自本地仓储演示数据,没有连接真实承运商或支付网关。 - Web 会话列表保存在当前浏览器的 `localStorage`,清除站点数据或换设备后不会恢复。 - 知识库启动时