必须用元数据作为前置闸门才能精准检索市场部合同模板:第一步创建department字符串元数据字段;第二步为文档批量标注部门值且须逐字一致;第三步在知识检索节点启用元数据筛选并设department="市场部";第四步可选UUID会话隔离、时间范围或权限等级等动态过滤。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让知识库只返回市场部的合同模板、排除法务部的旧版条款、且不混入技术文档,就必须绕过默认的全量向量扫描,用元数据作为前置闸门——它不是锦上添花的附加项,而是决定检索是否成立的第一道硬性条件。
第一步:创建并绑定元数据字段
进入Dify控制台 → 点击左侧【知识库】→ 选择目标知识库 → 点击右上角【元数据】按钮 → 点击【新建元数据】。
字段名称填 【department】,类型选「字符串」,描述可写“文档所属业务部门”,点击保存。
这一步必须在上传文档前或批量编辑时完成,否则后续无法为已有文档补全该字段值——Dify不支持对已入库文档动态追加元数据字段。
第二步:给文档打标签
回到知识库文档列表,勾选所有市场部相关文件(如《2025市场推广协议模板》《品牌合作SOP_v3》)→ 点击【批量编辑】→ 在弹出面板中找到刚建好的 department 字段 → 输入值 【市场部】 → 确认提交。
同理,为法务部文档填入 【法务部】,技术文档填入 【技术中心】。留空或填错大小写(如“市场部 ”带空格、“市场bu”拼写错误)会导致过滤完全失效。
注意:中文元数据值无需引号,但必须与检索节点中填写的值**逐字完全一致**,包括标点、空格、全半角。
第三步:在工作流中启用元数据筛选
打开对应应用的工作流编辑器 → 找到【知识检索】节点 → 展开【高级设置】→ 开启【元数据筛选】开关。
点击【添加过滤条件】→ 字段选 department → 操作符选 = → 值填 市场部。
若需多条件组合,例如只查“市场部 + 状态为 active”的文档,则再点一次【添加过滤条件】→ 字段选 status → 操作符选 = → 值填 active。
这一步生效后,Dify会在向量检索前先执行SQL式过滤,仅将 department="市场部" 的文档送入向量库计算相似度——从根源上砍掉无关文档的参与资格,而非靠Score阈值事后剔除。
第四步:动态切换检索范围(进阶)
方法一:用UUID做会话级隔离
在工作流开头插入【代码】节点,运行Python脚本生成唯一batch_id:
import uuid
batch_id = uuid.uuid4().hex
return {"query_batch_id": batch_id}
再接一个【知识检索】节点,在元数据筛选中设 query_batch_id = {{query_batch_id}} ——每次提问都会触发新ID,确保不同用户/会话互不干扰。
方法二:用时间元数据限定时效
为文档添加 create_date 元数据(类型选「时间」),值格式为 2025-06-01。
在检索节点中设 create_date >= "2025-01-01",即可自动排除2025年前的所有文档,无需手动下架。
方法三:用数字元数据控制权限
设 privacy_level 元数据(类型「数字」),值为1~10。
在检索节点中设 privacy_level
第五步:验证过滤是否生效
在知识检索节点右侧点击【调试】→ 输入测试问题(如“最新版市场合作协议怎么签?”)→ 查看输出中的 retrieved_documents 列表。
如果返回结果里出现任何 department ≠ "市场部" 的文档,说明元数据字段名拼错、值未填、或筛选条件未启用——此时不要调Score阈值,先回第二步检查字段绑定状态。
成功时,retrieved_documents 数量应明显少于全库文档总数,且每条的 metadata 字段中 department 值严格等于设定值。


















