Dify 知识库本身不支持一键对多个关键词执行 AND 检索,但可以通过优化检索策略和借助 API/工作流实现批量操作。以下是三种实用方案:
🎯 方案一:优化单次检索,实现“伪”批量
此方法通过优化单次查询,使其能同时命中多个关键词,适用于在聊天窗口进行多次查询的场景。
1. 启用混合检索
在知识库或应用的检索设置中,务必选择 “混合检索” 模式。这结合了向量检索(理解语义)和全文检索(匹配关键词),能更好地满足多关键词查询需求。
2. 构造“强 AND”语义的提问
-
使用自然语言:将多个关键词组织成一句包含限定关系的话。
- 示例:查询“爆破 粉尘 浓度 标准”,可优化为:“查找金属矿山爆破作业中,粉尘浓度不得超过多少的标准?”
-
利用查询扩展:在知识库高级设置中开启此功能,系统会自动将简短问题扩展为多个相关查询,有助于提升召回率。
3. 巧用元数据过滤(硬过滤)
如果文档已按类别、年份等打上标签,可使用元数据过滤实现精确的 AND 逻辑。
- 添加元数据:为文档添加如
doc_type: "安全规程",mine_type: "露天矿"等标签。 - 配置过滤条件:在应用的“上下文”设置中,添加多个
AND条件,如doc_typeis "安全规程" ANDmine_typecontains "露天矿"。
⚙️ 方案二:通过 API 实现真正的批量查询
当需要对大量关键词(如100个)进行 AND 检索时,可通过 Dify 的 知识库检索 API 在外部程序中实现。
1. 调用检索 API
使用 HTTP POST请求调用 Dify 的知识库检索接口,核心参数包括:
knowledge_base_id: 目标知识库 ID。query: 用户的查询语句。retrieval_model: 检索方法,推荐使用hybrid_search。top_k: 返回的文档数量。score_threshold: 相似度阈值。
2. 在程序中实现 AND 逻辑
在您的脚本(Python/Node.js等)中,循环处理关键词列表,并对每次的 API 返回结果进行“与”运算。
Python 伪代码示例:
python
假设 api_search 是封装好的 Dify 检索函数
def api_search(query: str):
... 调用 Dify API 并返回结果文本列表 ...
return result_texts
keywords = ["爆破", "粉尘", "浓度", "标准"]
result_sets = []
1. 对每个关键词单独检索
for kw in keywords:
result_sets.append(set(api_search(kw)))
2. 对所有结果集取交集,实现 AND 逻辑
final_results = set.intersection(*result_sets)
print("同时满足所有关键词的文档:", final_results)
🔄 方案三:在工作流中实现批量自动化
对于需要定期、定时执行批量 AND 检索的任务(如每日合规检查),推荐使用 Dify 的 工作流 功能。
1. 创建工作流
在 Dify 工作室中新建一个“工作流”应用。
2. 设计流程
- 开始节点:定义一个字符串数组变量,填入所有需要查询的关键词。
- 迭代节点:遍历关键词数组,对每个关键词调用“知识库检索”节点。
- 代码/变量节点:在每次迭代中,将检索结果与一个全局结果集进行“与”运算(取交集),并存入变量。
- 结束节点:输出最终的交集结果。
3. 定时触发
在工作流设置中配置定时触发器(如每天凌晨1点),即可实现全自动的批量 AND 检索任务。