RAG-02索引召回-Retrieval-Router-RAG

本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Retrieval Router(检索路由)」方法。可先阅读 RAG-00.方法概述 再进入本篇。

原理

先识别查询意图与类型,再将查询路由到 dense、sparse、boolean、graph 或 multimodal 召回器。

关键技术/实现路径

  • 查询分类(事实型、规则型、多跳型)。
  • 路由策略(规则或轻量模型)。
  • 失败回退(fallback)与融合。

优缺点

  • 优点:在相同成本下提升平均质量。
  • 缺点:路由错误会带来质量抖动。

性能与资源

  • 路由开销低,收益取决于分类准确率。

应用场景

  • 多类型查询混合的企业知识问答。

统一合成数据示例

输入数据片段

1
{"query":"上海2026差旅报销政策","query_type":"规则过滤型"}

中间结果(路由决策)

1
{"selected_retriever":"boolean+sparse","fallback":"dense"}

最终生成示例(含引用)

1
{"answer":"上海地区2026年执行机票上限2000元。","citations":[{"doc_id":"D10","evidence_span":"机票上限2000元"}]}

原始发表与工程实现

  • 代表性原始发表:Retriever Routing 工程实践。
  • 核心解决问题:解决不同查询类型的检索器选择。
  • 成熟实现工具:RouterChain, RouterRetriever。

详细原理拆解

  • 路由器按查询类型选检索器,近似 r*=argmax P(r|q),保留 fallback 兜底。
  • 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
  • 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1
2
3
4
5
flowchart LR
In[输入 Query 与知识] --> Core[方法核心计算]
Core --> Rank[匹配/路由/排序]
Rank --> Build[证据组装]
Build --> Out[答案与引用]

工程落地扩展示例

伪代码

1
2
3
4
5
def routed_retrieve(query, router, retrievers):
name = router.route(query) # e.g. boolean / dense / graph
if retrievers[name].healthy:
return retrievers[name].search(query)
return retrievers["fallback"].search(query)

参数示例

1
2
3
4
5
6
router: small_classifier_or_llm
routes:
strict_filter: {retriever: boolean_dsl, timeout_ms: 120}
semantic: {retriever: dense_hnsw, timeout_ms: 400}
relational: {retriever: graph_khop, timeout_ms: 800}
default_fallback: semantic

常见失败案例

  • 失败模式 1:路由类别漂移(新问法未覆盖),总进错通道。
  • 失败模式 2:高置信走重型检索器,尾部查询成本失控。
  • 失败模式 3:fallback 与主通道结果分布不一致,下游重排假设失效。

Demo 数据带入计算示例

1
2
P(boolean|q)=0.62 → 选 DSL 预筛(快);若走 dense 需全库向量 780ms,布尔子集检索 510ms。
若 P(graph|q)=0.10 但实为多跳关系题,**路由错误**会导致召回失败——需监控 per-route 命中率。
-------------本文结束感谢您的阅读-------------