Speculative RAG详解:用草稿-验证机制降低大模型RAG延迟与成本

发布时间:2026/10/21 7:05:45
Speculative RAG详解:用草稿-验证机制降低大模型RAG延迟与成本 先打个比方你自己写一篇文章是不是先拉个提纲、打个草稿再让主编看一眼定稿Speculative RAG干的就是这件事。它在RAG流水线里加了一个“草稿-验证”环节用小而快的模型基于检索到的文档快速产出多条候选推理路径再由大模型只做“打分、择优、必要时补改”的轻量验证。这篇文章会把这套机制的原理、核心参数、落地选型和适合的业务场景一次讲透。做知识问答、客服机器人、企业知识库对延迟和答案质量同时有要求的朋友这篇文章值得看完。1. 从传统RAG到Speculative RAG瓶颈在哪思路怎么变1.1 传统RAG为什么又慢又容易跑偏传统RAG的套路很简单用户丢一个问题进来检索器从知识库里召回十来个文档片段全部拼接成一个超长Prompt塞给大模型让它“根据以上内容回答”。这个流程有三个非常要命的毛病。第一个是上下文越长注意力越容易“迷路”。大模型并不是真的在“读”每一个文档它是在海量的注意力计算里寻找跟问题相关的信号。文档一多尤其是中间位置的文档经常被忽略这在业界已经是共识了。你的检索结果明明有正确答案大模型却偏偏引用了一段不痛不痒的背景介绍答得模棱两可。第二个是自回归生成只能一条路走到黑。大模型生成答案是一个token一个token往出吐的一旦前几句话把方向带偏了后面的输出要么将错就错要么弯弯绕绕半天想兜回来结果越绕越远。你不可能像人写文章那样划掉重来。第三个问题大家都懂——慢。大模型每吐一个token都要做一次完整的正向计算Prompt里塞的文档越多首token延迟越高生成越长总延迟越不可控。很多RAG上线后跑不出“对话感”就是因为用户问题已经发出去三四秒了界面还在转圈。这三个问题本质上指向同一个矛盾让最强的模型去干所有的事。检索的质量它要兜底推理的过程它要保证最后的输出表达它还要负责。大模型再聪明被铺天盖地的上下文一淹照样翻车。1.2 Speculative RAG的灵感来源从Token级的“草稿-验证”到答案级Speculative RAG的思路并不是凭空冒出来的。它借鉴了LLM推理加速里一个非常成熟的方法——推测解码Speculative Decoding。推测解码是这样运作的先用一个很小的草稿模型按正常自回归方式快速生成一串候选token然后让大模型去验证这串token。如果大模型认可就直接接受这段输出相当于一次跳过了很多步如果不认可就在出错的token位置停下来从那里重新生成。本质上是把“生成”和“验证”拆给两个模型分工完成。毕竟小模型算得快大模型判断得准。Speculative RAG把这个思想从“token层面”提升到了“推理路径层面”。注意它猜的不是下一个词而是一整条回答的思考路径。具体来说面对一个query我们不要求大模型直接回答而是先让草稿模型基于不同的文档子集并行生成多条完整的候选答案——每条候选答案对应一个“如果从这批资料出发这个问题该怎么答”的推理草稿。然后再把这一批草稿交给大模型大模型不需要从头生成只需要看看每条草稿跟对应的文档是否吻合、跟问题是否对得上打个分挑出最合理的那个必要时再动手补几笔。用个生活化类比会非常好懂。你要写一份市场调研报告传统的做法是让一位资深专家独自把所有资料从头翻到尾然后一口气写完。专家的能力确实强但资料一多看漏关键数据、中间思路跑偏、反复返工都是常事。Speculative RAG的做法是让几个实习生每人拿一部分资料分头写初稿各自从不同角度切入然后专家不重新写只看这几份初稿对比哪份角度更好、哪份证据更扎实选一份最靠谱的再让它改两笔就交付。行家出手的时间被压到了最低但质量反而因为“多条路线备选”变得更有保障。1.3 多了一层生成凭什么反而更快很多人的第一反应是多让一个小模型生成好几条候选答案工序明明变多了怎么会更快关键在于开销分布。大模型和小模型的速度差距通常是几倍到十几倍而多条候选答案在小模型那里是可以通过批处理并行生成的——你把五条草稿的任务塞进同一个batch在显存允许的范围内解码时间并不会线性增长。真正贵的是验证模型的输出token而Speculative RAG恰恰把大模型的输出从“几百个token的完整回答”压缩到了“每个候选打个分”的量级。你算一笔账就清楚了大模型直接写200个token和让它读5条候选答案后输出30个评价token哪个贵另外验证阶段因为看到了候选答案就不需要再“重新发明轮子”。它做的事情是检查、判断、微调比凭空生成要容易得多质量自然也更稳。这才是Speculative RAG能同时优化延迟、成本和准确率的底层逻辑。2. Speculative RAG的运行机制拆解三层各司其职2.1 第一层检索与文档分组先解决“材料”问题Speculative RAG并没有改变检索这个地基但它在检索结果的使用方式上做了关键调整不把全部文档塞进同一个上下文而是先对文档做分组。为什么必须分组检索器召回的一二十个文档片段往往来自不同的章节、不同的页面甚至不同来源。它们有的讲原理有的讲案例有的只是一笔带过。全部塞进同一个Prompt草稿模型很容易被互相矛盾的表述搞糊涂生成出来的候选答案也会显得“精神分裂”——前面在说A后面又跳到B。分组操作不需要搞得很复杂我用过的方案基本是两类。一类是用embedding对检索到的文档做简单聚类比如KMeans聚成3~6簇每一簇代表一个主题方向另一类是更粗放的做法直接按检索得分排序后切块比如top_k24份文档每6份一组切4组。这两种做法我都试过效果差异不大真正关键的是让每个组内的文档有一定一致性。分组数量一般落在3~6之间组数太少候选之间没什么区分度组数太多每组材料不够候选答案可能连证据都引不全。文档分组直接决定了候选答案的多样性天花板。如果五个组都是从同一个话题切出去的那后面生成多少条候选路径都没用本质上还是一种答案。所以分组这一步看着不起眼却是整个Speculative RAG里最容易被低估的环节。2.2 第二层草稿模型采样生成多条推理路径分组完成之后轮到草稿模型上场了。草稿模型是哪个它通常是一个规模明显小于验证模型的生成模型7B到13B这个区间的开源模型很常见。它不需要是“最强”的但最好是指令遵循能力强、还不会胡说八道到离谱的那种。使用方式是对每一组文档子集各生成至少一条候选推理路径。这里有一个多数人第一次容易犯的错把temperature调得太低。在传统单路生成里我们为了稳定总是把temperature压到0.1、0.2左右但Speculative RAG要的是“多样性”如果所有路径都是从同一个概率分布里挑出最稳的那个序列那五条候选答案会高度相似验证阶段相当于没得选。实操里我一般把temperature放在0.8到1.0之间个别场景甚至放到1.1让草稿模型敢于走不同的推理方向。除了采样参数草稿模型做多轮生成时最好先把query相关的公共知识压缩出来再结合文档写答案。还有一个细化技巧让草稿模型先输出推理链再输出结论。这个推理链在验证阶段非常有用——大模型看到“这个答案是怎么推出来的”远比只看一个孤零零的结论更容易判断它靠不靠谱。候选路径的总数N一般取3到5的倍数关系。注意N并不是越大越好。候选多了选择空间大了但验证模型的判断负担也大了而且草稿模型的能力上限就摆在那里再多个数也只是在同一个水平线上反复横跳。2.3 第三层验证模型打分与择优把“写”变成“选”验证模型就是那棵“终审专家大树”通常是一个能力强一截的大模型。它在这个阶段拿到的输入是(query, 文档子集, 候选答案)要输出的是“这条候选答案的可信度分数”。分数打分的方式我实际用过的有三类各有优缺点。最常见的是概率打分把候选答案按特定模板拼到Prompt里计算验证模型生成答案时的对数概率再除以答案长度做归一化。这个分数衡量的是“在模型眼中这个答案在给定证据下是否顺理成章”。第二种是把多个候选放在一起两两PK让验证模型直接输出“哪条更合理、为什么”。这种方式比较吃Prompt的写法但效果往往更直观尤其适合候选答案风格差异特别大的时候。第三种是绝对阈值判断当最佳候选的分数低于某个预设阈值时验证模型进入精修模式如果高于阈值直接输出候选答案。这个方法最实用因为不是每次都要走到精修那一步大部分时候验证模型完成打分后就能拍板。这里有一条红线要提醒验证模型打分的时候Prompt里只应该放这条候选答案对应的那份文档子集绝不能把所有文档都丢进去。你一旦把所有文档都塞进验证Prompt就让大模型重新回到了“被无关信息干扰”的老路上Speculative RAG辛辛苦苦建立的“隔离带”就失效了。2.4 精修兜底分数不够时验证模型怎么改尽管我们做了分组、给了多条候选还是可能出现所有候选答案质量都不高的情况。这时候就需要精修机制兜底。精修不等于重写。如果验证模型每次都从头写一遍答案那Speculative RAG省下的成本又全吐回去了。我的做法是给精修设置明确的token预算。比如最多生成200个token只允许在候选答案的基础上做局部改动禁止推翻重来。还有一种精修策略是让验证模型融合多个候选的优点这在多跳推理里特别有用A候选讲了某公司的财务数据B候选分析了行业背景验证模型可以把两者合并成一份更全面的回答。需要盯住精修率这个指标。所谓精修率就是所有请求里有百分之多少触发了精修流程。正常情况下这个比例应该在20%到30%以下。如果精修率长期超过50%说明草稿模型的能力已经配不上验证模型了这时候该升级的不是验证模型而是草稿模型或者文档分组策略。这个观点很多人一开始不理解总想着把钱花在最大的模型上实际上瓶颈经常出在草稿那端。3. 动手落地技术栈选型、核心参数与效果估算3.1 技术栈怎么选草稿模型和验证模型怎么配先明确一个事实Speculative RAG不是一个开箱即用的现成组件而是一套需要你手动编排的架构。好在每个环节都有相当成熟的开源组件可以拼装。检索层选型我不过多展开常用的向量检索方案配合重排器是最稳的搭配。重排器非常推荐加上因为它能明显提升进入分组的文档质量草稿模型生成候选答案时的“原材料”更干净后面所有环节都会受益。草稿模型这边我建议从13B级别的开源模型起步量化到4bit之后跑在消费级显卡上压力也不大。如果业务场景特别垂直花几天时间对草稿模型做一次轻量的领域微调是非常划算的投资——这个模型承担了绝大部分生成量它的质量每提升一点大模型的精修压力就下降一大块。另外草稿模型不一定要和验证模型来自同一家族。我搭过的系统里草稿模型和验证模型来自不同厂商也完全跑得通因为验证阶段本质是打分判断并不要求模型能力同一源。不过Model Family一致时概率打分的分布会更稳定这一点在调阈值的时候会省心很多。验证模型的选型取决于你的预算和延迟目标。如果走商用API建议把验证Prompt写得尽量结构化让输出固定在“分数意见是否精修”的格式上方便程序解析。如果是自部署的大模型建议开足批处理验证阶段天然适合batch推理。3.2 核心流程伪代码把思路落成可复用的骨架整个系统最核心的控制逻辑可以用几段伪代码说清楚。以下是我用过的一个简化版本不含具体依赖库只演示流程骨架def speculative_rag(query, retriever, draft_model, verify_model, n_groups4, candidates_per_group2, verify_threshold0.6): # step 1: 检索并分组 docs retriever.retrieve(query, top_k24) doc_groups cluster_into_groups(docs, n_groupsn_groups) # 每组约6篇 # step 2: 草稿模型为每组生成候选推理路径 candidates [] for group in doc_groups: prompt build_draft_prompt(query, group) paths draft_model.generate( prompt, num_return_sequencescandidates_per_group, temperature0.9, top_p0.95 ) for path in paths: candidates.append({answer: path, group: group}) # step 3: 验证模型打分 scored [] for cand in candidates: score verify_model.rank(query, cand[group], cand[answer]) scored.append((score, cand)) scored.sort(keylambda x: x[0], reverseTrue) best_score, best_cand scored[0] # step 4: 低分触发精修 if best_score verify_threshold: answer verify_model.refine( query, best_cand[group], best_cand[answer], max_new_tokens200 ) else: answer best_cand[answer] return answer这个骨架很简单但它的价值在于把Speculative RAG的四个关键决策点都暴露了出来怎么分组、草稿模型怎么采多条路径、验证模型怎么打分、精修在什么条件下触发。你后面调优就是分别调这四个位置的参数。3.3 三个关键参数的选择依据N、分组数、验证阈值第一个候选路径总数N。N等于分组数乘以每组采样数。以四组、每组两条为例N8这意味着验证模型要为8条候选打分。N太少选择空间不够N太多验证阶段的计算量线性上升而且草稿模型生成的收益边际递减。我实测下来候选总数在6到10之间是个甜点区间。你如果用的是商用API打分按token计费候选总数更要控制便宜的小模型生成几十条没关系大模型每条打分都记账。第二个是分组数。分组数首先要受限于检索文档总数你一共召回了24篇文档非要分8组每组只有3篇材料严重不足。其次分组数要和问题复杂度挂钩。简单的单跳问题三组就够用复杂业务问题或者需要交叉验证的多跳问题五到六组更合适。第三个是验证阈值。这个值本质上是“草稿质量的容忍度”。阈值设0.5会让大部分候选被直接采纳系统快但可能有点糙设0.7会频繁触发精修精度上去了延迟和成本也上去了。我习惯从0.6起步然后盯住精修率做调整精修率太高就降阈值答案质量反馈太差就升阈值。下表是我给一个内部Demo做过的一组参数对比数值仅供参考但趋势很清楚候选总数N分组数验证阈值大模型精修触发率单请求端到端延迟相对传统RAG延迟420.6约18%约1.4倍基线略高630.6约25%约1.1倍基线接近持平840.6约35%约0.7倍基线明显更低1050.7约45%约0.8倍基线有改善但边际递减看这个表你会发现一个反直觉的点候选N增加到一定程度收益反而被精修率和验证成本吃掉。这正好印证了前面的判断——Speculative RAG不是“把N调大就完事”而是整个流程的平衡。3.4 延迟与成本怎么科学估算而不是拍脑袋很多人在草稿阶段就被劝退“这不就是多了一次完整的小模型生成吗怎么可能省时间”所以我建议你按下面的步骤自己估算而不是听别人说。先测基线。拿你的真实任务统计传统RAG里大模型生成答案的平均token数记作T_base以及每token的平均耗时。延迟基线就是Prompt处理时间加上T_base乘以单token耗时。再测草稿层。统计草稿模型完成所有候选路径生成的总耗时。注意这里测的是批处理后的总耗时不是单条路径的耗时乘路径数——因为多条路径是并行生成实测耗时增长远小于线性增长。比如8条路径的批处理耗时就只有单条的1.5倍左右。最后测验证层。统计验证模型平均输出token数包括打分token和精修token。验证模型单token速度比草稿模型慢很多但因为输出token少总时间往往还小于草稿层。举个例子假设基线大模型生成200个token单token耗时50ms加上Prompt处理总延迟约11到12秒。Speculative RAG这边草稿模型批处理生成8条路径约2秒验证模型打分输出30个token约1.8秒有30%概率需要精修100个token算上精修期望耗时约30%乘以5秒等于1.5秒总延迟约5.3秒。这就是一个很典型的收益结构。你的数字可能不一样但计算方法通用。成本方面更直观小模型每token成本通常比大模型低一个数量级而大模型的输出token从200降到了几十成本下降是很实在的。如果你的业务调用量大这一层优化省下来的钱可能比换一个更便宜的API套餐还要多。4. 典型应用场景哪些业务真的适合用这套方案4.1 知识密集问答和多跳推理场景知识密集问答是Speculative RAG最对口的主场。典型的问题形态是“A公司的B产品对C行业有什么影响”这种需要把多个文档里的信息串联起来做推理。传统RAG做一个全文档拼接容易把模型带偏Speculative RAG通过文档分组让不同候选路径沿着不同的线索走。比如A路径只关注A公司产品本身B路径只关注C行业背景验证模型再看哪条路径更能解释两者的联动关系。这种情况下候选路径的多样性价值会被放得特别大。我见过不少案例传统RAG给出的是“A公司发布了B产品”这种平铺直叙的回答而Speculative RAG里有一条候选路径会把B产品的功能特性与C行业的典型痛点挂钩最后被验证模型选出来答案的洞察深度完全不一样。4.2 高并发客服系统和企业知识库客服类业务对两件事的要求几乎不可妥协响应快、口径稳。传统的RAG流程在高峰期容易被大模型的生成时长拖垮导致用户等待超时。Speculative RAG值得考虑的原因在于它把整体的算力压力从“一棵大树”分散到了“一棵小树在前、大树在后”的两级架构上。你甚至可以为草稿模型单独做一波扩容因为草稿模型便宜扩起来没心理负担相对地验证模型的调用次数被限制在“打分偶尔精修”并发压力大大缓解。在实际部署的时候我建议给客服场景单独维护一个候选路径缓存。同一个问题被不同用户反复问是客服系统的常态把(query, 文档分组, 候选答案, 验证分数)缓存下来下次完全可以直接返回最优答案连验证模型都不用调。这个优化听着朴素实际收益却比任何花哨的算法参数调优都大。4.3 长文档解读研报、财报、法律文书抓重点长文档解读对成本和准确率的双重要求是出了名的。传统做法是把长文档切成一堆切片然后一股脑塞进上下文结果经常是模型对每个切片都是浅尝辄止重点信息反而被淹没。Speculative RAG的文档分组在这里体现出了特殊价值——每个分组只关注长文档的某个局部范围草稿模型可以在这个局部里做更充分的消化产出的候选答案对细节的捕捉更到位。而且验证模型打分的时候看到的只是“候选答案对应的文档子集”并不需要读完整份长文档。对API计费服务来说这意味着每次请求的输入token大幅下降而输出token又因为只做验证而保持低位。长文档解读是最能体现Speculative RAG“以少量思考换取大量token”这种经济性的场景。4.4 垂直领域法规解析与内部知识问答在金融、医疗、法律这类强合规场景里答案的依据比答案本身更重要。Speculative RAG天然适合这类场景因为每条候选答案都可以和它对应的文档子集绑定验证模型判断的时候可以检查“这个答案到底是不是从这几份文档里推出来的”而不是像传统RAG那样错了都不知道错在哪。一旦业务侧追问某个结论的依据你可以把候选答案对应的文档子集整段翻出来给对方看可解释性直接拉满。这种场景里我强烈建议让草稿模型在生成候选答案时同步输出引用了哪几条文档原文的编号。验证模型在打分时看到这个引用标记判断会更准确你拿到最终答案后也能顺着引用标记做人工复核。这只是输出格式上的一个小改动却能把整个流程的可信度提一个量级。5. 踩坑记录常见问题、排查思路与经验技巧5.1 草稿模型太弱候选路径全军覆没怎么办最典型的症状是精修率长期超过50%验证模型几乎每一个请求都在动手改写。很多人这时候的第一反应是换更贵的验证模型其实是方向错了。真正该做的是先把草稿模型的质量提上来。我的排查顺序是这样的先随机翻几十条候选答案看它们是不是在认真地围绕query作答。如果候选答案看起来像复读机或者答非所问那就是草稿模型能力不够换更大的草稿模型或者做领域微调。如果候选答案本身有内容但经常漏细节那问题多半出在文档分组上——每组材料太少或者分组不够聚焦。最后才考虑调整验证Prompt让验证模型把“与问题相关的部分”和“与问题无关的部分”分别拆开来给分。反正一句话草稿层是水验证层是船水不够深船怎么都抬不起来。5.2 验证模型打分有长度偏见长答案总是得分高这是打分机制里最隐蔽的问题。验证模型在对比两条候选答案时很容易把“更长的、看起来更完整”的那条打高分哪怕它里面的有效信息并不多。词汇都堆砌起来了实际论证却是空的。这个问题在概率打分里尤其明显因为长答案的对数概率天然更高。对策非常简单有效归一化。在对数概率打分时分数除以答案长度的幂次幂次一般取0.6到1.0之间自己用历史数据抽几组样例标一下就能找到最优值。如果是用两两PK类打分就在验证Prompt里明确写上“优先选择内容精炼、证据充分、废话最少的答案”效果也行。5.3 文档分组失败候选答案高度同质化这个问题比草稿模型弱还要隐蔽因为它不会直接爆出高精修率而是表现为“答案看着没毛病但和传统RAG没啥区别多样性的优势完全没发挥出来”。排查方式可以做一个简单的相似度检验把草稿模型生成的多条候选答案做两两相似度计算如果他们都撞在0.85以上基本上就是分组失效了。可能原因是检索文档本身高度重叠或者是做聚类时簇间分离度不够。对策是根据文档语义进一步细分主题或者在分组前先把重复度高的文档去重。另外别忘了把草稿模型的temperature调高一点有时生成相似并不是因为文档重叠而是模型自己就习惯走同一条最稳妥的路。5.4 验证阶段被无关证据带偏打分明显失真我踩过一个比较深的坑验证模型打分时我给它的Prompt里同时放进了候选答案对应的文档子集和全量原始文档。我的本意是让它参考更多背景结果大模型反而被无关信息干扰给一条根本没依据的候选答案打了高分。那个分数高得离谱的场景我至今印象很深——模型完全是看哪条答案写得长、语气像那么回事就选了哪条。后来我严格执行一个原则验证阶段绝不出现候选答案对应分组之外的任何文档。如果确实需要全局信息也是先把全局信息压缩成一个“摘要段”放进打分Prompt而不是把原文铺开。这个原则救了我很多次也让我意识到Speculative RAG中“信息隔离”的价值。它不只是一个效率优化更是一个质量保障。5.5 延迟还可以从哪些细节里抠出来最后分享几个延迟优化的细节。第一个是草稿模型和验证模型尽量部署在同一张卡或者同一批节点上避免设备间拷贝带来的额外耗时。第二个是候选路径的生成尽量充分利用批量推理注意在框架里一次性传入多个生成任务而不是用循环逐个调接口。第三个是精修时把max_new_tokens卡死这既能省时间又可以防止验证模型撒开了重写。第四个是用结构化输出让验证模型直接吐出JSON格式的分数和意见这会极大减少解析和二次处理的负担。这些小碎片的优化单独看都省不了几百毫秒但叠在一起体感差异会非常明显。另外还要提醒一句Speculative RAG的上线最好有灰度对照。把传统RAG和Speculative RAG各跑一部分流量对比答案准确率、延迟、成本三个指标再决定全量切换。这个建议可能在聪明人看来有点多余但我见过不止一次因为分组参数或者草稿模型没调好就全量上线、然后又紧急回滚的事故。技术方案再漂亮上线流程也得一步一步来。我个人实际做完几个项目后的体会是Speculative RAG真正让人舒服的点不单是延迟和成本省了而是你把“生成权”和“判断权”分离之后整个系统就像装了调节阀——想降低成本就调小草稿模型想提升质量就调高验证阈值想加快速度就压缩候选数量。每一块都在可控范围内排障思路也清晰了很多。最后再送你一个小技巧草稿模型生成候选时可以在Prompt里加上一句“请先列出证据要点再基于要点给出答案”这比直接让它写答案更能逼出高质量的中间推理链验证模型的打分也会变得更准确。后续如果想继续折腾还可以训练一个专门用来给候选打分的轻量排序器彻底替代验证模型的打分环节那样就又是一个新故事了。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询