【AI大模型学习路线】第三阶段之RAG与LangChain——第十六章(Advanced RAG[1])MultiQuery retriever详解?

【AI大模型学习路线】第三阶段之RAG与LangChain——第十六章(Advanced RAG[1])MultiQuery retriever详解?

【AI大模型学习路线】第三阶段之RAG与LangChain——第十六章(Advanced RAG[1])MultiQuery retriever详解?


文章目录

  • 【AI大模型学习路线】第三阶段之RAG与LangChain——第十六章(Advanced RAG[1])MultiQuery retriever详解?
    • 一、MultiQueryRetriever 是什么?
      • 目标:提高召回的多样性和覆盖率
    • 二、经典 RAG 检索的局限
    • ✅ 三、Multi-QueryRetriever 的优势
    • ⚙️ 四、架构流程图
    • 五、实战代码:LangChain 中使用 MultiQueryRetriever
    • 六、示例输出说明(自动生成多查询)
    • 七、应用场景
    • 八、大模型发展趋势与 MultiQuery 的结合
    • ✅ 九、总结对比


欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/148185942


一、MultiQueryRetriever 是什么?

Multi-Query Retriever 是一种增强型检索策略:

  • 利用大语言模型(LLM)根据用户原始问题生成多个语义不同但相关的查询子问题,再分别检索内容库,最后聚合所有检索结果。

目标:提高召回的多样性和覆盖率

二、经典 RAG 检索的局限

传统向量检索只根据一个 Query 进行 Top-K 检索,容易:

问题 举例
检索视角单一 只找到问题的一部分答案
召回范围不全 遗漏重要上下文
用户问题含糊 模型理解偏差导致检索偏移

✅ 三、Multi-QueryRetriever 的优势

能力 描述
自动扩展查询 LLM 生成多个相关问题
多路径召回 每个子查询独立执行向量检索
提升语义覆盖 拓宽信息视角,防止遗漏关键知识点
LangChain 原生支持 MultiQueryRetriever 可一键调用

⚙️ 四、架构流程图

[用户Query]
   ↓
LLM生成多个子查询(视角扩展)
   ↓
每个子查询 → 向量检索
   ↓
合并所有结果 → Deduplicate
   ↓
传入 LLM 回答

五、实战代码:LangChain 中使用 MultiQueryRetriever

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.llms import OpenAI
from langchain.retrievers.multi_query import MultiQueryRetriever

# Step 1: 加载和切分文档
loader = TextLoader("data/ai_medical.txt")
docs = loader.load()

splitter = RecursiveCharacterTextSplitter(chunk_size=400, chunk_overlap=50)
docs = splitter.split_documents(docs)

# Step 2: 构建向量数据库
embedding = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embedding)

# Step 3: 构建 MultiQuery Retriever
llm = OpenAI(temperature=0)
retriever = MultiQueryRetriever.from_llm(
    retriever=vectorstore.as_retriever(),
    llm=llm,
    verbose=True  # 输出生成的子查询
)

# Step 4: 测试查询
query = "人工智能在癌症早期检测中的应用有哪些?"
results = retriever.get_relevant_documents(query)

# Step 5: 输出结果
for i, doc in enumerate(results):
    print(f"\n【文档{i+1}】:\n{doc.page_content}")

六、示例输出说明(自动生成多查询)

[MultiQueryRetriever] 生成的子查询:
1. 什么是人工智能在癌症早期检测中的具体应用?
2. 有没有 AI 模型可以识别癌症的早期症状?
3. 在医学影像中,AI 是如何帮助检测癌症的?

  • 这些子查询会分别用于向量检索,最终合并多个视角的内容片段,极大提高召回准确率与全面性。

七、应用场景

场景 MultiQueryRetriever 优势
医疗文献问答 针对疾病、治疗、方法三维提问
法律问答 不同法条、解释路径召回
企业知识库 多岗位视角、多业务线相关信息聚合
多语言查询 自动扩展多语言问法用于检索

八、大模型发展趋势与 MultiQuery 的结合

趋势 MultiQuery作用
LLM Agent 越来越像“提问者” Agent 自动生成子查询用于知识规划
向量检索逐渐融合 hybrid 检索 子查询支持向量+BM25双通道融合
多模态检索 子查询跨模态扩展为图像/视频 caption 检索
上下文感知 Prompt 设计 MultiQuery 与 Chain-of-Prompt 配合更强大

✅ 九、总结对比

特性 单Query Retriever MultiQueryRetriever
Query 来源 用户提供的原始问题 LLM 扩展出的多个子查询
召回多样性 较弱,固定语义路径 强,语义视角多样
文档覆盖率
消耗 快速 稍慢(多次检索)
适合场景 精准问答、简短问题 模糊问题、复杂问题、需探索性查找

你可能感兴趣的:(AI大模型学习路线,人工智能,学习,langchain)