游乐游手机版
首页/AI热点日报/热点详情

Dify知识库元数据与过滤检索实战

类型:热点整理2026-06-08
在日常业务场景中,我们常常会遇到这样的需求:客服团队只希望查阅财务部的政策文件,研发人员想要自动屏蔽已过期的技术文档,销售在系统中提问时系统能自动跳过人事制度类内容。这些需求看似具体,但依靠人工筛选效率极为低下,必须在检索源头实现精准拦截与定向放行。Dify的元数据过滤功能正是为解决这类问题而设计的

在日常业务场景中,我们常常会遇到这样的需求:客服团队只希望查阅财务部的政策文件,研发人员想要自动屏蔽已过期的技术文档,销售在系统中提问时系统能自动跳过人事制度类内容。这些需求看似具体,但依靠人工筛选效率极为低下,必须在检索源头实现精准拦截与定向放行。Dify的元数据过滤功能正是为解决这类问题而设计的。

这套功能的核心操作逻辑其实非常清晰:先创建元数据字段,再批量给文档打上标签,最后在知识检索节点中配置过滤条件。整套流程完成后,即可实现按部门、文档类型、时间等多维度的精准检索。

第一步:设计并创建元数据字段

进入你的知识库,点击右上角的「设置」,找到「元数据」标签页,然后点击「新建元数据」。
这里有一点需要特别注意:为每个业务维度单独创建一个字段,字段名的命名必须遵守一套严格的规则——全英文、全小写,单词之间用下划线连接。例如 department、doc_type、effective_date 这种格式。如果使用了中文字段名,后续的过滤条件将直接失效,这一点在初期规划时就应当充分考虑。

字段类型的选择需要根据场景确定:部门名称、文档类型这类适合用「字符串」;保密等级、版本号等适合用「数字」;生效时间、发布日期适合用「时间」。特别提醒一下,时间字段必须填写标准ISO格式,比如 2024-03-15 或者 2024-03-15T09:00:00。格式一旦出错,过滤功能将没有任何反应,很多用户都在这一步遇到过问题。

第二步:批量为文档打标

回到知识库的文档列表页,勾选多个文档,点击底部的「元数据」按钮,在弹窗中为每个字段填入对应的值。

这里有两种方式可供选择:
方法一:手动填写。适用于文档数量不多、且每个文档的标签差异较大的场景,比如每份合同归属不同的客户。但要注意,字符串的值必须严格匹配,“财务部”不等于“财务”,也不等于“finance”,连大小写和空格都会影响过滤结果,填写时务必仔细核对。
方法二:上传CSV批量注入。如果文档量较大,推荐使用这个方式。准备一个CSV文件,第一行写上字段名(例如 department,doc_type,effective_date),后面每行对应一份文档的标签值。Dify支持直接拖入文件完成批量赋值,效率至少提升10倍。

第三步:在知识检索节点中启用过滤

进入工作流编辑器,找到「知识检索」节点,展开「高级设置」,开启「元数据过滤」开关。
接下来设置过滤条件:
① 点击「+ 添加条件」,字段选 department,操作符选「等于」,值填写“财务部”。
② 再点击「+ 添加条件」,字段选 doc_type,操作符选「包含」,值填写“政策”。
③ 接着添加第三个条件,字段选 effective_date,操作符选「大于等于」,值填写 2024-01-01。

默认情况下,这三个条件之间是「且」的关系,系统只会返回同时满足这三项的文档。如果你想改为「或」的逻辑,则需要通过代码节点去调用API,图形界面并不支持切换。

操作本身并不复杂,直接将文件拖入即可。

第四步:验证过滤是否生效

保存工作流之后,点击右上角的「调试」,输入任意测试问题,例如“最新报销流程是什么?”,然后查看右侧的「检索上下文」面板。
最直接的验证方式:如果返回的文档全部来自财务部、类型包含“政策”、且创建时间在2024年之后,说明过滤已成功生效。一旦出现任何不符合预期的文档,就要立刻回头检查:对应文档的元数据值是否拼写一致?时间格式是否符合规范?字段名是否全小写且没有空格?

另外要注意,调试模式下不会触发权限控制,它只验证检索范围。真正要实现部门级的访问隔离,还需要配合用户角色配置,才能做到精细化的权限管控。

来源:https://www.php.cn/faq/2598050.html?uid=1589237

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。