拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RAG优化别只盯着Embedding:分块、混合检索与重排序才是关键

RAG优化别只盯着Embedding:分块、混合检索与重排序才是关键

前阵子有个做企业知识库项目的朋友问我:"我现在用的 embedding 模型在排行榜上排二十名开外,要不要直接换一个靠前的?"我反问他:"你的检索结果里,排在前三的片段能直接支撑模型给出答案的比例,你统计过吗?"他愣了几秒,说还真没看过。这个对话几乎是近一年来 RAG 项目现场最常见的缩影。很多人把优化重心压在 embedding 模型选型上,但真正的效果瓶颈往往根本不在那里。所以"Embedding RAG 还值得优化吗"这个问题,我的回答是:非常值得,但你大概率优化错了地方。

1. 先别急着动手:RAG 被质疑的根源到底在哪

1.1 长上下文模型带来的冲击

从 GPT-4 把上下文窗口拉到 128K、200K 开始,"RAG 是不是过渡方案"的讨论就没停过。逻辑很直接:既然模型一次能读几十万 token,那我把文档全部塞进提示词不就完了?检索这一步何必存在。

这个质疑在 demo 阶段确实成立。你给模型喂两本书的内容,它也能回答个大概。但到了生产环境,问题就变味了。首先是成本,200K 上下文意味着每次请求的输入 token 都是天文数字,按 token 计费的商业模型,一次问答烧掉的钱够传统 RAG 跑几十次。其次是延迟,让模型在大上下文里"找"答案,首 token 延迟很容易到十几秒甚至几十秒,用户没这个耐心。还有更现实的数据权限问题——企业内部知识库往往分部门、分密级,你不可能把全部内容无差别塞给模型,但 RAG 可以在检索阶段就做权限过滤。

这三座大山不解决,长上下文方案就只适合"文档量小、预算充足、对延迟不敏感"的少数场景。RAG 依然是企业落地 LLM 的事实标准。

1.2 RAG 的真实生存空间

我自己经手的项目里,RAG 的典型场景有这么几类:客服知识库、工业维修手册问答、法律/合规文档检索、研发内部文档助手。这些场景有个共同特征——知识是动态的,今天可能就有一份新的操作规范入库,明天可能就作废一份旧合同。纯靠模型微调根本跟不上知识更新频率,RAG 的优势恰恰在于知识外置,更新知识库就等于"更新模型"。

更关键的一点是幻觉控制。检索增强的核心价值是"给模型证据",让模型的回答有出处、可溯源。哪怕检索到的片段最后没用上,它也能显著压缩模型胡编的概率。这一点在医疗、法律、财务这些对准确性敏感的行业里,是刚需。

所以 RAG 短期内不会死,但问题也来了:既然大家都还在做 RAG,为什么有的项目效果立竿见影,有的项目检索结果惨不忍睹?

1.3 问题被混淆了:该质疑的是 RAG,还是"你做的那个 RAG"

这些年我复盘了不少跑飞的 RAG 项目,发现一个共性:大部分失败根本不是"RAG 路线不行",而是管线里某个环节做得太糙。最常见的有三种:

第一,文档直接整篇入库,一个 PDF 就是一个向量,检索时模型拿到的是一坨巨大但稀碎的上下文;第二,embedding 模型是从某个开源榜单上随手抄来的,没针对自己的文档领域做任何验证;第三,只做了纯向量检索,完全没有关键词召回和重排序的概念,遇到专有名词、型号编号就哑火。

这些问题的根子不在 RAG 理论,而在工程实现。换句话说,你还没把 RAG 做对,就开始怀疑 RAG 值不值得做。先跑通一个检索质量达标的基线,再谈"优化"才有意义。

2. 拆开 RAG 管线:Embedding 到底决定了什么

2.1 一句话讲清楚 Embedding 在 RAG 里干什么

简单说,embedding 是把文本变成一串向量数字的过程,让语义相近的句子在向量空间里距离更近。RAG 里它承担两个动作:入库时把文档切成片段,每个片段转成向量存进向量库;查询时把用户问题转成向量,在库里做相似度检索,把最相关的片段捞出来。

理解这件事,你才能明白一个关键结论:embedding 决定的是"召回"的上限,而不是"精确"的上限。它负责把"可能相关的片段"尽量全地捞回来,至于捞回来的片段里哪几个真正有用,那是重排序和生成阶段的事。

很多人在这第一步就理解偏了。他们指望 embedding 模型直接给出最精准的那一段,于是反复换模型、调参数,结果召回率没涨多少,反而把管线搞得越来越复杂。

2.2 检索天花板:Embedding 决定上限,但很少是唯一瓶颈

如果检索是一个漏斗,embedding 模型的质量决定了漏斗口能进多少水,但后续的切片策略、索引结构、召回逻辑、重排序,共同决定了最终流出去多少有用的水。这个漏斗的每一层都可能漏水,而你最不该盯着不放的,往往就是进水口。

举个例子。我接手过一个设备维修文档的问答项目,文档是 PDF,里面有大量表格、图注和技术参数。一开始他们用的是当时榜单上非常靠前的 embedding 模型,但效果很差,用户问"XX 型号的油压异常怎么排查",检索回来的片段经常是其他型号的内容。

排查后发现,问题出在 PDF 解析上。原始的解析工具把表格拆得乱七八糟,一个表格的数据被切碎散落在好几个向量片段里,检索时距离最近的那些片段都是碎片,信息不完整。换了解析方案、重新设计切片逻辑之后,同样的 embedding 模型,召回质量肉眼可见地提升了一截。这个案例说明,embedding 模型的天花板很高,但你的管道可能连它的三成功力都没发挥出来。

2.3 分清两个指标:召回率与精确率

做 RAG 优化,必须先建立两个指标的自觉:召回率(Recall)和精确率(Precision)。召回率衡量的是"该捞回来的片段捞回来了多少",精确率衡量的是"捞回来的片段里真正有用的占多少"。

embedding 优化主要影响召回率。如果你换一个更强的 embedding 模型,召回率没有明显变化,那说明瓶颈在别处——比如切片方式把有效信息切碎了,或者文档本身有大量噪声干扰了向量表达。反过来,如果召回率上去了但最终回答质量没改善,那问题可能出在精确率侧——top-k 里混了太多无关片段,把模型带偏了。

这两个指标就是 RAG 优化的"仪表盘"。你做的任何调整,最终都要落到这两个指标的变化上,否则就是无效优化。很多团队把大量时间花在感受"回答好像更好了",但这个"更好"如果无法用检索指标验证,你就不确定它是否可复现、可推广。

3. 真正值得做的优化:检索链路上的四块硬骨头

3.1 分块策略:比换 embedding 模型更划算

分块(Chunking)是整个 RAG 管线里性价比最高的优化点,没有之一。很多项目直接用固定长度切分,比如每 512 个字符一刀切下去,完全不考虑语义边界。结果就是一个完整的技术参数表被拦腰截断,一段操作步骤的前半句在一个块里、后半句在另一个块里。检索时命中了其中一半,另一半丢失,模型拿到残缺信息,自然答不好。

比较靠谱的做法是按文档结构分块。Heading 是一个天然的语义边界,把章节作为切分单位,再对过长的章节按段落继续细分。对于技术文档,还可以考虑基于表格、图表、列表结构做专门的分块规则。

我常用的一个思路是"两层分块":入库时用较小的块做精确匹配,比如正文里提取出的每个要点;检索时把命中的小块连同它所在的大块一起返回,保证上下文完整性。这样既保证召回粒度细,又避免信息碎片化。实现上可以用滑动窗口处理,也可以给每个小块记录它在原文档中的位置信息,召回后做一次"向上合并"。

实测下来,这类语义感知的分块策略,往往能在不换 embedding 模型的情况下把召回率提升 10 到 20 个百分点。这是所有优化里最值得投入的地方。

3.2 混合检索:向量 + 关键词的互补逻辑

第二个高价值优化是引入关键词检索。向量检索擅长语义匹配,但它在精确匹配上天然吃亏:用户搜"XL-2000 型阀门",embedding 可能把语义相近但型号不同的内容一起召回,精确的型号反而被淹没。而传统的 BM25 关键词检索正好相反,它对精确词、编号、型号、缩写极其敏感,但对同义表达无能为力。

把两者接起来就是混合检索。典型做法是向量检索和 BM25 各自召回一批结果,比如各取 30 条,然后用 RRF(Reciprocal Rank Fusion)做融合排序,或者简单地把两类结果按分数加权合并。这样既能抓到"语义上相关但用词不同"的内容,也能精确定位"包含确切产品编号"的段落。

我见过不少项目,加一个简单的 BM25 分支之后,包含型号、编号、合同号这类精确实体的查询准确率直接翻倍。这背后是老生常谈的直觉:用户查一个具体东西时,关键词匹配往往比语义相近更可靠。而 RAG 的场景里有大量这类"具体到不能再具体"的查询。

3.3 重排序:把 Top-k 变成 Top-100 再精排

纯向量检索的 top-k 结果,通常只依据向量相似度打分,这个分数过于粗糙。更稳定的做法是扩大召回面,先取 top-50 甚至 top-100,然后过一个重排序模型,输出更精准的排序结果。

重排序模型通常是交叉编码器(Cross-Encoder),它会同时读入查询和候选片段,做深度语义匹配,打分粒度远细于双塔结构的 embedding 相似度计算。一个典型的管线是:embedding 负责"广撒网",重排序负责"精挑细选"。embedding 给一个候选池,重排序在这个池子里找到最匹配的片段。

成本上,交叉编码器比向量化检索慢得多,但因为只对 top-100 以内的候选做排序,总耗时完全可控。在我的实践中,加重排序之后,最终送入 LLM 的片段质量会有档次上的提升,回答的准确率和引用正确率同步改善。如果预算只允许做三件事,我会选分块优化、混合检索、重排序,而不是纠结 embedding 模型换谁。

3.4 结构化元数据过滤:让 Embedding 只做它擅长的事

最后一块硬骨头是元数据过滤。企业知识库的文档往往自带丰富属性:部门、文档类型、时间范围、产品线、密级。在检索阶段,先用这些元数据做硬过滤,再做向量检索,效果会好得多。

举个例子。用户问"去年华东区的客户投诉处理周期",如果库里同时有全国数据和各区域数据,纯向量检索很可能把无关区域的内容也捞进来。但如果你在入库时给每个片段打上区域和时间标签,检索时先按元数据条件过滤,向量检索的空间立刻小了,精度自然上去。

这里有个实操心得:元数据过滤一定要和切片逻辑配套设计。切片时保留来源文档的属性,向量入库时作为字段存储,查询时解析用户的过滤条件拼进检索请求。做得好的话,不但精度提升,检索延迟也能因为候选集缩小而明显下降。很多人一上来就优化向量检索,却忘了最朴素的先缩小范围再找目标的原则。

4. 这些"优化"听着高级,实际性价比极低

4.1 迷信 Embedding 模型排行榜

排行榜这个东西,看一眼就行,别当真。我见过不止一个团队,为了用某个榜单前三的模型,把代码、向量库、服务全换了一遍,结果效果没涨,还搭进去两周时间。

原因很简单:排行榜的评测集是通用的,比如 MTEB 覆盖了大量英文任务,它的排名反映的是模型在"大众场景"里的平均表现。而你的知识库是特定领域的——可能是工业文档、可能是医学文本、可能是法律文书。一个模型在这类垂直文本上的真实表现,和它的榜单名次没有强相关性。

正确的做法是拿自己的业务数据做评测。我一般搭一个最小评测集:从真实用户日志里抽 50 到 100 个典型 query,人工标注每个 query 对应的标准答案片段,然后用"召回率@k"和"命中率"两个指标,横向对比两三个候选模型。这个流程花一天时间,但得出的结论远比排行榜可靠。模型评测这种事,别人替你做不了,因为领域数据是你们自己的。

4.2 自己训练 Embedding 模型

另一个我劝退的选项是自训练 embedding 模型。除非你是平台型团队、手握海量领域数据和持续投入的预算,否则这条路几乎必亏。训练一个好的领域 embedding 模型,需要清洗数据、构造正负样本对、设计困难负样本采样、做多轮评测调优,整套流程下来的人力成本足够做三次全链路 RAG 改造。

更关键的是,开源 embedding 模型的发展速度远超你的迭代速度。你花两个月微调出来的模型,可能不如刚发布的新一代 base 模型。我见过一个团队花了两个月用几百条样本微调 embedding,效果提升有限,等到换用新版本的基础模型,发现什么都不用调就已经超过了微调效果。这个时间点做自训练,属于拿短板碰长板。

当然,如果你的领域极其特殊,比如甲骨文资料、密文检索,公开模型确实覆盖不了,那另当别论。但在那之前,先把通用模型用明白。

4.3 在召回率已经很高的时候继续折腾向量化参数

还有一类"优化"属于自我感动。有些团队在召回率已经做到 90% 以上的时候,还在花大力气调 embedding 的维度、换相似度算法、试各种距离度量。这些参数调整带来的收益通常只有零点几个百分点,对最终回答质量的影响微乎其微。

这时候真正的瓶颈已经转移到了精确率和生成阶段——top-k 里混入的噪声片段、提示词里没有约束模型只基于检索内容作答、上下文里塞了太多无关信息导致模型注意力分散。与其继续磨向量参数,不如把力气花在重排序、提示词设计和答案验证上。方向比努力重要,这句话在 RAG 优化里体现得特别充分。

5. 检索优化之外:Agentic RAG 正在改变游戏规则

5.1 从"一把梭"到"多轮检索"

传统 RAG 是单轮检索:用户问一个问题,系统检索一次,返回结果,模型作答。这套模式在简单知识问答上够用,但面对复杂问题就露馅了——比如"对比 A 和 B 两款产品在维护成本上的差异",你先得检索出 A 的维护数据、B 的维护数据,还要再找到两者对比的上下文。单次检索很难一次把这几类信息全部准确捞齐。

Agentic RAG 的思路是让检索变成一个可以拆解、多步、带策略的过程。系统先理解用户意图,拆解出检索子任务,分步检索,每步之间可能还会根据中间结果调整下一步的检索方向。比如先定位产品 A 的型号文档,再定位产品 B 的同类文档,最后把两边的数据汇总给模型合成答案。

这个趋势对"Embedding RAG 还值不值得优化"的回答有一个重要影响:当你把检索从一步变成多步之后,每一步的检索质量依然依赖 embedding 和重排序这些基础能力,但对全局效果的贡献方式变了。优化不再是单点突破,而是要让"检索决策"变得更聪明。换句话说,embedding 不会失去价值,但它的价值要在更复杂的检索框架里重新定位。

5.2 RAG as Service:优化工作正在被平台化吞噬

另一个值得关注的信号是,RAG 正在快速平台化、服务化。现在很多云厂商和中间件产品直接把 RAG 能力封装成服务,用户上传文档、建立知识库、拿到查询接口,平台帮你处理分块、向量化和检索细节。国内外的框架也都在往这个方向发力,开发者自己需要写的检索代码越来越少。

这对"优化"这件事的含义是双重的。一方面,通用场景下基础 RAG 能力被平台托管,你再花两周调一个分块参数,ROI 大不如前。另一方面,一旦平台能力不满足业务需求——比如涉及复杂的权限模型、独特的领域术语、严格的审计要求——你必须回到自建管线,那时候前面说的那些优化手段依然全部有效。

我的判断是:未来大部分中小团队不需要也没必要深入优化 embedding 检索,直接用服务化能力够用;但那些把 RAG 做成核心竞争力的团队,优化的重点会从"调模型"转向"设计检索策略"和"领域数据治理"。

5.3 Ontology RAG 与更结构化的路线

还有一个正在升温的方向是 Ontology RAG,即把领域知识建模成图谱和本体,让检索不只在文本片段层面发生,而是在概念和关系层面发生。比如查"哪些零部件共用一套润滑标准",纯向量搜索很难回答,因为答案分散在多份文档里,需要靠知识图谱把"零部件—标准"的关系串联起来。

这类方案和 embedding 不是替代关系,而是叠加关系。向量检索负责定位包含相关概念的文档,图谱负责扩展关系链路。优化重心也从 embedding 模型本身,转向了如何设计图谱结构、如何把非结构化文本映射到本体体系。

说这些是想强调一个趋势:RAG 的优化对象正在从"模型"扩展到"系统"。你纠结的 embedding 榜单排名,在整个系统里占的权重会越来越小。

6. 给你一个实操判断框架:什么阶段做什么优化

6.1 项目刚起步(0 到 1)

如果你刚准备做一个 RAG 项目,别一上来就优化。先用默认配置跑通一个最小闭环:选一个主流 embedding 模型,用最简单的固定分块,搭好向量库和检索接口,找几个典型问题测一测。这时候的目标不是效果好,而是有一个可评测的基线。记住,没有基线的优化都是耍流氓。

基线建立之后,花一天时间标注 50 到 100 个真实 query,统计召回率@5 或召回率@10。如果这个数字低于 60%,大概率是分块和解析的问题,优先修这两个。如果召回率已经到 80% 以上,再加混合检索和重排序,把精确率提上来。

6.2 项目已在线上跑(优化期)

如果你已经有线上业务,我建议按这个顺序来:先看日志,统计真实用户 query 的类型分布,找出最常失败的高频问题;针对这些失败样本,逐个反推是哪个环节出了问题——是没召回,还是召回错了,还是召回了但模型没答对。这一步定位比任何优化技巧都值钱。

定位到具体环节后,再对症下药。如果是"该召回的内容没召回",检查分块和解析逻辑;如果是"召回了但排序靠后没进 top-k",引入重排序;如果是"模型没利用好检索内容",优化提示词和生成策略。很多时候,你只需要解决那一两个占失败样本 80% 的共性问题,整体效果就会明显改观。

6.3 大规模应用(架构期)

到了这个阶段,优化就不是单点问题而是架构问题。你需要有完善的数据标注和评测流水线,让每次改动都能快速评估回归;需要监控特定领域的检索质量指标,而不是只看一两个 demo 案例;还需要考虑多层检索策略的组合——元数据过滤、混合检索、重排序、Agentic 多步检索,它们之间的编排方式本身就是一个值得持续迭代的系统。

我个人的体会是,这个阶段最值得投入的既不是 embedding 更不是排行榜,而是一套可持续评测的机制和一份不断积累的高质量标注集。这两个资产比任何模型选型都保值——模型会换、框架会换,但你的评测基准和标注数据让你永远知道下一步该往哪里走。

回到最初那个朋友的问题:"embedding 排名二十开外要不要换?"我现在的答案依然没变:先把你自己的检索漏斗修好,再用数据说话。RAG 当然值得优化,但请把优化当成一个系统的事,而不是一个模型的事。

返回列表