Dify知识库如何实现多关键词AND检索的批量操作?

3 阅读3分钟

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 检索任务。