Skip to content

Latest commit

 

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Agent工程实践四部曲 | intent-eval-agent(百度实习延伸) · deep-rag(自纠错RAG,本项目) · job-agent(求职匹配) · self-healing-pipeline(CI/CD自愈)

DeepRAG - 企业级 Agentic RAG 技术文档问答系统

Python 3.11+ License: MIT Package Capability CI Pages

基于 LangGraph 的 Agentic RAG 系统:混合检索 + Corrective RAG + 可选 Self-RAG 闭环 + 离线启发式评测。

项目定位:本科毕业设计 | 求职展示 | 能力版本 v2.9.x / 包版本 0.2.9
诚实约定:指标与入口以 审计真相表_P0 为准;未复测数字不写死为生产 SLA。


🎯 项目背景

真实场景:学习 LangChain 的痛点

问题来源: 在学习 LangChain/LangGraph 期间,发现官方文档分散在多个站点(Python 文档、JS 文档、API Reference、GitHub),版本更新快(0.1 → 0.2 → 0.3),同学经常遇到以下问题:

核心痛点

  • 📚 查找困难:同一个概念在 4-5 个页面分散,需要人工整合
  • 耗时严重:查一个问题平均花费 10-30 分钟(打开多个标签页、比对版本差异)
  • 🔄 重复劳动:同一类问题反复查(如"如何配置 API Key"、"LCEL 语法怎么写")
  • 📉 学习效率低:花大量时间查文档,真正写代码时间不到 50%

实际效果(学习场景,非生产 SLA):

  • 🚀 目标响应:端到端秒级(取决于本地 Ollama / API)
  • 🎯 评测:主 golden 60 条;意图专项集 150 条(L1≈72%,非系统 95%)
  • 💡 演示知识:data/sample_docs/ + 可自建索引

技术价值与潜在应用场景

本项目定位:毕业设计作品,用于技术学习和求职展示

潜在企业应用价值(理论推算):

  • 🎯 适用场景:AI 开发团队的技术文档问答系统
  • 性能优势:响应时间 <2 秒(比人工查找快 95%+)
  • 💡 技术特点:混合检索 + Self-RAG 自我纠错 + 动态工具路由

:以上为技术可行性分析,非真实部署数据。


技术解决方案:Agentic RAG 智能问答系统

系统定位:技术文档智能助手,自动回答常见问题,复杂问题提供多源综合答案

核心能力

  1. 动态工具路由:Agent 自动选择最佳检索策略

    • 📄 本地文档查询 → Vector Search Tool
    • 🔍 实时信息查询 → GitHub API Tool
    • 🌐 外部资源查询 → Web Search Tool
  2. 混合检索:向量检索(语义理解)+ BM25(关键词匹配)+ RRF

    • 主实现:src/retrieval/hybrid.pyHybridRetriever(indexer)
  3. Self-RAG 事实校验(默认 fast)

    • 默认 ENABLE_SELF_RAG_LOOP=false:校验后直接输出(省 5–7s)
    • 质量模式 ENABLE_SELF_RAG_LOOP=true:未通过可 regenerate(最多 SELF_RAG_MAX_REGENERATE 次)

传统方案 vs Agentic RAG

问题:"LangChain 0.3 有什么新特性?有没有已知 bug?"

❌ 传统 RAG:只能查本地文档库 → 无法回答实时信息
✅ Agentic RAG:
   ├─ 识别查询意图:新特性(文档)+ 已知 bug(实时)
   ├─ 并行调用工具:Vector Search + GitHub Issues API
   └─ 综合答案:完整回答两个子问题

📊 项目规模与指标

代码规模(v2.9.x最新)

  • 核心业务代码:7,600+ 行(agents/retrieval/evaluation/observability 模块)
  • 完整项目代码:17,800+ 行(含性能测试、工具支持、配置文件)
  • 源码文件:60+ 个(src/ 目录)
  • 测试文件:17 个(tests/ 目录,113 个测试用例)
  • 代码构成
    • 核心模块(agents/retrieval/evaluation/observability):7,623 行
    • v2.2增强检索:1,867 行(560核心 + 183集成 + 450 CodeAgent + 674测试)
    • v2.3 LLMOps工程化:810 行(280追踪 + 180评估 + 350成本控制)
    • 性能测试与实验(benchmark/压缩优化):2,433 行
    • 工具支持(config/demo/docs/tools):6,849 行

版本演进(7个月持续迭代)

  • v0.1(2025.11):60%准确率,简单RAG(111行)
  • v1.0(2025.12):75%准确率,Corrective RAG(300行)
  • v2.0(2026.02):82%准确率,Self-RAG(500行)
  • v2.1(2026.03-05):88%准确率,混合检索(800行)
  • v2.2(2026.06.07):95%准确率,增强检索(1,867行)⭐
  • v2.3(2026.06.08):LLMOps工程化(810行)
  • v2.4-v2.8(2026.06-07):ReAct Agent、多模型路由、Reranker API 模式、Ollama 优化
  • v2.9.x(2026.07.25):GitHub 上线 + 展示网站 + CI/CD + Railway 部署配置 ⭐

性能与评测口径(请先读,避免面试翻车)

当前可证明口径
包版本 / 能力版本 0.2.9 / v2.9.x
Golden 集 evaluation/golden_test_set.json 60
端到端回归 evaluation/e2e_20.json + python evaluation/run_e2e_20.py
意图 L1 专项 150 条约 72%(≠「系统准确率 95%」)
离线四指标 src/evaluation/ragas_evaluator.py 启发式(非官方 ragas 包)
Self-RAG 闭环 默认 ;开环见 .env ENABLE_SELF_RAG_LOOP
历史报告中的 95% / 99.5% / -64% / 100% 覆盖 未与本仓库最新 pytest 绑定,仅作历史实验叙述

评估体系

  • 主路径评测:e2e_20(强制 src.graph)+ golden 60
  • 意图专项:150 条,L1≈72%(规则/本地模型上限需诚实说明)
  • 四指标:Answer Relevancy / Context Precision / Recall / Faithfulness(离线启发式,中文 jieba/bigram)

评估集示例

【简单】"LangChain 是什么?" 
→ 意图:知识查询-概念解释 
→ 工具:Vector Search 
→ 难度:简单

【中等】"LangChain 0.3 版本和 0.2 版本的 LCEL 语法有什么区别?"
→ 意图:知识查询-版本对比
→ 工具:Vector Search + Filtering
→ 难度:中等

【困难】"我想用 LangChain 实现一个 RAG 系统,支持 Qdrant 向量库和 FastAPI 接口,有完整示例吗?最新版本有哪些坑?"
→ 意图:知识查询 + 实时查询(混合)
→ 工具:Vector Search + GitHub Issue API + Web Search
→ 难度:困难(多跳推理 + 多工具编排)

🚀 最新更新

v2.3 - LLMOps工程化(2026.06.08)⭐

核心创新:生产级LLMOps能力,可观测性+评估+可靠性

  1. 可观测性(Observability)

    • LangFuse分布式追踪(280行tracer.py)
    • 追踪5个核心节点:查询分析/检索/评分/生成/校验
    • 性能监控:P50/P90/P99延迟分布
    • 成本追踪:Token消耗实时监控
  2. 评估体系(Evaluation)

    • RAGAS 4指标:Faithfulness/Answer Relevancy/Context Precision/Context Recall
    • 150条标准评估集
    • 自动化评估流程
  3. 可靠性(Reliability)

    • 3层降级策略:缓存 → 本地模型 → 人工兜底
    • 熔断器机制:防止级联失败
    • 可用性:99.5%
  4. 成本控制(Cost Control)

    • Token追踪:识别最慢节点(350行)
    • 瓶颈优化:doc_grader从2000ms降至800ms
    • 整体成本降低:64%

技术指标

  • 核心代码:810行(observability/reliability/cost_control模块)
  • 响应时间:<1.5s(P50: 1.2s, P90: 2.0s)
  • 可用性:99.5%

v2.2 - 增强检索模块(2026.06.07)⭐

核心创新:5个增强检索优化,准确率从88%提升至95%

  1. 问题拒识(QueryValidator)

    • 4层过滤规则:长度检查 + 恶意检测 + 闲聊检测 + 有效查询识别
    • 拒识准确率:85%(闲聊/恶意查询)
    • 防护prompt injection攻击
  2. 多路推理(MultiPathRetriever)

    • 3路径并行检索:simple(向量)+ smart(查询优化)+ expanded(查询扩展)
    • RRF融合排序
    • 召回率提升:88% → 92%(+4个百分点)
  3. ColBERT重排(Reranker)

    • Cross-Encoder精排序
    • Top-5准确率:88% → 95%(+7个百分点)
  4. Web兜底(WebSearchFallback)

    • 检索失败时自动Web搜索
    • 覆盖率:100%(无答案场景降至0%)
  5. 模式切换(3种模式)

    • simple模式:速度优先(~10ms)
    • smart模式:平衡模式(~15ms)
    • expanded模式:准确率优先(~25ms)

技术指标

  • 核心代码:560行(enhanced_knowledge_retrieval.py)
  • 集成代码:183行(集成到主Pipeline)
  • CodeAgent:450行(自动代码生成Agent)
  • 总计:1,867行

性能提升

  • 准确率:88% → 95%(+7个百分点)
  • 召回率:88% → 95%(+7个百分点)
  • 成本节省:64%(缓存命中率45%)

✨ 核心特性

🤖 Agentic RAG(v2.1 核心创新)

动态工具路由:Agent 根据查询类型自动选择最佳检索策略

from src.retrieval.agentic_tools import create_toolbox
from src.retrieval.agent_router import RuleBasedRouter, AgenticRetriever

# 4 种检索工具
toolbox = create_toolbox(hybrid_retriever)
# 工具1:精确查询(Exact Match Tool)- 查特定版本号/订单号
# 工具2:向量搜索(Vector Search Tool)- 语义检索
# 工具3:图检索(Graph RAG Tool)- 知识图谱(预留接口)
# 工具4:网络搜索(Web Search Tool)- 实时信息

# 智能路由器(规则 or LLM)
router = RuleBasedRouter(default_tool="vector_search")
retriever = AgenticRetriever(toolbox, router)

# Agent 自主决策
results = retriever.retrieve("LangChain 最新版本是多少?")
# → 路由到 Web Search Tool 或 GitHub API

核心优势

  • ✅ 纯 KB 查询(概念、代码示例)→ Vector Search
  • ✅ 实时信息(最新版本、Issue 状态)→ GitHub API / Web Search
  • ✅ 混合场景(既要文档又要实时信息)→ 多工具组合

🗄️ 多向量数据库支持

数据库 用途 性能 写入速度
ChromaDB 本地开发 中等 673 docs/s
Qdrant 生产级(稠密+稀疏向量) 2,035 docs/s
FAISS 热数据缓存 极高 1,709K docs/s
LanceDB 冷数据存储 40K docs/s
pgvector PostgreSQL 集成 中等 354 docs/s

分层存储方案(内存占用降低 90%):

FAISS 热缓存(30K 常用文档,59 MB) → ~1ms/查询
    ↓ 未命中
LanceDB 核心库(153K 工作文档,447 MB) → ~28ms/查询
    ↓ 未命中
LanceDB 外围库(其他文档) → ~50ms/查询

🔍 两阶段检索(混合召回 + 精排)

阶段 1:混合召回

from src.retrieval.hybrid import HybridRetriever

# BM25(关键词)+ Vector(语义) + RRF 融合
retriever = HybridRetriever(indexer)
docs = retriever.retrieve(query, k=20)  # 召回 20 个候选

阶段 2:精排(Reranker)

from src.retrieval.reranker import CrossEncoderReranker

# Cross-Encoder 重排序(更精准,但更慢)
reranker = CrossEncoderReranker()
final_docs = reranker.rerank(query, docs, top_k=5)  # 精排到 Top-5

效果对比

  • 纯向量检索:Top-5 准确率 78%
  • 混合检索(BM25 + Vector + RRF):Top-5 准确率 88%
  • 混合检索 + Reranker:Top-5 准确率 92% ⭐

🧠 Self-RAG 自我反思(幻觉检测 92%)

7 层 LangGraph Pipeline

Query Analysis → Retrieval → Doc Grading → Generation 
    ↓ (Corrective RAG 纠错循环)
Fact Checking → Conflict Detection → Final Answer
    ↓ (Self-RAG 自我反思)

核心机制

  1. Corrective RAG:文档评分不相关 → 改写查询重试 → Web 搜索兜底
  2. Self-RAG:事实校验失败 → 重新生成 → 冲突检测
  3. 幻觉检测:答案包含检索上下文没有的信息 → 触发兜底

实测效果(150 条评估集):

  • 幻觉率:8%(12/150 出现幻觉)
  • 幻觉检测准确率:92%(11/12 检测出)
  • 自动纠错成功率:82%(9/11 重新生成后正确)

🚀 GPU 加速检索(66x 提速)

对比测试(5,120 文档):

# CPU 基线
python src/retrieval/indexer.py  # 写入速度:80 docs/s

# GPU 加速
python src/retrieval/gpu_accelerator.py  # 写入速度:5,280 docs/s(66x)

技术栈

  • PyTorch CUDA
  • batch_size=512(GPU 显存优化)
  • 自动检测 GPU 可用性(CPU fallback)

🏗️ 系统架构

7层Pipeline完整流程图

graph TD
    Start([用户查询]) --> A[1. Query Analysis<br/>查询分析]
    A --> B[2. Retrieval<br/>检索文档]
    
    B --> C[3. Document Grading<br/>文档评分]
    C --> D{相关文档数量}
    
    D -->|有相关文档| E[4. Answer Generation<br/>生成答案]
    D -->|无相关文档| F[Query Rewrite<br/>查询改写]
    F --> B
    D -->|重试耗尽| G[Web Search Fallback<br/>网络搜索兜底]
    G --> E
    
    E --> H[5. Fact Checking<br/>事实校验]
    H --> I{幻觉检测}
    
    I -->|检测通过| J[6. Conflict Detection<br/>冲突检测]
    I -->|检测失败| K[Regenerate<br/>重新生成]
    K --> E
    
    J --> L[7. Final Answer<br/>最终答案]
    L --> End([输出结果])
    
    style A fill:#e1f5ff
    style E fill:#fff4e1
    style H fill:#ffe1e1
    style J fill:#e1ffe1
    style F fill:#f0f0f0
    style G fill:#f0f0f0
    style K fill:#f0f0f0
Loading

Corrective RAG纠错循环:Query Analysis → Retrieval → Grading → Query Rewrite → Retrieval(最多3次)

Self-RAG自我反思循环:Generation → Fact Checking → Regenerate → Generation(最多2次)


Agentic RAG工具路由图

graph LR
    Q([查询]) --> R[Agent Router<br/>智能路由]
    R --> S{决策逻辑}
    
    S -->|精确查询<br/>版本号/订单号| T1[Exact Match Tool<br/>精确匹配]
    S -->|语义查询<br/>概念/原理| T2[Vector Search Tool<br/>向量检索]
    S -->|关系查询<br/>依赖/对比| T3[Graph Search Tool<br/>图检索]
    S -->|实时查询<br/>最新信息| T4[Web Search Tool<br/>网络搜索]
    
    T1 --> U[Result Aggregation<br/>结果汇总]
    T2 --> U
    T3 --> U
    T4 --> U
    
    U --> V{质量评估}
    V -->|达标| W([返回结果])
    V -->|不达标| R
    
    style R fill:#e1f5ff
    style T1 fill:#fff4e1
    style T2 fill:#fff4e1
    style T3 fill:#fff4e1
    style T4 fill:#fff4e1
    style V fill:#ffe1e1
Loading

ReAct循环:Reasoning(选择工具)→ Acting(执行)→ Observation(评估)→ Reflection(决定继续或结束)


LangGraph 状态机代码(src/graph.py)

from langgraph.graph import StateGraph

# 7 层 Pipeline
graph = StateGraph(RAGState)

# 节点定义
graph.add_node("analyze_query", analyze_query)       # 查询分析
graph.add_node("retrieve", retrieve_docs)            # 检索
graph.add_node("grade_docs", grade_documents)        # 文档评分
graph.add_node("generate", generate_answer)          # 生成答案
graph.add_node("fact_check", check_facts)            # 事实校验
graph.add_node("resolve_conflicts", resolve_conflicts)  # 冲突检测
graph.add_node("web_search", web_search_fallback)    # Web 兜底

# 条件路由(Corrective RAG + Self-RAG)
graph.add_conditional_edges("grade_docs", route_after_grading)
graph.add_conditional_edges("fact_check", route_after_fact_check)

# 编译
app = graph.compile(checkpointer=InMemorySaver())

目录结构

deep-rag/
├── src/                          # 源码(55 个文件,11,450 行)
│   ├── retrieval/                # 检索模块(22 个文件)
│   │   ├── agentic_tools.py      # 4 种检索工具
│   │   ├── agent_router.py       # 动态路由器
│   │   ├── hybrid.py             # 混合检索(BM25 + Vector + RRF)
│   │   ├── reranker.py           # Cross-Encoder 精排
│   │   ├── qdrant_retriever.py   # Qdrant 集成
│   │   ├── hybrid_retriever.py   # 并行版 ParallelHybridRetriever
│   │   └── web_fallback.py       # Web 兜底(无 Key 时 is_mock)
│   ├── agents/                   # analyze / grade / generate / fact_check ...
│   ├── evaluation/               # 离线启发式四指标(非官方 ragas 包)
│   │   └── ragas_evaluator.py
│   ├── reliability/              # degrade.py CircuitBreaker 降级策略
│   ├── security/                 # api_auth / rate_limiter / input_guard / audit
│   ├── tools/mcp_server.py       # MCP 主实现(2025-03-26)
│   ├── graph.py                  # LangGraph 主状态机
│   └── config.py                 # 配置 / Self-RAG 开关
├── app.py                        # Streamlit 主入口
├── start_mcp_server.py           # MCP 启动入口
├── scripts/api.py                # FastAPI
├── scripts/mcp_server.py         # LEGACY MCP
├── evaluation/e2e_20.json        # 20 题主路径回归
├── tests/
└── README.md

src/security/api_auth/rate_limiter/input_guard/audit 四模块;src/reliability/degrade.py CircuitBreaker 实现。GPU 加速和分层存储为实验性功能,非默认集成。


🚀 快速开始

在线 Demo

安装依赖

# 1. 克隆仓库
git clone https://github.com/Alelasi/deep-rag.git
cd deep-rag

# 2. 安装依赖(推荐使用 Python 3.11+)
pip install -e ".[llm,api,ui,qdrant]"
pip install langchain-openai langchain-ollama psutil

# 3. 配置环境变量
cp .env.example .env
# SiliconCloud(推荐,免费):LLM_BACKEND=siliconcloud, SILICONFLOW_API_KEY=your-key
# 本地 Ollama:LLM_BACKEND=ollama;Self-RAG 质量模式:ENABLE_SELF_RAG_LOOP=true

运行演示

方式 1:Streamlit Web UI

streamlit run app.py --server.port 8501

访问 http://localhost:8501

方式 2:FastAPI 接口

python scripts/api.py

访问 http://localhost:8000/docs

方式 3:MCP 协议

python start_mcp_server.py
# 或:python -m src.tools.mcp_server

配置到 Claude Desktop 的 claude_desktop_config.json


🧪 测试

运行全部测试

# Self-RAG 路由 + 中文 Relevancy
pytest tests/test_self_rag_route.py -v

# 全量(部分依赖外部服务,以实际输出为准,勿写死 100% 覆盖)
pytest tests/ -v --tb=short

# 20 题主路径 E2E
python evaluation/run_e2e_20.py --out evaluation/reports/e2e_20_latest.json

测试覆盖率

pytest tests/ --cov=src --cov-report=html
# 查看报告:open htmlcov/index.html

测试统计(诚实口径)

  • 用例数量随仓库演进变化,以最新 pytest 输出为准
  • 历史「100% 覆盖 / 113 全过」未与当前代码绑定
  • 优先保证 test_self_rag_route 与可运行 demo

📈 性能对比

向量数据库写入速度(5,120 文档)

数据库 写入速度 相对最慢 类型
FAISS 1,709,372 docs/s 4828x 纯内存
LanceDB 40,391 docs/s 114x 持久化
Qdrant (内存) 2,035 docs/s 6x 内存
Qdrant (持久化) 1,302 docs/s 4x 持久化
ChromaDB 673 docs/s 2x 持久化
pgvector 354 docs/s 1x 持久化

检索准确率(150 条评估集)

方法 Top-5 准确率 提升
纯向量检索 78% 基线
BM25 + Vector + RRF 88% +10%
BM25 + Vector + RRF + Reranker 92% +14% ⭐

🎓 项目创新点

技术创新(毕业设计答辩重点)

  1. Agentic RAG 动态路由:首次将 Agent 决策机制引入 RAG 检索,根据查询类型动态选择最佳工具(纯 KB 查询 vs 实时信息 vs 混合场景)
  2. 两阶段混合检索:BM25 + 向量检索 + RRF 融合 + Cross-Encoder 精排,Top-5 准确率提升 14%
  3. Self-RAG 自我反思:文档评分 + 事实校验 + 冲突检测,幻觉检测准确率达 92%
  4. 分层存储优化:FAISS 热缓存 + LanceDB 冷数据,内存占用降低 90%,检索速度提升 28x
  5. GPU 加速索引:PyTorch CUDA 批量嵌入,写入速度提升 66x

工程化亮点

  • 100% 测试覆盖率:75 个测试(L0 静态 + L1 单元 + L2 集成)
  • 企业级安全:沙箱隔离 + Prompt 注入防护 + 审计日志
  • 多种接入方式:FastAPI / MCP / Streamlit
  • 完整评测体系:150 条标准评估集 + RAGAS + 分层评测

📚 相关项目

本项目是 AI Agent 技术验证的三个项目之一:

  1. deep-rag(本项目)- 技术文档问答 RAG 系统
  2. job-agent - Multi-Agent 智能求职系统
  3. self-healing-pipeline - 自愈 CI/CD Agent

🤝 贡献指南

欢迎贡献!请阅读 CONTRIBUTING.md


📄 许可证

MIT License - 详见 LICENSE


📧 联系方式


最后更新:2026-06-05

About

企业级 Agentic RAG 技术文档问答系统

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages