当前位置: 首页 > news >正文

RAG检索结果不够准?揭秘“双塔+单塔“组合背后的精准秘诀!秒懂工业级RAG架构核心!

本文深入剖析工业级RAG系统为何采用"双塔+单塔"两阶段索引机制。双塔结构通过独立编码Query和Doc再计算相似度,实现海量数据的高效召回,但会丢失细粒度匹配信息;单塔结构通过联合编码Query和Doc,利用交叉注意力机制实现精准语义匹配,提升检索精度。两者结合,双塔负责快速"找到"相关内容,单塔负责精准"找对"核心答案,是高质量RAG系统的关键设计。


很多人做 RAG 时都会遇到一个问题:为什么明明已经用了 Embedding,检索结果却依旧“不够准”?为什么用户问“苹果营收”,系统却检索不到“Apple Inc.”相关内容?真正的问题,往往不在大模型,而在 RAG 的检索架构本身。

本文将深入拆解工业级 RAG 背后最核心的“两阶段索引”机制:双塔(Embedding)为什么适合海量召回?单塔(Rerank)为什么能大幅提升精度?以及为什么几乎所有高质量 RAG 系统都会采用“Embedding + Rerank”的组合方案。看完以后,你会真正理解:双塔负责“找到”,单塔负责“找对”。

4.5 RAG 中的两阶段索引

在上一节内容中,我们详细介绍了如何基于在第3章中构建的语义检索引擎来搭建一个完整的 RAG Agent,让它根据用户的提问自主分拆解、回答并总结得到完整的答案。尽管整个流程看似已经搭建完毕,但是依旧有很多地方需要继续优化,例如从向量库检索内容的精度、模型输出结果的后处理等。

在本节内容中,我们将从检索精度这一角度来介绍如何让 RAG Agent 在回答问题时检索到的参考内容更精准,也就是重排序(Rerank)模型的使用。

很多人第一次搭建 RAG 系统时,都会有一个疑问,既然 Embedding 模型能把文本变成向量,为什么还要再加一个 Rerank 模型?

刚开始你可能觉得有它没它区别应该不大,但真正用过之后你会发现加了 Rerank 模型后检索结果可能有质的飞跃,而这背后涉及到的就是 RAG 检索架构中一个非常核心的设计。

4.5.1 双塔结构思想原理

双塔(Bi-Encoder)是 RAG 系统中最常用的检索架构,也是几乎所有向量数据库的底层基础。双塔的核心思想可以用一句话概括:Query 和 Doc 分开编码,最后在向量空间中计算相似度。

图 4-6. 双塔检索流程图

例如,在 RAG 应用开发中,我们会先通过 Embedding 模型(也就是 Encoder)将所有的离线文档都转换成向量存入到向量库中。当用户提问时,我们再将 Query 通过 Embedding 模型将其转换成向量,然后同向量库中的向量进行相似度比较,最后取向量库中前 K 个最相似的文本块作为参考源。你可以把整个过程想象成图书馆的图书检索系统,每本书都有一个编号(向量),读者查询时先拿到查询词的编号,然后在书架上找编号最接近的书。

4.5.2 双塔结构的优势与不足

说完了工作原理,我们自然要问:为什么双塔结构能支撑百万级甚至更大规模的数据检索?

这得益于它的一个关键设计:文档向量可以提前离线计算好并存入向量数据库,查询时只需计算一次 Query 向量,然后在向量索引中做近似最近邻搜索(Approximate Nearest Neighbor, ANN)。这意味着时间复杂度可以从线性的 降低到接近 ,例如简单的[倒排文件索引

举个例子,如果你有 100 万篇文档,使用双塔结构时系统可以在对数级别的时间内找到最相关的文档,而不用逐一比较 100 万次。这也是为什么 RAG 系统能够秒级响应,而不是等待几分钟。

不过,双塔结构也有明显的局限性,这也是为什么它不能单独使用的原因。

由于 Query 和 Doc 在编码时彼此不知道对方的存在,模型只能把整段文本压缩成一个固定长度的向量,然而,一旦压缩完成细粒度的匹配信息就会丢失。换句话说,我们希望在编码 Query 的时候它是能够看到 Doc 的,这样检索得到的参考内容也将更加准确。

举个例子,假设你的知识库中有一篇文档讲的是苹果公司 2024 年的财报数据,当用户搜索“苹果营收”时,双塔结构可能会把这篇文档排在后面,因为它在编码“苹果营收”时无法捕捉到“苹果”和“苹果公司”的细粒度对应关系,它只能基于整体语义的粗略匹配。

所以你会发现,只用双塔检索时,结果往往是看起来相关,但不够精准。

4.5.3 单塔结构思想原理

说完了双塔结构,我们再来看单塔结构是怎么解决精度问题的。

单塔(Cross-Encoder)是另一种常见的架构,通常用于排序场景中,它的做法与双塔完全不同。双塔是分开编码,而单塔则是将 Query 和 Doc 拼接在一起输入模型进行联合编码。

具体来说,我们会把 Query 和 Doc 的文本拼接成一个序列,例如[CLS] Query [SEP] Doc,然后再通过 Embedding 模型对整个序列进行编码并输出一个0 到1之间相关性分数,最后取相关性分数最高的前 K 的文本块作为参考源。

图 4-7. 单塔检索流程图

此时,我们可以把单塔理解成一个专业的审稿人,它会仔细阅读问题和文档的每一个字,然后判断这篇文档是否真的回答了问题。

4.5.4 单塔结构的优势与不足

可以发现,单塔结构最大的优势在于表达能力强,能够捕捉细粒度的语义匹配。在 Cross-Encoder 中,Query 里的每个 token 都可以关注 Doc 的每个 token,也就是完整的交叉注意力机制。因此,这意味着模型可以进行精确的语义对齐以及上下文补全和逻辑关系的判断。

……

2026年AI行业最大的机会,毫无疑问就在应用层

字节跳动已有7个团队全速布局Agent

大模型岗位暴增69%,年薪破百万!

腾讯、京东、百度开放招聘技术岗,80%与AI相关……

如今,超过60%的企业都在推进AI产品落地,而真正能交付项目的大模型应用开发工程师**,**却极度稀缺!

落地AI应用绝对不是写几个prompt,调几个API就能搞定的,企业真正需要的,是能搞定这三项核心能力的人:

✅RAG:融入外部信息,修正模型输出,给模型装靠谱大脑

✅Agent智能体:让AI自主干活,通过工具调用(Tools)环境交互,多步推理完成复杂任务。比如做智能客服等等……

✅微调:针对特定任务优化,让模型适配业务

目前,脉脉上有超过1000家企业发布大模型相关岗位,人工智能岗平均月薪7.8w!实习生日薪高达4000!远超其他行业收入水平!

技术的稀缺性,才是你「值钱」的关键!

具备AI能力的程序员,比传统开发高出不止一截!有的人早就转行AI方向,拿到百万年薪!👇🏻👇🏻

AI浪潮,正在重构程序员的核心竞争力!现在入场,仍是最佳时机!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

⭐️从大模型微调到AI Agent智能体搭建

剖析AI技术的应用场景,用实战经验落地AI技术。从GPT到最火的开源模型,让你从容面对AI技术革新!

大模型微调

  • 掌握主流大模型(如DeepSeek、Qwen等)的微调技术,针对特定场景优化模型性能。

  • 学习如何利用领域数据(如制造、医药、金融等)进行模型定制,提升任务准确性和效率。

RAG应用开发

  • 深入理解检索增强生成(Retrieval-Augmented Generation, RAG)技术,构建高效的知识检索与生成系统。
  • 应用于垂类场景(如法律文档分析、医疗诊断辅助、金融报告生成等),实现精准信息提取与内容生成。

AI Agent智能体搭建

  • 学习如何设计和开发AI Agent,实现多任务协同、自主决策和复杂问题解决。
  • 构建垂类场景下的智能助手(如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等)。

如果你也有以下诉求:

快速链接产品/业务团队,参与前沿项目

构建技术壁垒,从竞争者中脱颖而出

避开35岁裁员危险期,顺利拿下高薪岗

迭代技术水平,延长未来20年的新职业发展!

……

那这节课你一定要来听!

因为,留给普通程序员的时间真的不多了!

立即扫码,即可免费预约

「AI技术原理 + 实战应用 + 职业发展

「大模型应用开发实战公开课」

👇👇

👍🏻还有靠谱的内推机会+直聘权益!!

完课后赠送:大模型应用案例集、AI商业落地白皮书

http://www.cnnetsun.cn/news/2591593.html

相关文章:

  • SVM模型可解释性新视角:正交多项式核与ORCA框架深度解析
  • ESP32硬件IIC驱动SHT30温湿度传感器,从官方例程到实战避坑(附完整工程)
  • 你的电机速度跳来跳去?STM32 HAL库编码器测速的滤波与防溢出实战指南
  • 告别重复登录!用Playwright连接已打开的Chrome浏览器,保留你的会话和Cookie
  • 用STM32和OLED屏做个土壤湿度监测仪(附完整代码和接线图)
  • 别再只测总功耗了!用万用表实测ZCU104开发板在不同Linux负载下的电流变化
  • ViT如何‘喂’给Diffusion Model?图解U-ViT中Patch、Time Token与Long Skip的融合细节
  • 避坑指南:解决Unity Standard Assets导入后GUIText报错(附两种代码修改方案)
  • 从零构建本地语音AI智能体:技术选型、架构与实战优化
  • ESP32开发环境搭建进阶:从Arduino IDE到VSCode+PlatformIO的平滑迁移指南
  • 从“隔离”到“连接”:手把手教你用数字隔离器(如Silicon Labs的Si86xx)搞定STM32与树莓派的“安全对话”
  • 两分钟为AI助手注入实时金融分析能力:FinanceKit MCP实战指南
  • 5分钟搞定Windows AirPods电量显示与低延迟音频优化
  • 别再只会apt install了:深入理解Debian/Ubuntu中ps、netstat等命令的包依赖关系
  • 突破向量检索瓶颈:实现微秒级Graph-RAG的架构设计与性能优化
  • AI时代设计胜任力框架:从界面输出到系统定义的转型路径
  • 为内部工具集成 AI 能力时如何通过统一 API 网关简化运维
  • 芯片供电网络设计避坑指南:当PNS遇到IR Drop和Congestion冲突时怎么办?
  • Zookeeper可视化工具选型指南:为什么我最终选择了PrettyZoo(附3.5.7版本配置避坑点)
  • HyperAgents:AI智能体如何实现自主代码优化与安全自我改进
  • 从Iris到实战:用sklearn的train_test_split划分数据,新手最容易踩的3个坑
  • OK3588开发板多屏显示实战:如何用Uboot菜单灵活切换HDMI和eDP屏幕
  • 告别蓝牙!用STM32F103和NRF24L01搭建2.4G无线数传,实测对比与选型心得
  • 基于稀疏自编码器与DBSCAN的雷达脉冲信号无监督分类方法
  • 告别卡顿!用轻薄本+SSH+X11转发,远程流畅运行Vivado 2019.2全攻略
  • BadApple播放器进阶:优化0.96寸OLED的帧率与流畅度(STM32+SD卡方案)
  • 软件定义汽车中的DevOps实践与CI/CD创新
  • AI应用成本优化实战:从Token账单拆解到架构级降本策略
  • LLM应用成本优化实战:从架构解耦到缓存策略,实现Token消耗降低85%
  • 监控告警系统:及时发现并响应问题