AI代码开发宝库系列:RAG中用户提问Query改写技术
在构建智能问答系统时,我们经常会遇到这样的问题:用户说"还有吗?",AI却一脸懵逼用户问"哪个更好?",AI不知道在比较什么用户反问"这不会很贵吧?",AI答非所问用户的查询往往不够明确!而Query改写技术就是解决这个问题的神器!Query改写技术就像AI的"读心术",能让机器真正理解用户想要什么。掌握了这两大神器,你的AI应用将不再是简单的问答机器人,而是真正懂用户的智能助手!💡小贴士。

Query改写技术:让你的AI助手更懂你问的是什么!
🚀 爽文预警:这篇文章将带你快速掌握Query改写技术的精髓,让你的AI应用瞬间提升一个档次!
前言:为什么Query改写如此重要?
在构建智能问答系统时,我们经常会遇到这样的问题:
-
用户说"还有吗?",AI却一脸懵逼
-
用户问"哪个更好?",AI不知道在比较什么
-
用户反问"这不会很贵吧?",AI答非所问
这些问题的根源在于:用户的查询往往不够明确!而Query改写技术就是解决这个问题的神器!
两大神器代码解析
🔥 神器一:通用Query改写器(1-Query改写.py)
这个文件简直就是Query改写的"瑞士军刀",能处理各种复杂查询:
1. 上下文依赖型Query改写
# 用户问:"还有其他设施吗?" # AI理解:用户在问"上海迪士尼疯狂动物城园区还有其他设施吗?"
2. 对比型Query改写
# 用户问:"哪个游玩的时间比较长,比较有趣" # AI理解:用户在比较"上海迪士尼疯狂动物城和蜘蛛侠主题园区哪个游玩时间更长更有趣?"
3. 模糊指代型Query改写
# 用户问:"都什么时候开始?" # AI理解:用户在问"上海迪士尼乐园和香港迪士尼乐园的烟花表演什么时候开始?"
4. 多意图型Query改写
# 用户问:"门票多少钱?需要提前预约吗?停车费怎么收?" # AI分解为: # ["门票多少钱?", "需要提前预约吗?", "停车费怎么收?"]
5. 反问型Query改写
# 用户问:"这不会也要提前一个月预订吧?" # AI理解:用户在问"上海迪士尼乐园门票需要提前多久预订?"
⚡ 神器二:联网搜索Query改写器(2-Query联网搜索改写.py)
这个文件专门处理需要实时信息的查询,比如:
1. 时效性信息查询
# 用户问:"上海迪士尼乐园今天开放吗?现在人多不多?" # AI改写为搜索关键词:"上海迪士尼乐园 2024年10月28日 开放状态 实时人流量"
2. 价格和预订信息查询
# 用户问:"下周六的门票多少钱?需要提前多久预订?" # AI改写为搜索关键词:"上海迪士尼乐园 下周六 门票价格 预订时间要求"
实战演示:迪士尼场景应用
让我们看看这两个神器在迪士尼场景下的实际表现:
场景一:计划游玩
用户:我想去上海迪士尼乐园玩 AI:上海迪士尼乐园是一个很棒的选择! 用户:上海迪士尼乐园今天开放吗?现在人多不多? 神器分析结果: ✓ 需要联网搜索 搜索原因: 包含时效性信息(今天开放吗)和实时状态(现在人多不多) 改写查询: 上海迪士尼乐园 2024年10月28日 开放时间 实时人流量 搜索关键词: ['上海迪士尼乐园', '今日开放状态', '实时人流量']
场景二:购票咨询
用户:下周六的门票多少钱?需要提前多久预订? 神器分析结果: ✓ 需要联网搜索 搜索原因: 包含价格信息(多少钱)和预订信息(需要提前多久预订) 改写查询: 上海迪士尼乐园 下周六 门票价格 预订政策 搜索关键词: ['上海迪士尼乐园', '下周六门票', '价格', '预订要求']
核心代码详解
通用Query改写器核心实现
class QueryRewriter:
def __init__(self, model="qwen-turbo-latest"):
self.model = model
def auto_rewrite_query(self, query, conversation_history="", context_info=""):
"""自动识别Query类型并进行改写"""
instruction = """
你是一个智能的查询分析专家。请分析用户的查询,识别其属于以下哪种类型:
1. 上下文依赖型 - 包含"还有"、"其他"等需要上下文理解的词汇
2. 对比型 - 包含"哪个"、"比较"、"更"、"哪个更好"、"哪个更"等比较词汇
3. 模糊指代型 - 包含"它"、"他们"、"都"、"这个"等指代词
4. 多意图型 - 包含多个独立问题,用"、"或"?"分隔
5. 反问型 - 包含"不会"、"难道"等反问语气
说明:如果同时存在多意图型、模糊指代型,优先级为多意图型>模糊指代型
请返回JSON格式的结果:
{
"query_type": "查询类型",
"rewritten_query": "改写后的查询",
"confidence": "置信度(0-1)"
}
"""
代码解析:
-
类型识别:通过大模型提示词工程,让AI自动识别Query类型
-
优先级处理:定义了多意图型Query的优先级高于模糊指代型
-
结构化输出:统一返回JSON格式,便于后续处理
def auto_rewrite_and_execute(self, query, conversation_history="", context_info=""):
"""自动识别Query类型并进行改写,然后根据类型调用相应的改写方法"""
# 首先进行自动识别
result = self.auto_rewrite_query(query, conversation_history, context_info)
# 根据识别结果调用相应的改写方法
query_type = result.get('query_type', '')
if '上下文依赖' in query_type:
final_result = self.rewrite_context_dependent_query(query, conversation_history)
elif '对比' in query_type:
final_result = self.rewrite_comparative_query(query, context_info or conversation_history)
elif '模糊指代' in query_type:
final_result = self.rewrite_ambiguous_reference_query(query, conversation_history)
elif '多意图' in query_type:
final_result = self.rewrite_multi_intent_query(query)
elif '反问' in query_type:
final_result = self.rewrite_rhetorical_query(query, conversation_history)
else:
# 对于其他类型,返回自动识别的改写结果
final_result = result.get('rewritten_query', query)
return {
"original_query": query,
"detected_type": query_type,
"confidence": result.get('confidence', 0.5),
"rewritten_query": final_result,
"auto_rewrite_result": result
}
代码解析:
-
分层处理:先识别类型,再针对性处理
-
方法分发:根据不同类型调用对应的改写方法
-
结果整合:将原始查询、识别类型、置信度和改写结果统一返回
联网搜索Query改写器核心实现
class WebSearchQueryRewriter: def __init__(self, model="qwen-turbo-latest"): self.model = model def identify_web_search_needs(self, query, conversation_history=""): """识别查询是否需要联网搜索""" instruction = """ 你是一个智能的查询分析专家。请分析用户的查询,判断是否需要联网搜索来获取最新、最准确的信息。 需要联网搜索的情况包括: 1. 时效性信息 - 包含"最新"、"今天"、"现在"、"实时"、"当前"等时间相关词汇 2. 价格信息 - 包含"多少钱"、"价格"、"费用"、"票价"等价格相关词汇 3. 营业信息 - 包含"营业时间"、"开放时间"、"闭园时间"、"是否开放"等营业状态 4. 活动信息 - 包含"活动"、"表演"、"演出"、"节日"、"庆典"等动态信息 5. 天气信息 - 包含"天气"、"下雨"、"温度"等天气相关 6. 交通信息 - 包含"怎么去"、"交通"、"地铁"、"公交"等交通方式 7. 预订信息 - 包含"预订"、"预约"、"购票"、"订票"等预订相关 8. 实时状态 - 包含"排队"、"拥挤"、"人流量"等实时状态
代码解析:
-
智能识别:通过提示词工程,让AI判断哪些查询需要实时信息
-
分类明确:定义了8种需要联网搜索的查询类型
-
置信度评估:返回判断的置信度,便于后续决策
def auto_web_search_rewrite(self, query, conversation_history=""):
"""自动识别并改写为联网搜索查询"""
# 第一步:识别是否需要联网搜索
search_analysis = self.identify_web_search_needs(query, conversation_history)
if not search_analysis.get('need_web_search', False):
return {
"need_web_search": False,
"reason": "查询不需要联网搜索",
"original_query": query
}
# 第二步:改写查询
rewritten_result = self.rewrite_for_web_search(query)
# 第三步:生成搜索策略
search_strategy = self.generate_search_strategy(query)
return {
"need_web_search": True,
"search_reason": search_analysis.get('search_reason', ''),
"confidence": search_analysis.get('confidence', 0.5),
"original_query": query,
"rewritten_query": rewritten_result.get('rewritten_query', query),
"search_keywords": rewritten_result.get('search_keywords', []),
"search_intent": rewritten_result.get('search_intent', ''),
"suggested_sources": rewritten_result.get('suggested_sources', []),
"search_strategy": search_strategy
}
代码解析:
-
三步处理:识别→改写→生成策略,流程清晰
-
早期退出:如果不需要联网搜索,直接返回结果
-
策略完整:不仅改写查询,还生成完整的搜索策略
发展方向展望
🚀 1. 智能化升级
-
自适应学习:根据用户反馈自动优化改写策略
-
个性化改写:根据不同用户的历史行为定制改写方式
🌐 2. 多模态融合
-
图像理解:结合图片内容进行Query改写
-
语音识别:处理语音查询中的模糊表达
🧠 3. 深度理解增强
-
情感分析:识别用户情绪,调整改写策略
-
意图预测:预测用户下一步可能的查询
📱 4. 应用场景拓展
-
电商搜索:商品查询优化
-
医疗问诊:症状描述规范化
-
教育辅导:学习问题精准化
🌍 5. 多语言支持
-
跨语言Query改写:支持多语言查询的相互转换
-
文化适配:根据不同文化背景调整表达方式
技术实现要点
核心技术栈
# 基于通义千问大模型 import dashscope from datetime import datetime import json import re
关键设计思路
-
分层处理:先识别Query类型,再针对性改写
-
上下文感知:充分利用对话历史信息
-
结构化输出:统一的JSON格式便于后续处理
-
置信度评估:量化改写结果的可靠性
结语
Query改写技术就像AI的"读心术",能让机器真正理解用户想要什么。掌握了这两大神器,你的AI应用将不再是简单的问答机器人,而是真正懂用户的智能助手!
💡 小贴士:在实际应用中,建议将这两种改写技术结合使用,先判断Query类型,再决定是否需要联网搜索,最后进行针对性改写。
未来已来,让我们一起用Query改写技术打造更智能的AI应用吧!✨
代码
Query改写\1-Query改写.py
# Query改写使用示例
# 导入依赖库
import dashscope
import os
import json
# 从环境变量中获取 API Key
dashscope.api_key = os.getenv('DASHSCOPE_API_KEY')
# 基于 prompt 生成文本
def get_completion(prompt, model="qwen-turbo-latest"):
messages = [{"role": "user", "content": prompt}]
response = dashscope.Generation.call(
model=model,
messages=messages,
result_format='message',
temperature=0,
)
return response.output.choices[0].message.content
# Query改写功能
class QueryRewriter:
def __init__(self, model="qwen-turbo-latest"):
self.model = model
def rewrite_context_dependent_query(self, current_query, conversation_history):
"""上下文依赖型Query改写"""
instruction = """
你是一个智能的查询优化助手。请分析用户的当前问题以及前序对话历史,判断当前问题是否依赖于上下文。
如果依赖,请将当前问题改写成一个独立的、包含所有必要上下文信息的完整问题。
如果不依赖,直接返回原问题。
"""
prompt = f"""
### 指令 ###
{instruction}
### 对话历史 ###
{conversation_history}
### 当前问题 ###
{current_query}
### 改写后的问题 ###
"""
return get_completion(prompt, self.model)
def rewrite_comparative_query(self, query, context_info):
"""对比型Query改写"""
instruction = """
你是一个查询分析专家。请分析用户的输入和相关的对话上下文,识别出问题中需要进行比较的多个对象。
然后,将原始问题改写成一个更明确、更适合在知识库中检索的对比性查询。
"""
prompt = f"""
### 指令 ###
{instruction}
### 对话历史/上下文信息 ###
{context_info}
### 原始问题 ###
{query}
### 改写后的查询 ###
"""
return get_completion(prompt, self.model)
def rewrite_ambiguous_reference_query(self, current_query, conversation_history):
"""模糊指代型Query改写"""
instruction = """
你是一个消除语言歧义的专家。请分析用户的当前问题和对话历史,找出问题中 "都"、"它"、"这个" 等模糊指代词具体指向的对象。
然后,将这些指代词替换为明确的对象名称,生成一个清晰、无歧义的新问题。
"""
prompt = f"""
### 指令 ###
{instruction}
### 对话历史 ###
{conversation_history}
### 当前问题 ###
{current_query}
### 改写后的问题 ###
"""
return get_completion(prompt, self.model)
def rewrite_multi_intent_query(self, query):
"""多意图型Query改写 - 分解查询"""
instruction = """
你是一个任务分解机器人。请将用户的复杂问题分解成多个独立的、可以单独回答的简单问题。以JSON数组格式输出。
"""
prompt = f"""
### 指令 ###
{instruction}
### 原始问题 ###
{query}
### 分解后的问题列表 ###
请以JSON数组格式输出,例如:["问题1", "问题2", "问题3"]
"""
response = get_completion(prompt, self.model)
try:
return json.loads(response)
except:
return [response]
def rewrite_rhetorical_query(self, current_query, conversation_history):
"""反问型Query改写"""
instruction = """
你是一个沟通理解大师。请分析用户的反问或带有情绪的陈述,识别其背后真实的意图和问题。
然后,将这个反问改写成一个中立、客观、可以直接用于知识库检索的问题。
"""
prompt = f"""
### 指令 ###
{instruction}
### 对话历史 ###
{conversation_history}
### 当前问题 ###
{current_query}
### 改写后的问题 ###
"""
return get_completion(prompt, self.model)
def auto_rewrite_query(self, query, conversation_history="", context_info=""):
"""自动识别Query类型并进行改写"""
instruction = """
你是一个智能的查询分析专家。请分析用户的查询,识别其属于以下哪种类型:
1. 上下文依赖型 - 包含"还有"、"其他"等需要上下文理解的词汇
2. 对比型 - 包含"哪个"、"比较"、"更"、"哪个更好"、"哪个更"等比较词汇
3. 模糊指代型 - 包含"它"、"他们"、"都"、"这个"等指代词
4. 多意图型 - 包含多个独立问题,用"、"或"?"分隔
5. 反问型 - 包含"不会"、"难道"等反问语气
说明:如果同时存在多意图型、模糊指代型,优先级为多意图型>模糊指代型
请返回JSON格式的结果:
{
"query_type": "查询类型",
"rewritten_query": "改写后的查询",
"confidence": "置信度(0-1)"
}
"""
prompt = f"""
### 指令 ###
{instruction}
### 对话历史 ###
{conversation_history}
### 上下文信息 ###
{context_info}
### 原始查询 ###
{query}
### 分析结果 ###
"""
response = get_completion(prompt, self.model)
try:
return json.loads(response)
except:
return {
"query_type": "未知类型",
"rewritten_query": query,
"confidence": 0.5
}
def auto_rewrite_and_execute(self, query, conversation_history="", context_info=""):
"""自动识别Query类型并进行改写,然后根据类型调用相应的改写方法"""
# 首先进行自动识别
result = self.auto_rewrite_query(query, conversation_history, context_info)
# 根据识别结果调用相应的改写方法
query_type = result.get('query_type', '')
if '上下文依赖' in query_type:
final_result = self.rewrite_context_dependent_query(query, conversation_history)
elif '对比' in query_type:
final_result = self.rewrite_comparative_query(query, context_info or conversation_history)
elif '模糊指代' in query_type:
final_result = self.rewrite_ambiguous_reference_query(query, conversation_history)
elif '多意图' in query_type:
final_result = self.rewrite_multi_intent_query(query)
elif '反问' in query_type:
final_result = self.rewrite_rhetorical_query(query, conversation_history)
else:
# 对于其他类型,返回自动识别的改写结果
final_result = result.get('rewritten_query', query)
return {
"original_query": query,
"detected_type": query_type,
"confidence": result.get('confidence', 0.5),
"rewritten_query": final_result,
"auto_rewrite_result": result
}
def main():
# 初始化Query改写器
rewriter = QueryRewriter()
print("=== Query改写功能使用示例(迪士尼主题乐园) ===\n")
# 示例1: 上下文依赖型Query
print("示例1: 上下文依赖型Query")
conversation_history = """
用户: "我想了解一下上海迪士尼乐园的最新项目。"
AI: "上海迪士尼乐园最新推出了'疯狂动物城'主题园区,这里有朱迪警官和尼克狐的互动体验。"
用户: "这个园区有什么游乐设施?"
AI: "'疯狂动物城'园区目前有疯狂动物城警察局、朱迪警官训练营和尼克狐的冰淇淋店等设施。"
"""
current_query = "还有其他设施吗?"
print(f"对话历史: {conversation_history}")
print(f"当前查询: {current_query}")
result = rewriter.rewrite_context_dependent_query(current_query, conversation_history)
print(f"改写结果: {result}\n")
# 示例2: 对比型Query
print("示例2: 对比型Query")
conversation_history = """
用户: "我想了解一下上海迪士尼乐园的最新项目。"
AI: "上海迪士尼乐园最新推出了疯狂动物城主题园区,还有蜘蛛侠主题园区"
"""
current_query = "哪个游玩的时间比较长,比较有趣"
print(f"对话历史: {conversation_history}")
print(f"当前查询: {current_query}")
result = rewriter.rewrite_comparative_query(current_query, conversation_history)
print(f"改写结果: {result}\n")
# 示例3: 模糊指代型Query
print("示例3: 模糊指代型Query")
conversation_history = """
用户: "我想了解一下上海迪士尼乐园和香港迪士尼乐园的烟花表演。"
AI: "好的,上海迪士尼乐园和香港迪士尼乐园都有精彩的烟花表演。"
"""
current_query = "都什么时候开始?"
print(f"对话历史: {conversation_history}")
print(f"当前查询: {current_query}")
result = rewriter.rewrite_ambiguous_reference_query(current_query, conversation_history)
print(f"改写结果: {result}\n")
# 示例4: 多意图型Query
print("示例4: 多意图型Query")
query = "门票多少钱?需要提前预约吗?停车费怎么收?"
print(f"原始查询: {query}")
result = rewriter.rewrite_multi_intent_query(query)
print(f"分解结果: {result}\n")
# 示例5: 反问型Query
print("示例5: 反问型Query")
conversation_history = """
用户: "你好,我想预订下周六上海迪士尼乐园的门票。"
AI: "正在为您查询... 查询到下周六的门票已经售罄。"
用户: "售罄是什么意思?我朋友上周去还能买到当天的票。"
"""
current_query = "这不会也要提前一个月预订吧?"
print(f"对话历史: {conversation_history}")
print(f"当前查询: {current_query}")
result = rewriter.rewrite_rhetorical_query(current_query, conversation_history)
print(f"改写结果: {result}\n")
# 示例6: 自动识别Query类型
print("示例6: 自动识别Query类型")
test_queries = [
"还有其他游乐项目吗?",
"哪个园区更好玩?",
"都适合小朋友吗?",
"有什么餐厅?价格怎么样?",
"这不会也要排队两小时吧?"
]
for i, query in enumerate(test_queries, 1):
print(f"测试查询 {i}: {query}")
result = rewriter.auto_rewrite_query(query)
print(f" 识别类型: {result['query_type']}")
print(f" 改写结果: {result['rewritten_query']}")
print(f" 置信度: {result['confidence']}\n")
if __name__ == "__main__":
main()
Query改写\2-Query联网搜索改写.py
# Query联网搜索改写功能
# 导入依赖库
import dashscope
import os
import json
import re
from datetime import datetime
# 从环境变量中获取 API Key
dashscope.api_key = os.getenv('DASHSCOPE_API_KEY')
# 基于 prompt 生成文本
def get_completion(prompt, model="qwen-turbo-latest"):
messages = [{"role": "user", "content": prompt}]
response = dashscope.Generation.call(
model=model,
messages=messages,
result_format='message',
temperature=0,
)
return response.output.choices[0].message.content
class WebSearchQueryRewriter:
def __init__(self, model="qwen-turbo-latest"):
self.model = model
def identify_web_search_needs(self, query, conversation_history=""):
"""识别查询是否需要联网搜索"""
instruction = """
你是一个智能的查询分析专家。请分析用户的查询,判断是否需要联网搜索来获取最新、最准确的信息。
需要联网搜索的情况包括:
1. 时效性信息 - 包含"最新"、"今天"、"现在"、"实时"、"当前"等时间相关词汇
2. 价格信息 - 包含"多少钱"、"价格"、"费用"、"票价"等价格相关词汇
3. 营业信息 - 包含"营业时间"、"开放时间"、"闭园时间"、"是否开放"等营业状态
4. 活动信息 - 包含"活动"、"表演"、"演出"、"节日"、"庆典"等动态信息
5. 天气信息 - 包含"天气"、"下雨"、"温度"等天气相关
6. 交通信息 - 包含"怎么去"、"交通"、"地铁"、"公交"等交通方式
7. 预订信息 - 包含"预订"、"预约"、"购票"、"订票"等预订相关
8. 实时状态 - 包含"排队"、"拥挤"、"人流量"等实时状态
请返回JSON格式:
{
"need_web_search": true/false,
"search_reason": "需要搜索的原因",
"confidence": "置信度(0-1)"
}
"""
prompt = f"""
### 指令 ###
{instruction}
### 对话历史 ###
{conversation_history}
### 用户查询 ###
{query}
### 分析结果 ###
"""
response = get_completion(prompt, self.model)
try:
return json.loads(response)
except:
return {
"need_web_search": False,
"search_reason": "无法解析",
"confidence": 0.5
}
def rewrite_for_web_search(self, query, search_type="general"):
"""为联网搜索改写查询"""
instruction = """
你是一个专业的搜索查询优化专家。请将用户的查询改写为更适合搜索引擎检索的形式。
改写技巧:
1. 添加具体地点 - 如"上海迪士尼乐园"、"香港迪士尼乐园"
2. 添加时间范围 - 如"2024年"、"今天"、"本周"
3. 使用关键词组合 - 将长句拆分为关键词
4. 添加搜索意图 - 明确搜索目的
5. 去除口语化表达 - 转换为标准搜索词
6. 添加相关词汇 - 增加同义词或相关词
请返回JSON格式:
{
"rewritten_query": "改写后的搜索查询",
"search_keywords": ["关键词1", "关键词2", "关键词3"],
"search_intent": "搜索意图",
"suggested_sources": ["建议搜索的网站类型"]
}
"""
prompt = f"""
### 指令 ###
{instruction}
### 原始查询 ###
{query}
### 搜索类型 ###
{search_type}
### 改写结果 ###
"""
response = get_completion(prompt, self.model)
try:
return json.loads(response)
except:
return {
"rewritten_query": query,
"search_keywords": [query],
"search_intent": "信息查询",
"suggested_sources": ["官方网站", "旅游网站"]
}
def generate_search_strategy(self, query, search_type="general"):
"""生成搜索策略"""
current_date = datetime.now().strftime("%Y年%m月%d日")
instruction = f"""
你是一个搜索策略专家。请为用户的查询制定详细的搜索策略。
当前日期:{current_date}
搜索策略包括:
1. 主要搜索词 - 核心关键词
2. 扩展搜索词 - 相关词汇和同义词
3. 搜索网站 - 推荐的搜索平台
4. 时间范围 - 具体的搜索时间范围
请返回JSON格式:
{{
"primary_keywords": ["主要关键词"],
"extended_keywords": ["扩展关键词"],
"search_platforms": ["搜索平台"],
"time_range": "具体的时间范围"
}}
"""
prompt = f"""
### 指令 ###
{instruction}
### 用户查询 ###
{query}
### 搜索类型 ###
{search_type}
### 搜索策略 ###
"""
response = get_completion(prompt, self.model)
try:
return json.loads(response)
except:
return {
"primary_keywords": [query],
"extended_keywords": [],
"search_platforms": ["百度", "谷歌"],
"time_range": "最近一周"
}
def auto_web_search_rewrite(self, query, conversation_history=""):
"""自动识别并改写为联网搜索查询"""
# 第一步:识别是否需要联网搜索
search_analysis = self.identify_web_search_needs(query, conversation_history)
if not search_analysis.get('need_web_search', False):
return {
"need_web_search": False,
"reason": "查询不需要联网搜索",
"original_query": query
}
# 第二步:改写查询
rewritten_result = self.rewrite_for_web_search(query)
# 第三步:生成搜索策略
search_strategy = self.generate_search_strategy(query)
return {
"need_web_search": True,
"search_reason": search_analysis.get('search_reason', ''),
"confidence": search_analysis.get('confidence', 0.5),
"original_query": query,
"rewritten_query": rewritten_result.get('rewritten_query', query),
"search_keywords": rewritten_result.get('search_keywords', []),
"search_intent": rewritten_result.get('search_intent', ''),
"suggested_sources": rewritten_result.get('suggested_sources', []),
"search_strategy": search_strategy
}
def main():
# 初始化联网搜索Query改写器
web_searcher = WebSearchQueryRewriter()
print("=== Query联网搜索识别与改写示例(迪士尼主题乐园) ===\n")
# 示例1: 时效性信息查询
print("示例1: 时效性信息查询")
conversation_history1 = """
用户: "我想去上海迪士尼乐园玩"
AI: "上海迪士尼乐园是一个很棒的选择!"
"""
query1 = "上海迪士尼乐园今天开放吗?现在人多不多?"
print(f"对话历史: {conversation_history1}")
print(f"当前查询: {query1}")
result1 = web_searcher.auto_web_search_rewrite(query1, conversation_history1)
if result1['need_web_search']:
print(f"✓ 需要联网搜索")
print(f" 搜索原因: {result1['search_reason']}")
print(f" 置信度: {result1['confidence']}")
print(f" 改写查询: {result1['rewritten_query']}")
print(f" 搜索关键词: {result1['search_keywords']}")
print(f" 搜索意图: {result1['search_intent']}")
print(f" 建议来源: {result1['suggested_sources']}")
print(f" 搜索策略:")
print(f" - 主要关键词: {result1['search_strategy']['primary_keywords']}")
print(f" - 扩展关键词: {result1['search_strategy']['extended_keywords']}")
print(f" - 搜索平台: {result1['search_strategy']['search_platforms']}")
print(f" - 时间范围: {result1['search_strategy']['time_range']}")
else:
print(f"✗ 不需要联网搜索")
print(f" 原因: {result1['reason']}")
print("\n" + "="*60 + "\n")
# 示例2: 价格和预订信息查询
print("示例2: 价格和预订信息查询")
query2 = "下周六的门票多少钱?需要提前多久预订?"
print(f"当前查询: {query2}")
result2 = web_searcher.auto_web_search_rewrite(query2)
if result2['need_web_search']:
print(f"✓ 需要联网搜索")
print(f" 搜索原因: {result2['search_reason']}")
print(f" 置信度: {result2['confidence']}")
print(f" 改写查询: {result2['rewritten_query']}")
print(f" 搜索关键词: {result2['search_keywords']}")
print(f" 搜索意图: {result2['search_intent']}")
print(f" 建议来源: {result2['suggested_sources']}")
print(f" 搜索策略:")
print(f" - 主要关键词: {result2['search_strategy']['primary_keywords']}")
print(f" - 扩展关键词: {result2['search_strategy']['extended_keywords']}")
print(f" - 搜索平台: {result2['search_strategy']['search_platforms']}")
print(f" - 时间范围: {result2['search_strategy']['time_range']}")
else:
print(f"✗ 不需要联网搜索")
print(f" 原因: {result2['reason']}")
if __name__ == "__main__":
main()
更多推荐


所有评论(0)