趋近智
尽管选择和优化向量 (vector)存储与索引策略是生产级 RAG 的主要考量,但要获得高质量结果,通常需要改进 搜索内容 和 检索结果的排序方式。纯粹基于向量相似度的初步检索,虽然高效,但可能无法完全捕捉用户意图或呈现从候选集中最相关的信息。本文将剖析通过查询转换和结果重排来提升检索关联性的方法。
用户查询可能模糊、过于简洁或缺乏足够背景,不利于有效的语义搜索。查询转换方法旨在将原始用户查询调整为一个或多个优化查询,这些查询更有可能从向量 (vector)存储中产生相关文档。
最简单的形式是使用相关术语或理念(通常借助 LLM)来扩展查询。目的是稍微扩大搜索范围,以找到可能使用不同术语表达相同理念的文档。
例如,用户查询“RAG 性能问题”可以由 LLM 扩展为包含“检索增强生成 (RAG)延迟”、“向量搜索优化”、“RAG 吞吐量 (throughput)瓶颈”或“索引效率”等术语。
MultiQueryRetriever 是一个标准实现,它自动化此过程,生成查询的多个变体以扩大搜索范围。复杂的用户问题通常包含多个子问题。尝试通过一次检索来回答它们可能效率不高。查询分解将一个复杂查询分解成几个更简单、独立的子查询。每个子查询针对检索器执行,然后对结果进行综合(通常通过最终的 LLM 调用)以生成全面的回答。
考虑查询:“LangChain 中上下文 (context)窗口管理策略和持久化内存存储有何区别?”
这可以分解为:
HyDE 采用不同方法。它不修改查询文本,而是使用 LLM 生成一个能完美回应用户查询的文档或回答。该文档随后被嵌入,其嵌入被用于搜索向量存储。假设是,一个完美回答的嵌入将在向量空间中更接近相关文档的嵌入。
初步检索方法,如向量 (vector)相似度搜索,针对大规模语料库的速度和召回率进行了优化。它们通常返回 k 个候选文档(例如,前 20 个)。然而,与查询最相关的文档可能分散在此初步集合中,不一定排在最前面。重排引入了第二个计算密集度更高的阶段,以基于更细致的关联性评估来重新排列这些初步候选文档。
修改后的 RAG 流程,包含了可选的查询转换以及初步检索后的强制重排阶段。
不同于初步检索中使用的双编码器(它们独立嵌入 (embedding)查询和文档),交叉编码器将查询和候选文档 一起 作为单个输入处理。这使得模型能够直接比较查询和文档文本,从而得到更准确的关联性评分。
(查询, 文档文本) 作为输入,并输出一个表示关联性的分数(例如,0 到 1 之间)。您为初步检索到的每个 top-k 候选文档运行此评分过程。cross-encoder/ms-marco-MiniLM-L-6-v2)或现代先进选项,如 BAAI/bge-reranker。像 Cohere Rerank 这样的托管 API 也可作为强大的远程交叉编码器使用,在无需本地基础设施管理的情况下提供高性能。k 个文档,将每个 (查询, 文档) 对传递给模型,并根据输出分数进行排序。LangChain 的 ContextualCompressionRetriever 支持本地 Hugging Face 嵌入和基于 API 的集成,如 CohereRerank。您可以使用强大的 LLM 本身来执行重排。这包含使用原始查询和每个候选文档的内容(或相关片段)提示 LLM,并要求它评估关联性,或许通过分配分数或分类判断(例如,“高度相关”、“有点相关”、“不相关”)。
重排不限于语义关联 (semantic relationship)性。您可以将交叉编码器或 LLM 的语义分数与其他信号结合起来:
最终排名可以通过这些分数的加权组合来确定。公式可能很简单,例如 ,或者涉及一个更复杂的学习排序 (LTR) 模型,该模型根据您的具体数据和关联性标准进行训练。
查询转换和重排是互补的。转换查询有助于提高快速双编码器检索到的初步候选集的 质量。重排随后细致地排序这个改进的候选集,将最匹配的结果排到最前面。同时使用这两种方法可以带来显著改进,提高 LLM 生成时提供的最终背景信息。
N 个(例如 10-20 个)候选文档应用重排是平衡准确度和速度的常见策略。如果延迟很要紧,可以考虑使用更小、更快的交叉编码器模型。通过策略性地应用查询转换和重排,您可以显著提升 RAG 系统的关联性和准确性,从基本的语义相似性转向为 LLM 提供更准确、更符合语境的信息。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•