必须用元数据作为前置闸门:①创建product_line、doc_status、version等英文小写字段;②上传前批量打标,严格匹配大小写与格式;③检索节点配置三条件过滤(S6850且verified且version≥2.0),确保仅返回目标文档。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让知识库只返回S6850产品线的已验证配置手册、排除S12500草稿文档和旧版本内容,就必须绕过默认的全量向量扫描,用元数据作为前置闸门——它不是锦上添花的附加项,而是决定检索是否成立的第一道硬性条件。
创建并绑定元数据字段
进入Dify控制台 → 点击左侧【知识库】→ 选择目标知识库 → 点击右上角【元数据】按钮 → 点击【新建元数据】。
字段名称必须用英文小写+下划线组合,例如 【product_line】、【doc_status】、【version】。中文字段名会导致后续所有过滤条件静默失效。
类型按需选择:product_line 和 doc_status 选「字符串」;version 选「数字」。时间类字段如 effective_date 必须用 ISO 格式(2024-03-15),否则过滤完全不触发。
这一步必须在上传文档前或批量编辑时完成。Dify不支持对已入库文档动态追加新元数据字段——漏建即无法补救。
为文档批量打标
方法一:手动填写
适用于单份合同、特殊审批文件等标签高度离散的场景。勾选文档 → 点击底部【元数据】按钮 → 在弹窗中逐个填入值。注意:【“S6850”≠“s6850”≠“S6850 ”(尾部空格)】,大小写、空格、全半角全部参与精确匹配。
方法二:CSV批量注入
准备CSV文件,首行为字段名(product_line,doc_status,version),第二行起每行对应一份文档。Dify会严格按列名映射,字段名错一位或大小写不一致,整列值将被丢弃。拖入后立即生效,无需点击确认。
方法三:API自动打标(适合CI/CD集成)
调用 /v1/knowledge-bases/{kb_id}/documents/{doc_id}/metadata 接口 PUT 提交 JSON,字段值必须与前端定义的类型一致。若 version 字段传字符串 "2.0" 而非数字 2.0,过滤将静默返回空结果且不报错——这是最隐蔽的坑。
在知识检索节点中配置多条件过滤
第一步:进入工作流编辑器 → 找到【知识检索】节点 → 展开【高级设置】→ 开启【元数据筛选】开关。
第二步:添加三个过滤条件,系统默认为「且」关系:
① 字段选 product_line → 操作符选「等于」→ 值填 S6850
② 字段选 doc_status → 操作符选「等于」→ 值填 verified
③ 字段选 version → 操作符选「大于等于」→ 值填 2.0
这三个条件构成确定性闸门:只有同时满足 S6850 + verified + ≥2.0 的文档,才会进入向量检索环节。其余全部拦截,不参与任何相似度计算。
注意:图形界面不支持「或」逻辑。若需“S6850 或 S10500”,必须改用代码节点调用 API 实现,否则会误召无关文档。
验证过滤效果与噪声归零
在工作流调试面板输入查询:“STP 环路如何避免”。观察右侧【检索结果】面板的原始输出。
不过滤时:8 段结果中 6 段来自 S12500 和 draft 文档,噪声率 75%。
启用上述三条件过滤后:结果仅显示 S6850 的 verified 配置手册片段,共 3 段,噪声率为 0。
点击任一片段右侧的【元数据】图标,确认其 product_line、doc_status、version 值与过滤条件完全一致——这是验证是否真正生效的唯一可靠方式。











