Agent工程实践四部曲 | intent-eval-agent(百度实习延伸) · deep-rag(自纠错RAG,本项目) · job-agent(求职匹配) · self-healing-pipeline(CI/CD自愈)
基于 LangGraph 的 Agentic RAG 系统:混合检索 + Corrective RAG + 可选 Self-RAG 闭环 + 离线启发式评测。
项目定位:本科毕业设计 | 求职展示 | 能力版本 v2.9.x / 包版本 0.2.9
诚实约定:指标与入口以 审计真相表_P0 为准;未复测数字不写死为生产 SLA。
问题来源: 在学习 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 自我纠错 + 动态工具路由
注:以上为技术可行性分析,非真实部署数据。
系统定位:技术文档智能助手,自动回答常见问题,复杂问题提供多源综合答案
核心能力:
-
动态工具路由:Agent 自动选择最佳检索策略
- 📄 本地文档查询 → Vector Search Tool
- 🔍 实时信息查询 → GitHub API Tool
- 🌐 外部资源查询 → Web Search Tool
-
混合检索:向量检索(语义理解)+ BM25(关键词匹配)+ RRF
- 主实现:
src/retrieval/hybrid.py的HybridRetriever(indexer)
- 主实现:
-
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
└─ 综合答案:完整回答两个子问题
- 核心业务代码: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 行
- 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
→ 难度:困难(多跳推理 + 多工具编排)核心创新:生产级LLMOps能力,可观测性+评估+可靠性
-
可观测性(Observability)
- LangFuse分布式追踪(280行tracer.py)
- 追踪5个核心节点:查询分析/检索/评分/生成/校验
- 性能监控:P50/P90/P99延迟分布
- 成本追踪:Token消耗实时监控
-
评估体系(Evaluation)
- RAGAS 4指标:Faithfulness/Answer Relevancy/Context Precision/Context Recall
- 150条标准评估集
- 自动化评估流程
-
可靠性(Reliability)
- 3层降级策略:缓存 → 本地模型 → 人工兜底
- 熔断器机制:防止级联失败
- 可用性:99.5%
-
成本控制(Cost Control)
- Token追踪:识别最慢节点(350行)
- 瓶颈优化:doc_grader从2000ms降至800ms
- 整体成本降低:64%
技术指标:
- 核心代码:810行(observability/reliability/cost_control模块)
- 响应时间:<1.5s(P50: 1.2s, P90: 2.0s)
- 可用性:99.5%
核心创新:5个增强检索优化,准确率从88%提升至95%
-
问题拒识(QueryValidator)
- 4层过滤规则:长度检查 + 恶意检测 + 闲聊检测 + 有效查询识别
- 拒识准确率:85%(闲聊/恶意查询)
- 防护prompt injection攻击
-
多路推理(MultiPathRetriever)
- 3路径并行检索:simple(向量)+ smart(查询优化)+ expanded(查询扩展)
- RRF融合排序
- 召回率提升:88% → 92%(+4个百分点)
-
ColBERT重排(Reranker)
- Cross-Encoder精排序
- Top-5准确率:88% → 95%(+7个百分点)
-
Web兜底(WebSearchFallback)
- 检索失败时自动Web搜索
- 覆盖率:100%(无答案场景降至0%)
-
模式切换(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%)
动态工具路由: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% ⭐
7 层 LangGraph Pipeline:
Query Analysis → Retrieval → Doc Grading → Generation
↓ (Corrective RAG 纠错循环)
Fact Checking → Conflict Detection → Final Answer
↓ (Self-RAG 自我反思)
核心机制:
- Corrective RAG:文档评分不相关 → 改写查询重试 → Web 搜索兜底
- Self-RAG:事实校验失败 → 重新生成 → 冲突检测
- 幻觉检测:答案包含检索上下文没有的信息 → 触发兜底
实测效果(150 条评估集):
- 幻觉率:8%(12/150 出现幻觉)
- 幻觉检测准确率:92%(11/12 检测出)
- 自动纠错成功率:82%(9/11 重新生成后正确)
对比测试(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)
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
Corrective RAG纠错循环:Query Analysis → Retrieval → Grading → Query Rewrite → Retrieval(最多3次)
Self-RAG自我反思循环:Generation → Fact Checking → Regenerate → Generation(最多2次)
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
ReAct循环:Reasoning(选择工具)→ Acting(执行)→ Observation(评估)→ Reflection(决定继续或结束)
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.pyCircuitBreaker 实现。GPU 加速和分层存储为实验性功能,非默认集成。
- 展示网站: https://alelasi.github.io/deep-rag/
- 在线 Demo: Railway 部署,链接见展示网站
- 源码仓库: https://github.com/Alelasi/deep-rag
# 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.jsonpytest tests/ --cov=src --cov-report=html
# 查看报告:open htmlcov/index.html测试统计(诚实口径):
- 用例数量随仓库演进变化,以最新
pytest输出为准 - 历史「100% 覆盖 / 113 全过」未与当前代码绑定
- 优先保证
test_self_rag_route与可运行 demo
| 数据库 | 写入速度 | 相对最慢 | 类型 |
|---|---|---|---|
| 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 | 持久化 |
| 方法 | Top-5 准确率 | 提升 |
|---|---|---|
| 纯向量检索 | 78% | 基线 |
| BM25 + Vector + RRF | 88% | +10% |
| BM25 + Vector + RRF + Reranker | 92% | +14% ⭐ |
- Agentic RAG 动态路由:首次将 Agent 决策机制引入 RAG 检索,根据查询类型动态选择最佳工具(纯 KB 查询 vs 实时信息 vs 混合场景)
- 两阶段混合检索:BM25 + 向量检索 + RRF 融合 + Cross-Encoder 精排,Top-5 准确率提升 14%
- Self-RAG 自我反思:文档评分 + 事实校验 + 冲突检测,幻觉检测准确率达 92%
- 分层存储优化:FAISS 热缓存 + LanceDB 冷数据,内存占用降低 90%,检索速度提升 28x
- GPU 加速索引:PyTorch CUDA 批量嵌入,写入速度提升 66x
- ✅ 100% 测试覆盖率:75 个测试(L0 静态 + L1 单元 + L2 集成)
- ✅ 企业级安全:沙箱隔离 + Prompt 注入防护 + 审计日志
- ✅ 多种接入方式:FastAPI / MCP / Streamlit
- ✅ 完整评测体系:150 条标准评估集 + RAGAS + 分层评测
本项目是 AI Agent 技术验证的三个项目之一:
- deep-rag(本项目)- 技术文档问答 RAG 系统
- job-agent - Multi-Agent 智能求职系统
- self-healing-pipeline - 自愈 CI/CD Agent
欢迎贡献!请阅读 CONTRIBUTING.md
MIT License - 详见 LICENSE
- 作者:王智勇
- 邮箱:3349979156@qq.com
- GitHub:https://github.com/Alelasi
最后更新:2026-06-05