简介:当检索从相似度匹配转向由决策模型沿语料层级逐步判断,评测重点也随之改变。本文梳理这类决策式检索方案的评测目标、维度设计与验证方法,帮助开发者与架构师判断其在证据定位、检索延迟、语料依赖与成本上的真实表现,明确适用边界与选型建议。
传统 RAG 系统的典型链路是:Query → 基于词频的稀疏检索或向量相似度检索 → 重排(Reranker)→ 生成模型(Generator)。这条链路存在一个结构性张力:生成模型的语义理解与推理能力越来越强,但它最终能看到哪些证据,取决于前置检索器。一旦正确证据在第一阶段就被漏掉,后续再强的重排或生成通常也无从挽回。
本文要评测的对象,是一类用决策模型(Decision Model)替代或前置于相似度匹配的检索方案。它的核心思路是:不再主要依赖 BM25 类词频算法或 Embedding 相似度来找证据,而是利用具备语言理解能力的模型,沿着语料的层级结构(主题 → 文档 → 段落)逐步做判断——哪些主题值得探索、哪些文档可能含答案、哪些段落真正值得返回。
本文的读者主要是:构建 RAG 应用的开发者、负责技术选型的架构师、以及需要评估检索质量对业务影响的技术负责人。需要强调的是,本文不是简单判断”好不好”,而是给出一套可复用的评测框架,帮助读者结合自身场景、数据规模、成本与维护需求做综合判断。
针对这类决策式检索方案,本次评测重点回答以下几个问题:
为便于对比,我们把被评测对象拆成三类典型方案:
方案 C 想同时解决三个问题:一是相似度匹配识别不出复杂查询真正需要的证据(例如需要多跳推理的问题);二是重排只能对第一阶段候选重排、无法找回被漏掉的相关文档;三是 Agentic 检索虽能逐步推理,但延迟与成本高。方案 C 的赌注在于:让语言模型的理解能力以低延迟、非生成的方式参与检索全过程。
举一个说明检索难点的例子:用户问”某导演在 2000 年执导的影片,主角是谁”。正确的证据链需要先识别导演身份、锁定 2000 年这一年份约束、定位到对应影片,再抽取主角。纯词法检索容易因为另一部同时期影片在”2000 年””电影”等词上高度匹配而被优先返回,导致证据链起点就错了。
| 维度 | 关注点 | 验证思路 |
|---|---|---|
| 检索有效性 | 首位证据命中、证据召回率、精确率 | 用带标注答案的样本集统计 hit@1、recall@k |
| 检索延迟 | 单次查询端到端耗时、决策步数 | 记录各层决策耗时,与传统/Agentic 基线对比 |
| 吞吐与并发 | 并发下的稳定处理能力 | 逐步加压观察延迟分布与错误率 |
| 决策质量 | 层级路径判断正确率、误剪枝率 | 人工核对决策路径,统计被剪掉的相关证据 |
| 稳定性 | 异常/歧义查询、边界输入 | 注入模糊问题、超长问题、无答案问题 |
| 语料结构依赖 | 层级划分质量的影响 | 对比结构化语料与扁平语料的差异 |
| 可观测性 | 决策路径是否可追溯 | 检查日志是否记录每一步决策依据 |
| 成本 | 决策调用次数、资源占用 | 统计单位查询的平均决策次数 |
在动手前必须固定以下条件,否则结论不可比:
建议按”定目标 → 建基线 → 分维度验证 → 控变量 → 记录过程 → 分析边界 → 给建议”的流程推进。
先以方案 A 作为基线,在相同条件下记录 hit@1、recall@k 和延迟分布;再把方案 C 和方案 B 放入同一评测框架对比。
决策式检索的流程可用如下通用伪代码描述:
# 决策式检索:沿语料层级逐步做非生成式相关性决策def decision_retrieval(query, corpus_tree, decision_model):selected = []# 第一层:主题/大类决策topics = decision_model.rank_decisions(query, corpus_tree.topics)for topic in topics: # 仅保留被判为相关的主题# 第二层:文档级决策docs = decision_model.rank_decisions(query, topic.documents)for doc in docs:# 第三层:段落级决策passages = decision_model.rank_decisions(query, doc.passages)selected.extend(passages) # 仅返回被判为真正相关的段落return selected[:top_k]
评测框架则统一度量有效性与延迟:
def evaluate(approach, queries, gold_evidence, k):records = []for q in queries:t0 = now()retrieved = approach.retrieve(q, top_k=k)latency = now() - t0records.append({"hit@1": hit_at_rank(retrieved, gold_evidence[q], rank=1),"recall": recall_at_k(retrieved, gold_evidence[q], k),"latency": latency,})return summarize(records) # 聚合命中率、召回率、延迟分位数
此外,务必单独做误剪枝测试:统计被层级决策过滤掉、但标注答案确实位于其中的比例。这是决策式方案最容易”看着快、其实错”的地方。
结果要看三个信号:
需要提醒的是:这些结论都有条件边界。命中提升可能来自更细的语料分层,而非决策模型本身;延迟优势在决策步数受控时才成立。若语料本身是扁平的,决策式方案的层级优势会大幅削弱。
决策模型驱动的检索方案,把”找证据”从相似度匹配转为沿语料层级的逐步判断,其价值能否兑现,取决于三个可验证条件:证据召回是否真的提升、延迟是否真的可控、误剪枝率是否可接受。本文给出的评测框架——从有效性、延迟、决策质量、语料依赖到成本,配合基线对照、误剪枝测试与决策路径日志——正是为了帮助读者在自身场景下判断这类方案是否值得引入。结论是条件化的:结构清晰、多跳复杂的场景更可能受益,扁平简单场景则需权衡额外成本。评测的意义不在于给出”最好/最差”的绝对判断,而在于明确每项能力的适用边界与代价。