RAG-06模块评估-Modular-RAG

本文属于 RAG 工程框架中的「6 模块化架构与评估闭环」环节,聚焦「Modular RAG」方法。可先阅读 RAG-00.方法概述 再进入本篇。

原理

把 RAG 拆成可插拔模块,通过统一接口连接,支持 A/B 与灰度替换。

1
2
3
4
5
6
7
8
flowchart LR
In[文档输入] --> C[Chunk 模块]
C --> I[Index 模块]
Q[Query] --> R[Retriever 模块]
I --> R
R --> RR[Rerank 模块]
RR --> G[Generator 模块]
G --> Out[答案]

模块划分建议

  • 离线链路:清洗、切块、嵌入、索引。
  • 在线链路:查询理解、召回、重排、生成、后处理。
  • 观测链路:日志、评估、告警、回滚。

优缺。

  • 优点:组件可替换;便于团队协作;可快速定位瓶颈。
  • 缺点:系统边界多,接口设计要求高。

性能/资源

  • 组件拆分后可独立扩缩容。
  • 初期开发时延增加,但长期维护成本下降。

应用场景

  • 中大型企业 RAG 平台。
  • 需要频繁迭代模型/索引策略的团队。

统一合成数据示例

输入数据片段

1
2
3
4
5
6
{
"experiment_id": "exp-20260326-01",
"variant_a": "dense+bm25+rerank_v1",
"variant_b": "dense+bm25+rerank_v2",
"eval_queries": 120
}

中间结果(离线评测)

1
2
3
4
{
"A": {"recall_at_10": 0.82, "mrr": 0.71, "p95_ms": 820},
"B": {"recall_at_10": 0.86, "mrr": 0.75, "p95_ms": 860}
}

最终输出示例(上线决策)

1
2
3
4
5
{
"decision": "灰度发布 variant_b",
"reason": "质量提升明显,时延增加可接受",
"guardrail": {"max_p95_ms": 900, "min_recall_at_10": 0.84}
}

原始发表与工程实现

  • 代表性原始发表:模块化 IR+LLM 工程实践。
  • 核心解决问题:解决可替换可演进架构。
  • 成熟实现工具:Haystack, LangChain, LlamaIndex。

详细原理拆解

  • 模块接口稳定化,支持组件替换、A/B 与回滚。
  • 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
  • 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1
2
3
4
5
flowchart LR
In[输入 Query 与知识] --> Core[方法核心计算]
Core --> Rank[匹配/路由/排序]
Rank --> Build[证据组装]
Build --> Out[答案与引用]

工程落地扩展示例

伪代码

1
2
3
4
5
6
7
8
class RagService:
def __init__(self, retriever: Retriever, reranker: Reranker, gen: Generator):
self.retriever, self.reranker, self.gen = retriever, reranker, gen

def answer(self, q):
cands = self.retriever.retrieve(q)
ranked = self.reranker.rank(q, cands)
return self.gen.generate(q, ranked)

参数示例

1
2
3
4
5
interface_version: rag.v2
feature_flags:
retriever: hybrid_v2
reranker: mono_t5_v1
hot_swap: true

常见失败案例

  • 失败模式 1:模块间 契约不稳(字段名/引用格式变),上线即炸。
  • 失败模式 2:只测单模块不测 端到端,接口内最优≠系统最优。
  • 失败模式 3:回滚只切模型不切 索引版本,状态不一致。

Demo 数据带入计算示例

1
2
在固定 Reranker+Generator 下,仅替换 Retriever:recall@10 0.82→0.86,p95 820→860ms。
门禁 max_p95=900ms 仍通过 → 说明 **模块化对比的是可替换边界上的增量**,而非整条链路重训。
-------------本文结束感谢您的阅读-------------