搞定RAG高级RAG技巧:从Query改写到Prompt构建,看这篇就够了!

张开发
2026/5/30 21:24:30 15 分钟阅读
搞定RAG高级RAG技巧:从Query改写到Prompt构建,看这篇就够了!
1. 题目分析很多人搭 RAG 系统时把精力全花在 embedding 模型选型和向量库调参上结果发现效果还是不行——知识库里明明有答案就是检索不出来或者检索出来了模型的回答还是不靠谱。问题往往出在两个被低估的环节用户的 query 没有经过适当改写就直接丢给了检索引擎以及检索回来的文档片段没有被有效组织就塞进了 prompt。这两个环节分别对应 RAG 管线中的检索前优化和生成前优化是提升端到端效果最直接的手段。1.1 原始 query 为什么不能直接用先说一个直觉用户说话的方式和知识库文档的写法往往差距很大。用户可能输入上次那个报错怎么解决的而知识库里的表述是ConnectionTimeoutException 的排查步骤。这中间存在一个巨大的语义鸿沟——用户用口语化、带省略、带指代的方式提问而知识库是结构化、规范化的专业表述。直接用原始 query 去做 embedding 检索召回率自然不好。除了表述差异还有几种常见的难检索场景。用户的问题太笼统比如介绍一下你们的产品这种 query 的 embedding 向量在高维空间中指向一个模糊的区域很难精准匹配到具体文档。用户的问题包含多个子问题比如对比 MySQL 和 PostgreSQL 在高并发写入下的性能差异以及各自的锁机制有什么不同作为整体去检索embedding 会被平均化两个子话题都检索得不好。多轮对话中的指代问题更是重灾区——用户第一轮问RAG 是什么第二轮接着问它的检索阶段有哪些优化方法这个它如果不做指代消解检索系统根本不知道在找什么。1.2 主流的 query 改写策略理解了为什么要改写看具体怎么改。实践中常用的策略可以按改写目标分成几类。指代消解与上下文补全是多轮对话场景的刚需。做法是把当前轮的 query 和前几轮的对话历史一起发给 LLM让它输出一个语义完整、不依赖上下文的独立 query。比如把它的检索阶段有哪些优化方法改写成RAG 系统的检索阶段有哪些优化方法。这步看起来简单但在生产环境几乎是必做的——没有它多轮对话的 RAG 基本不可用。查询分解Query Decomposition针对的是复合问题。把一个包含多个子问题的复杂 query 拆成多个独立子 query分别检索后再汇总结果。前面那个 MySQL 和 PostgreSQL 的对比问题可以拆成MySQL 高并发写入性能、“PostgreSQL 高并发写入性能”、“MySQL 锁机制”、PostgreSQL 锁机制四个子 query每个的 embedding 更聚焦检索精度自然更高。多角度改写Multi-Query的思路是同一个问题换几种不同的说法去检索最后把所有检索结果合并去重。背后的逻辑是不同的表述方式可能命中知识库中不同的文档片段多角度改写可以显著提升召回率。实现上通常让 LLM 对原始 query 生成 3-5 个语义相同但措辞不同的变体。HyDEHypothetical Document Embeddings是一种很巧妙的方法。它不改写 query 本身而是让 LLM 先根据 query假想出一篇可能的答案文档然后用这篇假想文档的 embedding 去做检索。原理是假想答案和真实答案在表述风格上更接近都是文档体所以在 embedding 空间中距离更近。这个方法在 query 和文档之间表述风格差异大的场景下特别有效。Step-back Prompting则是反其道而行——不是让 query 更具体而是更抽象。比如用户问Python 3.9 中 walrus operator 有哪些使用限制step-back 后变成Python 赋值表达式的语法规则和限制。更抽象的 query 能检索到更全面的背景知识适合需要先建立整体理解才能回答具体问题的场景。1.3 改写策略的工程选型这些策略不是互斥的实际项目中往往需要组合使用。一个典型的组合是先做指代消解保证 query 语义完整再判断是否需要分解最后对每个 query 做多角度改写或 HyDE 来提升召回。选型的关键考量是成本和延迟。每多一步改写就多一次 LLM 调用在高并发场景下开销不容忽视。所以实践中通常做分级处理简单 query单句、无指代、目标明确直接检索不做改写有指代的做消解复合问题做分解只有检索结果质量不达标时才触发 HyDE 或多角度改写这种更重的策略。这种按需改写的路由逻辑本身也可以用一个轻量级的分类模型或规则来实现。1.4 基于检索结果构建有效 promptquery 改写解决了检索得准的问题接下来要回答的是怎么把检索到的文档片段组织进 prompt让 LLM 能有效利用它们这个环节的核心矛盾是信息量与可用性的冲突。检索回来的文档可能很多、很长、包含冗余甚至矛盾的信息而 LLM 的上下文窗口有限注意力分配也不均匀Lost in the Middle现象。所以 prompt 构建的本质任务是在有限的 token 预算内把最相关、最有用的信息以最容易被模型利用的方式组织起来。重排序Reranking是检索和 prompt 构建之间的桥梁。向量检索的相关性评分是基于 embedding 相似度的粗排而 Reranker通常是交叉编码器模型会把 query 和每个文档片段拼在一起做精细的相关性打分。经过重排后真正和 query 相关的内容才会排到前面。Cohere Rerank、bge-reranker 都是常用的选择。重排之后还需要考虑文档在 prompt 中的放置顺序——研究发现把最相关的内容放在 prompt 的开头和结尾中间放次相关的效果比严格按分数降序排好这正是为了应对 Lost in the Middle。上下文压缩Context Compression是一个被严重低估的技术。检索回来的文档片段中真正和 query 相关的可能只有其中几句话其余都是噪声。上下文压缩的做法是用 LLM 或专门的压缩模型从每个片段中提取与 query 直接相关的信息去掉无关内容。LangChain 的ContextualCompressionRetriever就是这个思路。压缩后同样的 token 预算可以塞进更多有效信息。Prompt 模板的设计直接影响模型的回答质量。一个好的 RAG prompt 模板通常包含几个关键要素明确的角色指令告诉模型基于给定资料回答不要编造对检索文档的引用格式规范比如要求模型用 [1][2] 标注信息来源这既增加了可追溯性也在一定程度上迫使模型去真正看参考文档而不是凭自己发挥以及对不知道就说不知道的显式约束这是控制幻觉最直接的手段。还有一个经常被忽略的细节文档片段之间的冲突处理。当多个片段包含矛盾信息时比如不同版本的文档prompt 中需要显式告知模型以下文档可能存在冲突请优先参考最新的信息并标注时间戳。如果片段之间有逻辑递进关系按逻辑顺序而非相关性分数排列效果更好。1.5 检索结果不够好时怎么办现实中检索结果不可能总是完美的。有时候检索回来的文档关联度很低有时候知识库里压根没有相关信息。怎么处理这些情况是区分玩具系统和生产系统的分水岭。一个实用的做法是在 prompt 构建前加一个相关性判断环节用 Reranker 或 LLM 对检索结果做二次打分如果最高分都低于阈值就走降级策略——让模型基于自身知识回答但标注以下回答未基于知识库验证或者直接告知用户未找到相关信息。另一个策略是混合检索。不只依赖向量检索同时做关键词检索BM25然后通过 Reciprocal Rank FusionRRF融合排序。混合检索在实践中几乎总是比纯向量检索效果好因为向量检索擅长语义匹配关键词检索擅长精确匹配两者互补。2. 参考回答RAG 系统的效果优化query 改写和 prompt 构建是两个最直接的手段分别对应检索前和生成前的优化。query 改写要解决的核心问题是用户表达和知识库表述之间的语义鸿沟。实际做的时候首先是指代消解这在多轮对话场景中是刚需把代词和省略补全成完整独立的 query其次是查询分解复合问题拆成多个子 query 分别检索再合并还有多角度改写用 LLM 生成同一问题的多种表述来提升召回率以及 HyDE让 LLM 先生成一篇假想答案文档用它的 embedding 去检索因为文档和文档之间的语义匹配天然比 query 和文档的匹配更准。工程上这些策略不是无脑全上而是做分级路由——简单 query 直接检索有指代的做消解复合的做分解只有检索质量不达标时才触发更重的改写。prompt 构建方面核心矛盾是 token 预算有限而检索信息量大。几个关键处理一是用 Reranker 对检索结果做二次精排交叉编码器比向量相似度的相关性判断准确得多二是上下文压缩从每个片段中只提取与 query 直接相关的内容去掉噪声三是模板设计上最相关的内容放开头和结尾来应对 Lost in the Middle同时显式约束模型信息不足就说不知道。此外检索层面我们通常做混合检索向量检索加 BM25 关键词检索通过 RRF 融合排序效果比纯向量检索好不少。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多文章