
MultiQueryRetriever 是 LangChain 框架中的一个高级检索器组件,它通过生成多个查询变体来提高检索效果。其核心思想是:单一查询可能无法完全捕捉用户意图,而多个相关查询可以覆盖更广泛的语义空间。
MultiQueryRetriever 在 LangChain 中的实现主要依赖于以下组件:
# 创建基础检索器
base_retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
# 创建MultiQueryRetriever
retriever = MultiQueryRetriever.from_llm(
retriever=base_retriever,
llm=llm
)
# 执行查询
docs = retriever.invoke(query)
原始查询:
我的账户显示异常交易,怎么处理?
生成的查询变体:
1. 如何处理账户中的可疑交易?
2. 银行账户出现未授权交易的解决步骤
3. 发现账户异常交易记录后的处理流程
4. 账户交易异常,需要采取哪些安全措施?
原始查询:
如何解决Docker容器无法连接网络的问题?
生成的查询变体:
1. Docker网络连接故障排查方法
2. 容器网络隔离导致的连接问题解决方案
3. Docker容器网络配置错误修复步骤
4. 如何检查和修复Docker网络桥接问题
原始查询:
客户经理的考核标准是什么?
生成的查询变体:
1. 银行客户经理绩效评估指标有哪些?
2. 客户经理业绩考核的关键指标
3. 如何评价客户经理的工作表现和成效
4. 客户经理岗位的KPI设置和考核方法
以下是一个完整的MultiQueryRetriever使用示例:
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.llms import Tongyi
import os
# 获取API密钥
DASHSCOPE_API_KEY = os.getenv('DASHSCOPE_API_KEY')
if not DASHSCOPE_API_KEY:
raise ValueError("请设置环境变量 DASHSCOPE_API_KEY")
# 初始化语言模型
llm = Tongyi(model_name="deepseek-v3", dashscope_api_key=DASHSCOPE_API_KEY)
# 创建嵌入模型
embeddings = DashScopeEmbeddings(
model="text-embedding-v1",
dashscope_api_key=DASHSCOPE_API_KEY,
)
# 加载向量数据库
vectorstore = FAISS.load_local("./vector_db", embeddings, allow_dangerous_deserialization=True)
# 创建基础检索器
base_retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
# 创建MultiQueryRetriever
retriever = MultiQueryRetriever.from_llm(
retriever=base_retriever,
llm=llm
)
# 示例查询
query = "客户经理的考核标准是什么?"
# 查看生成的查询变体
generated_queries = retriever.generate_queries(query)
print("原始查询:", query)
print("生成的查询变体:")
for i, q in enumerate(generated_queries):
print(f"{i+1}. {q}")
# 执行查询
results = retriever.invoke(query)
# 打印结果
print(f"\n找到 {len(results)} 个相关文档:")
for i, doc in enumerate(results):
print(f"\n文档 {i+1}:")
print(doc.page_content[:200] + "..." if len(doc.page_content) > 200 else doc.page_content)
| 检索方法 | 优点 | 缺点 |
|---|---|---|
| 标准向量检索 | 实现简单,速度快 | 依赖单一查询表述,容易错过相关内容 |
| MultiQueryRetriever | 提高召回率,减少语义鸿沟 | 需要多次查询,增加API调用成本和延迟 |
| HyDE检索 | 生成假设文档,提高相关性 | 依赖LLM生成高质量的假设文档 |
| 自查询检索 | 自动选择检索策略 | 实现复杂,需要更多计算资源 |
MultiQueryRetriever是RAG系统中提高检索质量的重要工具,通过生成多样化的查询表述,有效弥补了用户查询与文档内容之间的语义差距。
还没有评论,登录后来说两句。