如何使用AzureAISearchRetriever实现混合搜索的对话式RAG?
使用AzureAISearchRetriever实现混合搜索
核心思路
Azure AI Search的混合搜索需要结合关键词搜索与语义搜索的结果,通过AzureAISearchRetriever可配置对应检索参数实现这一需求,核心是利用Azure AI Search的query_type、semantic_configuration_name及原生搜索参数组合两种搜索逻辑。
具体实现步骤
初始化检索器时配置混合搜索参数
创建AzureAISearchRetriever实例时,指定query_type为"semantic",同时通过search_parameters传递Azure AI Search原生参数,实现关键词与语义搜索的混合。示例代码:
from langchain_community.retrievers import AzureAISearchRetriever retriever = AzureAISearchRetriever( service_name="你的Azure搜索服务名", api_key="你的API密钥", index_name="你的索引名", query_type="semantic", semantic_configuration_name="你的语义配置名", # 需提前在Azure门户配置语义规则 search_parameters={ "queryType": "semantic", "semanticConfiguration": "你的语义配置名", "speller": "lexicon", "scoringProfile": "自定义评分配置名" # 用于调整两种搜索的权重占比 } )通过评分配置自定义混合权重
若需精细控制关键词与语义搜索的权重比例,需在Azure AI Search索引中创建评分配置:- 在配置中为关键词搜索的
search.score和语义搜索的semantic.score设置不同权重系数 - 例如设置关键词权重0.4、语义权重0.6,实现混合排序逻辑
- 在配置中为关键词搜索的
结合对话历史优化检索
针对对话式RAG,需将对话历史拼接进检索查询,确保结果匹配上下文:def generate_retrieval_query(chat_history, user_question): # 拼接对话历史与当前问题生成检索用查询 combined_query = f"对话历史:{chat_history}\n用户问题:{user_question}" return combined_query # 生成查询并执行检索 query = generate_retrieval_query(chat_history_list, current_question) relevant_docs = retriever.invoke(query)
关键说明
- 需提前在Azure AI Search门户配置语义配置,指定语义字段与语言,否则无法启用语义搜索
search_parameters支持传递Azure AI Search REST API的所有原生参数,可按需调整混合搜索细节- 若不需要语义问答提取功能,可省略
answers类参数,仅保留基础混合排序逻辑
内容的提问来源于stack exchange,提问作者zooes
相关产品推荐
相关产品推荐

