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

RAG系统中的多查询检索

在 RAG(Retrieval-Augmented Generation)系统中,多查询检索(Multi-Query Retrieval)是一种为了提升检索召回率与鲁棒性的重要策略。它的核心思想是:不只用原始用户问题去检索,而是生成多个不同视角或不同表述的查询,分别检索,然后合并结果。

下面从原理、实现方式、优缺点及适用场景等方面详细说明。


1. 为什么需要多查询检索?

传统 RAG 直接用原始问题检索,可能遇到:

  • 措辞敏感:用户表达方式与文档表述不匹配(如同义词、句式差异)。

  • 信息不全:原始问题过于简略或含歧义,导致召回缺失。

  • 复杂需求:需要结合多个子问题或不同角度的信息。

多查询检索通过查询扩展(Query Expansion)查询改写,增加命中文档的可能性。


2. 常见实现方法

2.1 基于 LLM 生成变体查询

使用 LLM(如 GPT、Claude、Llama)根据原始问题生成N个语义相似但表述不同的查询。

示例 Prompt

text

你是一个查询生成助手。根据用户原始问题,生成 3 个不同角度的搜索查询,以便从知识库中获取更全面的信息。 原始问题:{user_question} 请输出 3 个查询,每行一个。

输出示例

text

查询1:Transformer 模型中的注意力机制如何计算权重? 查询2:自注意力机制在 NLP 中的作用原理 查询3:解释一下 Q、K、V 矩阵在注意力中的计算

2.2 基于规则或模板的扩展

  • 同义词替换(例如:"如何训练模型" → "模型训练方法"

  • 句法变换(主动 ↔ 被动、疑问 ↔ 陈述)

  • 拆解长问题为多个子问题

2.3 伪查询反馈(Pseudo-Relevance Feedback)

  • 先用原始查询检索一批文档

  • 从文档中提取关键词或短语生成新查询

  • 再用新查询检索


3. 检索与合并流程

  1. 生成:原始问题 →Q1, Q2, ..., Qk

  2. 并行检索:每个查询分别从向量库/关键词索引中检索 Top‑m 文档

  3. 去重与合并

    • 按文档 ID 去重

    • 可选策略:按相关性分数重排序(如取最高分、平均分或使用 RRF)

  4. 输入 LLM:合并后的文档作为上下文,生成最终答案


4. 优势

  • 提高召回率:覆盖更多相关文档,尤其适合开放域或专业术语多的场景。

  • 鲁棒性强:某个查询因表述问题无结果,其他查询可弥补。

  • 缓解「一查定终身」问题:避免单一检索路径失效。


5. 缺点与挑战

  • 延迟增加k次检索 → 耗时约为单次检索的k倍(可并行优化)。

  • 噪音引入:可能检索到不相关文档,需合理合并与过滤。

  • LLM 调用成本:生成多个查询需调用 LLM(可缓存在相似场景)。

  • 查询质量依赖:生成效果差的查询反而会稀释有效结果。


6. 与单查询检索的对比

指标单查询检索多查询检索
召回率较低(依赖表述)较高
延迟较高(可并行)
实现复杂度简单需设计查询生成器
适用场景明确、术语固定的查询模糊、多角度、探索性查询

7. 典型应用场景

  • 客服问答:用户口语化问题,知识库用正式文档描述。

  • 科研文献检索:同一概念可能有多种学术表述。

  • 法律/医疗领域:专业术语与日常说法差异大。

  • 长文档问答:需要从不同章节或段落获取信息。


8. 变体与进阶方法

  • 多查询 + 重排序:先用多查询粗召回,再用 cross‑encoder 重排序筛选高相关文档。

  • 自适应多查询:根据原始问题的复杂程度动态决定生成几个查询。

  • HyDE:先让 LLM 生成一个假设性答案,再用该答案去检索(也是一种查询扩展思路)。


9. 代码示例(概念性,使用 LangChain)

python

from langchain.retrievers.multi_query import MultiQueryRetriever from langchain.llms import OpenAI from langchain.vectorstores import FAISS # 假设已有向量库 vectorstore llm = OpenAI(temperature=0) retriever = MultiQueryRetriever.from_llm( retriever=vectorstore.as_retriever(), llm=llm, num_queries=3 # 生成3个查询 ) docs = retriever.get_relevant_documents("用户原始问题")

总结

多查询检索是一种简单有效的 RAG 增强策略,通过查询多样性来弥补单次检索的不足。它尤其适合用户表达灵活、知识库内容覆盖面广且表述不唯一的场景。实际应用中需权衡召回提升与延迟/成本的增加,并可结合重排序、缓存等技术优化。

http://www.jsqmd.com/news/599953/

相关文章:

  • 如何利用秒排 seo 快速提升关键词排名
  • 基于Python的学生宿舍管理系统毕业设计源码
  • 二进制、八进制与十六进制在嵌入式开发中的核心应用
  • 【26年四级最新】英语四级高频核心词汇1500+真题PDF电子版
  • 人工 SEO 需要什么样的专业知识和技能_人工 SEO 和内容优化有什么联系
  • 金融数据接口实战应用指南:从认知到深化的AKShare全流程解析
  • OpenClaw+千问3.5-9B个人健康助手:分析运动手环数据生成周报
  • 2026成都墙体拆除品牌TOP推荐指南 - 优质品牌商家
  • 什么是 SEM (Search Engine Marketing)_如何利用分析工具优化 SEM 和 SEO 策略
  • 绝地求生终极压枪方案:罗技鼠标宏完全配置指南
  • 【手势姿态估计】技术演进与应用场景全景解析
  • 实战演练:基于快马平台与zeroclaw理念构建高性能个人博客系统
  • 告别重复劳动:用快马平台智能整合opencode,打造专属效率工具库
  • SEO_2024年最新SEO趋势与实战操作指南
  • 3步完成模型切换:OpenClaw快速对接不同Qwen3-32B镜像实例
  • OpenClaw自动化利器:SecGPT-14B每天自动巡检服务器安全
  • 2026年比较好的卷材抛光去毛刺机口碑好的厂家推荐 - 品牌宣传支持者
  • Go的unsafe.Slice和unsafe.SliceData:切片与底层数组的转换
  • 5个革新方案:BetterJoy实现Switch手柄全场景PC适配
  • 南京家庭个人同城桶装水配送服务商推荐 - 优质品牌商家
  • 高光谱数据去噪利器:移动窗口平均平滑算法详解
  • Omni-Vision Sanctuary C++高性能推理实战:工业级部署优化
  • EMQX服务器搭好了,设备怎么连?一份给STM32+ESP32组合的MQTT接入避坑指南
  • OpenClaw调用千问3.5-27B省钱指南:自建接口替代OpenAI API
  • XXMI Launcher:开源多游戏模型管理平台的一站式解决方案
  • 公司网站SEO优化需要定期优化调整吗
  • 如何利用Xshell和Xftp高效完成openGauss数据库的远程安装与配置
  • OpenClaw小团队协作:Kimi-VL-A3B-Thinking共享模型的经济部署
  • 一根线管理多个芯片:FPGA驱动DS2431和DS2408的1-Wire多器件寻址实战
  • OpenClaw多通道接入:千问3.5-27B同时服务飞书与钉钉机器人