Azure Prompt Flow Index Lookup无筛选选项,检索日期过滤失效
Azure Search 精准日期筛选解决方案
针对你遇到的LLM查询返回非目标年份数据的问题,结合Azure Search和Prompt Flow的特性,提供以下可行方案:
一、利用Index Lookup组件的筛选扩展能力
你提到Index Lookup组件没有直接添加筛选的选项,实际上可以通过前置代码节点实现筛选条件注入:
- 在Prompt Flow中添加Python代码节点,放在Index Lookup组件之前
- 编写代码解析用户查询中的时间信息(可通过正则匹配或轻量LLM调用),生成标准OData筛选字符串:
def generate_date_filter(query: str) -> str: # 示例:提取查询中的年份并生成对应日期范围筛选 if "2022" in query.lower(): return "date ge 2022-01-01T00:00:00Z and date lt 2023-01-01T00:00:00Z" # 可扩展其他年份的解析逻辑 return "" - 在Index Lookup组件的高级设置中,找到「筛选器(Filter)」参数,将代码节点输出的筛选字符串绑定到该参数上
二、优化查询结构,避免自然语言混合筛选语法
直接将筛选条件追加到自然语言查询的方式效果不稳定,原因是LLM无法精准识别OData语法,建议采用语义检索+结构化筛选分离的方式:
- 将用户查询拆分为两部分:语义关键词(如"nature books")和筛选条件(日期范围)
- 在Azure Search查询时,用
search参数传递语义关键词,filter参数单独传递日期筛选条件,不将两者混合在自然语言中 - 如果必须通过LLM生成查询,可在Prompt中明确要求输出结构化结果,例如:
请将用户查询拆分为「搜索关键词」和「OData筛选条件」,用|分隔。示例:用户查询"show me books for nature published in year 2022",输出:nature books|date ge 2022-01-01T00:00:00Z and date lt 2023-01-01T00:00:00Z
三、验证基础配置正确性
- 确认Azure Search索引中
date字段的filterable属性设置为true(默认开启,但需检查) - 确保
date字段存储的是标准ISO 8601格式的DateTimeOffset数据(如2022-06-20T10:00:00Z),格式不匹配会导致筛选失效

内容的提问来源于stack exchange,提问作者hss
相关产品推荐
相关产品推荐

