从入门到精通:RAG系统中检索与生成之间的增强层,收藏级技术指南

文章强调了检索增强生成(RAG)系统中检索和生成之间的处理环节对系统性能的关键影响。指出大语言模型对上下文位置敏感(首因和近因效应),需要通过重排序、去重、矛盾处理等优化检索结果。合理管理token预算,使用清晰的提示词架构,并注意检索指标无法反映的失败模式。生产级系统应采用混合搜索、重排序、控制文本块数量等最佳实践,真正决定模型是否有效利用检索内容的是检索和生成之间的增强层。


“检索独占了所有的聚光灯,但真正决定系统在暗处成败的,却是检索与生成之间的环节。”

检索效果堪称完美。

返回了五个文本块,相关性分数均在0.85以上,恰好是用户需要的政策文档。答案就在第三个文本块中。

但回复遗漏了关键细节。这不算是完全的幻觉。更像是模型浏览了一遍而没有仔细阅读。

你调试检索器,调优嵌入模型,调整文本块大小。但检索本身从来不是问题所在。

问题出在其他地方:这些文本块是如何被组合成提示词的。它们出现的顺序如何。它们周围有多少上下文信息。模型是否真的能够利用你检索到的内容。

这是没人警告你的那一层:检索和生成之间发生了什么。你的向量数据库传递相关文本块。你的大语言模型生成回复。中间的增强层决定了你的检索是否真的有意义。

位置仍然重要

大语言模型不会均匀地读取上下文。

斯坦福大学和Meta的研究人员在2023年发现了这一点。他们将关键事实埋藏在检索文档的不同位置,然后测量准确率。结果是什么?一条U形曲线。模型对最先出现的内容(首因效应)和最后出现的内容(近因效应)关注强烈。中间的部分被忽视了。

这种情况有所改善。GPT-4o和Claude 3.5 Sonnet在位置处理上不像GPT-3.5-Turbo那样吃力。这种效应并未消失。它被削弱了,但并未消除。架构原因依然存在:Transformer的注意力机制,通过softmax归一化和"注意力sink"的quirks,仍然对早期token分配了不成比例的权重。

所以:把你最好的文本块放在最前面。这不费吹灰之力,还能防范位置效应。无论你使用哪种模型都有效。

RAG提示词示意图:文本块3具有最高的相关性分数(0.91),但位于第3位。最优位置将其放在首位。(所有插图均由作者提供)

解决方案:重新构建你的提示词。将最高相关性的文本块移到开头。将次要上下文放在中间。对于复杂查询,考虑在末尾添加摘要。

重排序算法:最佳文本块保持在位置1(首因效应),第二好的移到末尾(近因效应),其余填充中间部分。

2023年研究中的U形注意力曲线。虽然较新的模型使这条曲线趋于平缓,但这种模式并未完全消失。

检索之后实际发生了什么

大多数RAG教程展示的是一个简洁的图示:

查询 → 检索器 → 大语言模型 → 回复

检索器和大语言模型之间的箭头隐藏了整整一个处理管道。

其实,那个箭头隐藏了很多东西:

你的检索器返回候选结果,通常是按嵌入相似度排名前20-50的文本块。那些原始结果存在问题。有些文本块重叠,重复相同的信息。有些相互矛盾。有些是基于关键词匹配,但并不能真正回答你的问题。将它们直接输入大语言模型会浪费token并引入噪声。

处理管道将这些原始候选结果转换为优化的上下文。它通过相关性阈值进行过滤。它移除近似重复项。它使用比嵌入相似度更能理解查询-文档关系的模型进行重排序。它处理矛盾。它扩展有前景的文本块以包含周围上下文。然后,最终,它将所有内容组装成大语言模型实际可以使用的提示词结构。

跳过这些步骤中的任何一个,你都是在放弃质量。

检索和生成之间的隐藏管道:50个候选文本块通过过滤、重排序和去重缩减为4-6个优化后的文本块。

重排序是收益最大的地方。向量相似度快速但浅层。它比较文档的压缩表示,为了速度牺牲了细微差别。交叉编码器重排序器通过完整的Transformer注意力机制一起处理你的查询和每个文档,捕捉嵌入遗漏的关系。

有效的模式:广泛检索(前50个候选),精确重排序(保留前5个)。Pinecone的基准测试显示,这种两阶段方法比单纯的向量搜索提高了14-30%的检索质量。生产系统显示的数字也类似。

双编码器检索快速但浅层。交叉编码器重排序缓慢但深层。两者结合给你速度和精度。

对于重排序模型,Cohere Rerank可以很好地处理大多数用例。如果你不是所有文档都是英文,它的 multilingual 特性会有所帮助。对于自托管部署,BAAI的bge-reranker-ver2-m3在不产生API成本的情况下提供了相当的质量。

去重解决了一个你可能不会注意到直到它给你带来代价的问题。使用滑动窗口的文本分块策略会产生重叠。检索五个文本块,其中三个可能包含相同的段落。这不仅仅是浪费token。重复可能使模型偏向于过度强调重复的内容。

最大边际相关性(MMR)很好地处理这个问题。理念是:你添加的每个新文本块应该是相关的,但也应该与你已经选择的内容不同。没有理由包含三个说同样事情的文本块。

矛盾处理更难。当你的检索器返回相互矛盾的文本块时,模型应该怎么做?系统经常自信地引用错误的来源,因为它在上下文中最先出现。

对于时间矛盾,解决方案是元数据。包括时间戳,并在新内容涵盖相同领域时过滤旧内容。LlamaIndex有一个EmbeddingRecencyPostprocessor可以自动完成这个任务。

对于权威冲突,对你的来源进行加权。官方文档应该覆盖用户生成的内容。主要来源应该击败摘要。明确的元数据标签让你在管道中实现这些偏好。

当存在合法的模糊性时,诚实的方法是用清晰的归属呈现两种观点。强迫虚假的共识会产生听起来自信但会误导用户的回复。

没人教你的Token预算

上下文窗口有上限。这个你知道。但在这些限制内的预算分配是没人教的部分。

128K的上下文窗口听起来很大,直到你考虑到所有竞争空间的东西。你的系统提示词需要空间。用户的查询占用token。你需要为回复本身预留容量。剩下的才是你检索上下文的实际预算。

一个合理的分配:系统提示词1500 token,用户查询500 token,输出预留4000 token。在128K模型上,这为上下文留下了约122,000个token。足够多了,对吧?

理论上,是的。在实践中,更多并不总是更好。即使改进的长上下文模型,在某个点之后也存在收益递减,额外的文本块添加的是噪声而不是信号。模型必须筛选更多内容才能找到相关的内容。

Token分配现实:只是因为你能够填满128K并不意味着你应该这样做。质量优先于数量。

最佳点通常是大多数查询的4-6个文本块。在此之后,每个额外的文本块都与已包含的文本块竞争相关性。除非新文本块包含真正独特的信息,否则它会稀释而不是丰富内容。

当你需要更多上下文时,压缩胜于截断。

微软的LongLLMLingua实现了4倍压缩,同时在问答基准测试上提高了21%的准确率。它使用困惑度对token重要性进行评分,并保留与查询相关的内容,同时丢弃填充内容。压缩后的上下文包含的文本更少,但信号更多。

替代方案RECOMP提供提取式压缩(选择关键句子)和抽象式压缩(生成摘要)。任何一种方法都优于naive截断,后者基于位置而非重要性丢弃内容。

压缩在处理相关信息分散的长文档时效果最好。对于检索场景良好分块的内容,保持在4-6个高质量文本块内比压缩更大的集合效果更好。

真正有效的提示词架构

你如何构建最终提示词比大多数教程承认的更重要。

基本架构有两层:建立规则的持久系统提示词,以及注入查询时上下文的动态用户提示词。混合这些层会导致不一致。将它们保持分开。

你的系统提示词应该定义:

  • • 角色和人格(“你是某公司的技术支持助手…”)
  • • grounding规则(“仅使用提供的上下文回答。如果上下文不包含答案,请说明。”)
  • • 格式规范(“使用[1]、[2]符号引用来源”)
  • • 拒绝模式(“不要回答关于竞品的问题”)

此提示词在查询间保持不变。规则普遍适用。

你的用户提示词应该包含:

  • • 检索到的上下文,清晰界定
  • • 实际的用户查询
  • • 任何特定于查询的指令

分隔符的选择影响解析准确率。XML标签在Claude和受过结构化数据训练的模型上优于markdown和纯文本。我使用、和作为边界。

一个效果良好的结构如下:

Naive排序将关键信息埋在注意力死角。优化位置利用首因效应和近因效应。

<documents><document source="policy-handbook.pdf" page="12">[chunk content here]</document><document source="faq-updated-2024.md">[chunk content here]</document></documents><query>[user's question here]</query>

源元数据启用引用。页面编号让用户能够验证。清晰的结构帮助模型从指令中解析内容。

你应该包含什么元数据?源标题,是的。时间敏感内容的时间戳,是的。如果需要引用,页面编号,是的。

你应该排除什么?内部相关性分数、文件系统路径、编码信息、调试数据。这些消耗token但不帮助生成。如果元数据不能帮助模型更好地推理,就不要包含。

日志中不显示的失败

良好的检索指标不能保证良好的回复。注意检索成功后发生的失败模式。

引用幻觉是偷偷摸摸的。回复听起来权威,包含括号引用,但完全错误地说了哪个来源说了什么。事实可能是正确的。但归属不是。

这是因为引用准确性和事实准确性是独立的。模型可以从上下文中提取正确的信息,同时(如果这个词甚至适用于大语言模型的话)误记它来自哪个文本块。生产系统需要验证,将具体的主张追溯到具体的来源。

上下文中毒是我称之为当低相关性文本块挤掉好的文本块时。你的检索器返回十个文本块。七个是中等水平。三个正是你需要的。那七个稀释了信号,不是通过位置,而是通过音量。模型试图使用一切而不是找到最好的部分。

更严格的相关性阈值有帮助。限制你的文本块数量也有帮助。如果你不确定,宁可要更少的好文本块也不要更多平庸的。

当你的索引缺乏新鲜度信号时,就会出现时间陈旧。检索器返回一个2022年的政策文档,因为它完美地匹配了查询术语。那项政策在2024年被替换了。但你的管道不知道这一点。

基于元数据的过滤可以捕获这个,但前提是你索引时间戳并以新鲜度感知进行查询。对于快速变化的领域,考虑将新鲜度作为与相关性并列的排名因素。

推理碎片化扼杀多跳查询。用户提出的问题需要连接来自多个文本块的事实。每个文本块都检索成功。模型无法合成它们,因为它们在提示词中语义上相距甚远,缺乏桥接上下文。

分层文本分块在这里有所帮助。LlamaIndex的句子窗口检索在检索时嵌入单个句子,但在查询时扩展到周围的段落。桥接上下文自动随之而来。

真正有效的方法

在构建生产级RAG系统之后,这些模式是经得起检验的:

检索:混合搜索结合BM25关键词匹配和密集嵌入,通过Reciprocal Rank Fusion合并。这能捕获任一方法单独会遗漏的查询。Anthropic关于Contextual Retrieval的研究显示,混合方法减少了67%的检索失败。

重排序:云部署用Cohere Rerank,自托管用bge-reranker。始终重排序。延迟成本是值得的。

去重:MMR的lambda值约为0.6。你想要相关性,但也想要多样性。

文本块数量:大多数查询4-6个。只有当你确实需要跨多个来源综合时才更多。

位置策略:最佳文本块放在前面。支撑上下文填充中间。如果有空间,末尾放摘要。利用提示词的两端。

提示词结构:XML标签用于上下文界定。包含源和时间戳元数据。排除内部管道数据。

评估:将检索指标(精确率、召回率)与生成指标(忠实度、 groundedness)分开。当回复失败时,你需要知道哪个组件失败了。

这不是唯一有效的方法。但它可以防止你调试错误的层。

赚取其价值的层

大多数RAG讨论聚焦于检索。这是有道理的。如果你没有检索到正确的文本块,下游的任何东西都无法拯救你。

但与增强相比,检索是一个已解决的问题。向量数据库是成熟的。嵌入模型很好而且越来越好。重排序正在成为标准。检索层有明确的最佳实践和可衡量的基准。

增强层,检索和生成之间的空间,更年轻且更混乱。位置效应、压缩策略、提示词架构、在检索指标中不显示的失败模式。纸上看起来相同的系统在这里在生产中分道扬镳。

当你的RAG系统表现不佳时,抵制首先责备检索器的本能。检查你把文本块放在提示词的什么地方。检查你是否包含了太多上下文。检查你的提示词结构是帮助还是阻碍模型解析相关信息的能力。

检索可能没问题。真正决定模型是否真正使用你找到的东西的是接下来发生的事情。

AI大模型从0到精通全套学习大礼包

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!

如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!

01.从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点

02.AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线


03.学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的


04.大模型面试题目详解

05.这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!


如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【超详细】大模型学习路线图,从入门到应用(建议收藏)

本文为非从业者提供了一条大模型学习的快速入门路径&#xff0c;强调入门难度不高且投入不大。文章从神经网络基础开始&#xff0c;逐步介绍CNN、RNN、Transformer结构&#xff0c;再到大模型原理、训练优化、部署应用等&#xff0c;最后涵盖GPU算力知识。作者建议采用工程师式…

如何系统化的学习金融,投资,理财?

系统化学习金融、投资、理财&#xff0c;需要遵循 “搭建知识框架→夯实理论基础→实践验证迭代→优化思维体系” 的逻辑路径&#xff0c;三者环环相扣&#xff0c;缺一不可。以下是分阶段的详细学习方案&#xff0c;兼顾理论深度与实操性&#xff1a;一、 第一阶段&#xff1a…

兰亭妙微:以交互与网站设计之力,重塑行业门户新标杆

在数字化浪潮席卷各行业的当下&#xff0c;优质的交互设计与网站设计早已不是品牌的“加分项”&#xff0c;而是承载业务价值、提升用户体验的核心载体。兰亭妙微深耕交互设计与网站设计领域&#xff0c;凭借对行业需求的精准洞察、对设计细节的极致追求&#xff0c;为众多政企…

兰亭妙微:以HTML前端、UI/交互/图标设计赋能数字孪生与大屏设计新标杆

在具身智能人形机器人商业化浪潮席卷全球的当下&#xff0c;香港首家具身智能人形机器人公司港仔机器人&#xff08;00370&#xff09;的品牌战略启幕&#xff0c;成为行业焦点。而这场科技盛宴背后&#xff0c;兰亭妙微以专业的全栈设计服务&#xff0c;用UI设计、交互设计、数…

【第三十二周】RAG学习02

文章目录摘要Abstract一、项目疑问解答1. 传统信息检索&#xff0c;检索增强生成和无向量RAG1.1 传统信息检索1.2 检索增强生成&#xff08;RAG&#xff09;1.3 无向量RAG1.4 补充2. 大模型工作的核心2.1 Prompt的转变过程2.2 转变后Token维度的决定因素二、调试过程遇到问题1.…

Lab2-system calls MIT6.1810操作系统工程【持续更新】

Lab: system calls ​ 在这个lab当中6.1810 / Fall 2025 它要求你在xv6当中添加一个新的系统调用,以此来帮助你理解在操作系统当中,系统调用的底层实现逻辑和调用链条; ​ 之后该lab当中会告诉你一个故意留下来的系…

学霸同款2026 AI论文写作软件TOP9:研究生开题报告必备测评

学霸同款2026 AI论文写作软件TOP9&#xff1a;研究生开题报告必备测评 2026年学术写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作软件已成为研究生群体提升科研效率的重要工具。然而&#xff0c;市场上产品繁多&…

面向 OpenHarmony 的 Flutter 应用实战:TodoList 多条件过滤系统的状态管理与性能优化

TodoList 多条件过滤系统的状态管理与性能优化 引言&#xff1a;在信息过载时代&#xff0c;精准查找比记录更重要一、为什么组合过滤对 OpenHarmony 用户至关重要&#xff1f;二、架构设计&#xff1a;三层过滤模型与状态解耦状态变量分离 三、UI 实现&#xff1a;符合 Harmon…

无状态 Widget 下的实时排序:Flutter for OpenHarmony 中 TodoList 的排序策略与数据流控制

Flutter for OpenHarmony 中 TodoList 的排序策略与数据流控制 引言&#xff1a;排序不是功能&#xff0c;而是信息组织范式一、为什么排序需要独立架构&#xff1f;——从“功能”到“系统”二、状态设计&#xff1a;分离排序策略与方向排序菜单 UI 实现 三、排序算法&#xf…

从数据模型到响应式渲染:Flutter for OpenHarmony 上 TodoList 优先级系统的端到端类型安全实践

Flutter for OpenHarmony 上 TodoList 优先级系统的端到端类型安全实践 引言&#xff1a;优先级不是装饰&#xff0c;而是决策依据一、数据模型演进&#xff1a;从字符串到类型安全枚举✅ 正确做法&#xff1a;使用 Dart 枚举&#xff08;自 Dart 2.17 起支持增强型枚举&#x…

从系统亮度监听到 UI 重绘:Flutter for OpenHarmony TodoList 深色模式的端到端响应式实现

Flutter for OpenHarmony TodoList 深色模式的端到端响应式实现 引言&#xff1a;深色模式不是皮肤切换&#xff0c;而是人机交互范式的演进一、主题状态建模&#xff1a;从布尔值到三态枚举✅ 正确做法&#xff1a;采用 Flutter 内置 ThemeMode 枚举状态管理设计 二、UI 控件实…

在 OpenHarmony 上打造智能 TodoList:基于 Flutter 的标签分类与动态过滤实践

基于 Flutter 的标签分类与动态过滤实践 引言&#xff1a;在国产化生态中构建专业级生产力工具一、为什么标签功能对 OpenHarmony 用户尤为重要&#xff1f;二、数据模型扩展&#xff1a;面向多端持久化的轻量设计1. 扩展 SimpleTodo 模型&#xff08;Hive 兼容&#xff09;2. …

数字化种植牙企业

好的&#xff0c;作为一名资深、客观的测评分析师&#xff0c;我将为您呈现关于【数字化种植牙】领域的专业深度测评报告。《数字化种植牙哪家好&#xff1a;2024企业级解决方案专业深度测评》开篇&#xff1a;定下基调随着口腔医疗技术向精准化、智能化迈进&#xff0c;数字化…

智能摄像头在智能车道路视频采集中的关键技术及应用解析

摄像头在智能车道路视频采集中的应用&#xff0c;主要依赖于其高精度图像捕捉、多角度采集、实时处理与传输以及智能分析等能力&#xff0c;以下是对其关键环节及技术要点的详细分析&#xff1a;一、摄像头在智能车道路视频采集中的核心作用高精度图像捕捉 &#xff1a;摄像头作…

基于Java的工程车辆成本核算智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 工程车辆成本核算智慧管理系统利用SpringMVC框架结合MySQL数据库&#xff0c;集成会员操作管理、车辆管理、员工管理等多个功能模块。该系统简化了传统模式下繁琐的手动记录和统计工作&#xff0c;大幅度提升了工作效率与准确性&#xff…

【毕业设计】基于springboot的生日商城的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

基于Java的工程材料运费智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 工程材料运费智慧管理系统基于Java技术栈&#xff0c;采用SpringMVC框架和MySQL数据库设计与实现。该系统包括驾驶员管理、材料管理、工程项目管理等七大模块&#xff0c;并详细定义了各角色权限及字段属性。相较于传统选题&#xff0c;本…

基于Java的工程机械设备智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 工程机械设备智慧管理系统主要功能模块涵盖机械设备档案管理、供应商管理和客户管理等&#xff0c;适用于普通员工和部门领导角色。该系统使用SpringMVC开发框架与MySQL数据库构建&#xff0c;旨在提高管理水平并优化资源配置效率。相较于…

基于Java的工程材料销售智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 工程材料销售智慧管理系统基于Java开发&#xff0c;采用SpringMVC框架与MySQL数据库构建。该系统不仅涵盖了产品管理、客户管理、供应商管理等核心模块&#xff0c;还引入了计量单位管理、进货单头管理和销售单头等功能&#xff0c;旨在提…

基于Java的工程竣工资料智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 工程竣工资料智慧管理系统基于Java的开发&#xff0c;专注于项目管理、施工图纸管理、工程施工进度管理等14个主要功能模块。通过运用SpringMVC框架和MySQL数据库实现高效的数据管理和信息处理&#xff0c;并结合Web前端技术及JavaScript…