
🧠 图解记忆: Agentic RAG 的核心不是多调用,而是每轮都验证答案声明与证据,并知道何时停止。
💡 答案要点
单次 RAG vs Agentic RAG 的核心区别:
单次 RAG(静态):
用户问题 → 检索 → LLM 生成 → 输出
(一次性,无法自我纠错)
Agentic RAG(动态闭环):
用户问题 → 检索 → 质量评估 → [不够好] → 重查/重写/降级
→ [足够好] → LLM 生成 → 幻觉检测
→ [有幻觉] → 重生成
→ [通过] → 输出三大核心机制详解:
1. 自适应路由(Adaptive Routing)
python
from enum import Enum
class QueryRoute(Enum):
DIRECT_LLM = "direct" # 简单问题,直接 LLM 回答
VECTOR_RAG = "vector" # 通用语义检索
KEYWORD_RAG = "keyword" # 专有名词/精确匹配
HYBRID_RAG = "hybrid" # 复杂问题,混合检索
MULTI_HOP = "multi_hop" # 多跳推理,多轮检索
def route_query(question: str, llm) -> QueryRoute:
"""用小模型做路由判断,成本低"""
prompt = f"""判断以下问题的检索策略,只返回策略名称:
- direct: 常识/数学/无需检索
- keyword: 包含专有名词/型号/人名
- hybrid: 复杂语义+专名混合
- multi_hop: 需要多步推理
问题: {question}
策略:"""
route = llm.fast_complete(prompt).strip() # 用 GPT-4o-mini
return QueryRoute(route)2. 检索质量自评估
python
def evaluate_retrieval(question: str, docs: list[str], llm) -> dict:
"""CRAG 思路:让 LLM 判断检索结果是否够用"""
context = "\n".join(docs[:3])
prompt = f"""判断以下检索内容是否足以回答问题。
问题:{question}
检索内容:{context}
请返回 JSON:
{{"sufficient": true/false, "reason": "原因", "missing": "缺少什么信息"}}"""
result = llm.fast_complete(prompt)
return json.loads(result)
# 使用
eval_result = evaluate_retrieval(question, docs, llm)
if not eval_result["sufficient"]:
# 触发 Query 改写后重检索
new_query = rewrite_query(question, eval_result["missing"])
docs = retriever.search(new_query)3. 幻觉检测 + 自纠正闭环
展开 Python 代码示例(40 行)
python
def hallucination_check(answer: str, docs: list[str], llm) -> dict:
"""事实一致性校验"""
context = "\n".join(docs)
prompt = f"""判断以下回答是否完全基于参考内容,有无编造。
参考内容:{context}
回答:{answer}
返回 JSON:
{{"hallucination": true/false, "score": 0-1, "issues": ["具体问题"]}}"""
return json.loads(llm.fast_complete(prompt))
# 完整自纠正闭环
def agentic_rag_pipeline(question: str, max_retries: int = 2) -> str:
for attempt in range(max_retries + 1):
# 1. 路由
route = route_query(question, llm)
# 2. 检索
docs = retrieve(question, strategy=route)
# 3. 检索质量评估
eval_r = evaluate_retrieval(question, docs, llm)
if not eval_r["sufficient"] and attempt < max_retries:
question = rewrite_query(question, eval_r["missing"])
continue # 重新检索
# 4. 生成
answer = llm.generate(question, docs)
# 5. 幻觉检测
halluc = hallucination_check(answer, docs, llm)
if halluc["hallucination"] and attempt < max_retries:
# 加强约束重生成
answer = llm.generate(question, docs, strict=True)
continue
return answer
return answer # 超过重试次数,返回最后一次结果Agentic RAG 与单次 RAG 效果对比:
| 指标 | 单次 RAG | Agentic RAG | 提升 |
|---|---|---|---|
| 检索召回率 | 67% | 85% | +18% |
| 幻觉率 | 12% | 3% | -75% |
| 问答准确率 | 71% | 91% | +20% |
| 平均延迟 | 800ms | 1800ms | -(代价) |
| Token 消耗 | 1× | 2.3× | -(代价) |
适用边界(什么时候不用 Agentic RAG):
- ✅ 专业领域知识库(金融/法律/医疗),准确率要求高
- ✅ 复杂多步推理问题
- ❌ 简单 FAQ 场景,延迟和成本代价不划算
- ❌ 实时性要求极高(<500ms),额外评估步骤吃不消
面试话术:
"Agentic RAG 的核心是'闭环'思维——不是一次检索定终身,而是让系统能自我判断'检索够不够用,答案可不可信'。我实现的自纠正流程有三个关键节点:检索后用小模型做充分性评估,不够就改写 Query 重检索;生成后做幻觉检测,不通过就加强约束重生成;最多重试 2 次,超限降级返回'无法确认'。代价是延迟翻倍、Token 消耗增加 2 倍,但在金融场景幻觉率从 12% 降到 3%,这个成本完全值得。"
版本: v3.128 | 更新: 2026-07-02 | 补充 Agentic RAG 自适应路由/幻觉检测/自纠正闭环
版本: v2.13 | 更新: 2026-05-08 | by 二狗子 🐕