当用户在您的检索增强生成(RAG)系统中进行查询时,他们的查询往往只是初步的语句,并非获取知识库中完整信息的理想方式。查询可能简短、模糊,使用的词汇与您的文档不同,或者未能准确表达真实的信息需求。这时,查询增强就显得重要。它是一套旨在优化、扩展或改写原始用户查询的技术,以提高其在检索阶段匹配相关文档的几率。通过智能地调整查询,您可以弥合用户意图与文档集合之间的语义差异,从而为生成器提供更准确、全面的上下文。有效的查询增强可以显著减少“未找到相关内容”的情况,并直接提升最终生成回答的质量。下面我们来讨论主要策略:查询扩展和查询改写。查询扩展:扩大搜索范围查询扩展旨在通过添加新词或短语来丰富原始查询。这有助于检索到可能使用同义词、相关术语或对同一概念有不同表达的文档。目标是撒下更广但仍相关的搜索网。同义词与缩写词扩展最直接的扩展方法之一是识别查询中的词语并添加其同义词。例如,如果用户查询“如何修复RAG延迟”,扩展后的查询可能包含“如何解决RAG响应时间问题”或“RAG性能延迟故障排除”。同义词来源包括:通用同义词典: WordNet是一个典型例子。特定领域词典: 对于专业领域,定制的同义词和术语词典非常宝贵。例如,在医疗RAG中,“心肌梗死”可以扩展为“心脏病发作”。基于嵌入的相似性: 您可以查找在向量空间中嵌入与查询词相近的词语。这通常能发现一些细微的语义关联。同样,缩写词和简称在查询和文档中很常见。“LLM”理想情况下应与提及“大型语言模型”的文档匹配,反之亦然。系统会维护这些映射关系:“AWS RAG设置” -> “Amazon Web Services检索增强生成设置”“GDPR合规性” -> “通用数据保护条例合规性”尽管功能强大,但不加区分的同义词扩展有时可能导致查询漂移,即扩展后的查询偏离了原始意图。上下文很关键。将“bank”作为“金融机构”的同义词添加是可行的,但如果查询是关于“河岸”,那就有问题了。因此,需要仔细选择或对扩展词进行加权。相关术语扩展除了直接同义词外,您还可以使用语义相关的术语来扩展查询。当用户的初始查询宽泛或使用高层术语时,这种方法尤其有用。例如,关于“可持续能源”的查询可以扩展到包括“太阳能”、“风力涡轮机”、“地热能”或“可再生资源”。查找相关术语的方法包括:语料分析: 分析文档集中词语的共现模式可以显示出很强的关系。知识图谱: 如果您的RAG系统能够访问知识图谱,您可以从查询实体遍历关系以查找相关实体和属性。(我们将在“集成知识图谱以增强检索”中更详细地讨论知识图谱集成。)基于LLM的生成: 您可以用原始查询来提示LLM,让它生成一个相关主题或关键词列表。例如: 原始查询:“向量数据库索引的最佳实践。” LLM生成的相关术语:“ANN算法”、“HNSW”、“IVFADC”、“向量相似性搜索”、“嵌入存储。”以下图示说明了不同的扩展技术如何增强初始查询:digraph G { rankdir=LR; node [shape=box, style="rounded,filled", fontname="Arial", fontsize=10, color="#495057", fillcolor="#e9ecef", fontcolor="#343a40"]; edge [fontname="Arial", fontsize=9, color="#868e96"]; orig_query [label="原始查询:\n'安全LLM部署'"]; subgraph cluster_expansion { label = "增强的查询"; labelloc="t"; style="filled"; color="#dee2e6"; node [fillcolor="#f8f9fa"]; synonym_expanded [label="同义词扩展:\n'安全大型语言模型实施'"]; acronym_expanded [label="缩写词扩展:\n'安全大型语言模型部署'"]; related_term_expanded [label="相关术语扩展:\n'LLM安全最佳实践',\n'保护生产环境中的AI模型',\n'模型推理安全'"]; } orig_query -> synonym_expanded [label="同义词", fontcolor="#1c7ed6"]; orig_query -> acronym_expanded [label="缩写词", fontcolor="#7048e8"]; orig_query -> related_term_expanded [label="相关术语", fontcolor="#0ca678"]; }一个图示,说明如何使用同义词、缩写词和相关术语扩展来增强初始用户查询。子查询生成复杂的用户查询通常将多个问题或方面包含在单个句子中。例如,“在RAG系统中用于金融文档分析时,使用不同重排序模型的性能和成本影响是什么?”这个查询暗含着对性能、成本、重排序模型、RAG系统和金融文档的询问。将此类查询分解为更简单的子查询,可以针对每个方面进行更具针对性的检索。LLM在这方面非常有效:原始查询:“比较混合搜索与密集检索在医疗RAG系统中的准确性和延迟。”LLM生成的子查询:“医疗RAG系统中混合搜索的准确性”“医疗RAG系统中混合搜索的延迟”“医疗RAG系统中密集检索的准确性”“医疗RAG系统中密集检索的延迟”“混合搜索与密集检索在医疗RAG中的比较”这些子查询的结果随后可以汇总或处理,以综合生成对原始复杂查询的回答。当您的文档粒度较细,并且涉及主题的特定方面而非提供全面概述时,这种方法会尤其有利。查询改写:为更好地理解而调整查询改写调整原始查询的结构或措辞,而不仅仅是添加词语。其目的通常是使查询更贴近文档集合中使用的语言,或生成一种对相似性搜索更有效的表示形式。拼写更正与规范化这是一个基本的预处理步骤。打字错误、拼写错误和不一致的大小写很容易导致检索失败。拼写更正: 使用如Levenshtein距离结合词典的算法,或预训练的拼写更正模型。规范化: 将文本转换为一致的大小写(例如,小写),删除标点符号(或一致处理),并标准化变体(例如,将“e-mail”改为“email”)。虽然看似基础,但拼写更正和规范化对于用户输入不受限制的生产系统极为重要。查询重写与改写有时,用户的措辞尽管语法正确,但可能不是最适合检索的。可以利用LLM将查询重写或改写为可能产生更好结果的其他形式。原始查询:“我的RAG太慢了,该怎么办?” LLM改写后的查询:“RAG系统中降低延迟的方法。”“优化检索增强生成管道的性能。”“如何提升RAG系统响应时间?”这些改写后的查询使用更正式和描述性的语言,这通常更接近技术文档或研究论文中可能构成您知识库的术语。您可以随后使用原始查询和一个或多个改写版本进行搜索,并可能结合结果。文档嵌入(HyDE)HyDE是一种更为先进的改写技术,它表现出很大的潜力。HyDE不是直接嵌入(通常简短且关键词多的)用户查询,而是使用LLM生成一份回答该查询的文档。这份生成文档内容更详尽、上下文更丰富,随后将其嵌入,并使用其嵌入向量来搜索向量存储库。其原理是,理想的回答文档在嵌入空间中,可能比简洁的原始查询更接近实际的相关文档。处理流程如下:用户查询: 例如,“多向量嵌入对RAG的优点”LLM生成文档: 提示LLM:“生成一个简洁的段落,解释在RAG系统中使用多向量嵌入的优点。”LLM输出(文档): “多向量嵌入通过捕获单一文档中不同方面或更细粒度的信息来增强RAG系统。这使得检索更为详细,因为查询可以匹配特定的子上下文而非仅是文档的整体主题,从而提高搜索结果的贴切性并减少歧义,特别是对于复杂或多方面的文档。”嵌入文档: 使用您选择的嵌入模型将此生成段落转换为嵌入向量。检索: 使用此嵌入来查询您实际文档嵌入的向量数据库。HyDE处理流程图示如下:digraph G { rankdir=TB; node [shape=box, style="rounded,filled", fontname="Arial", fontsize=10, fillcolor="#e9ecef", color="#495057", fontcolor="#343a40"]; edge [fontname="Arial", fontsize=9, color="#868e96"]; query [label="用户查询\n'高级RAG评估'"]; llm_hyde [label="LLM\n(HyDE生成器)", fillcolor="#d0bfff"]; hypo_doc [label="生成的\n文档\n(例如,“高级RAG评估包括……”)"]; embedding_model [label="嵌入模型", fillcolor="#a5d8ff"]; hypo_embedding [label="嵌入向量"]; vector_db [label="向量数据库\n(实际文档嵌入)"]; retrieved_docs [label="检索到的\n相关文档"]; query -> llm_hyde [label="输入", fontcolor="#7048e8"]; llm_hyde -> hypo_doc [label="生成", fontcolor="#7048e8"]; hypo_doc -> embedding_model [label="嵌入输入", fontcolor="#1c7ed6"]; embedding_model -> hypo_embedding [label="创建", fontcolor="#1c7ed6"]; hypo_embedding -> vector_db [label="相似性搜索", fontcolor="#1c7ed6"]; vector_db -> retrieved_docs [label="返回", fontcolor="#1c7ed6"]; }文档嵌入(HyDE)的处理流程。LLM生成对用户查询的回答。这份文档随后被嵌入,并用于对实际文档集合进行检索。当查询抽象或查询与文档之间存在明显的词汇不匹配时,HyDE尤其有效。生成的文档充当了“语义桥梁”。查询增强的实施考量尽管查询增强带来了强大的益处,但它并非万灵药,需要谨慎实施。管理查询漂移: 扩展的主要风险是查询漂移,即增强后的查询偏离原始意图过多,从而引起不贴切的结果。解决方案:加权: 在检索时,赋予原始查询词比扩展词更高的权重。选择性扩展: 使用领域知识或置信度分数来决定添加哪些词。重排序: 使用重排序器(在“高级重排序架构以提升贴切性”中讨论)来评估原始查询和增强查询的结果,并选择最佳结果。延迟: 每个增强步骤,尤其是涉及LLM调用(如HyDE或基于LLM的改写)的步骤,都会增加检索管道的延迟。解决方案:高效LLM: 如果不需要完全强大的能力,可以使用更小、更快的LLM来执行增强任务。缓存: 缓存频繁的增强结果或文档。并行化: 如果资源允许,可以尝试并行运行原始查询检索和增强查询检索。复杂性: 实施和维护多种增强策略会增加RAG系统的复杂性。解决方案: 从较简单的技术(例如,从精选列表中进行同义词扩展,基本拼写检查)开始,然后逐步添加更高级的技术。监控每项新增功能的影响。成本: 基于LLM的增强会产生API成本。解决方案: 评估成本效益。有时,更简单的非LLM增强可能就已足够。尽可能使用经济高效的模型。领域特定性: 通用增强工具可能不理想。根据您的特定范围微调同义词列表、相关术语,甚至用于增强的LLM,可以产生更好的结果。评估的重要性: 始终评估查询增强对检索指标(准确率、召回率、nDCG等)和端到端RAG质量的影响。通过A/B测试不同的增强策略,为您的特定使用场景和数据找到最有效的方法。查询增强是一个活跃的领域,技术的选择将取决于您的RAG系统的具体要求、数据的性质以及用户查询的特点。通过周密地扩展和改写查询,您可以使RAG系统更好地理解用户意图,并检索到最贴切的信息,从而为高质量的生成奠定更坚实的基础。