文档自动打标签这事儿,说白了就是让机器代替人工去翻看内容、判断类型。Dify提供了一套还算优雅的方案:先建一个“标签定义库”,再走一套分类工作流,就能在文档上传的那一刻自动匹配业务标签。核心思路并不复杂——把人工经验转化为机器可读的规则。
为什么非要这么折腾?因为文档进入知识库之前如果没有打上标签,后续的检索、权限控制、路由分发全都会乱套。比如“合同”和“发片”混在一起,想按类型筛选根本没法用。所以,这一步必须在入库前完成。
准备带描述的标签体系
具体操作从建库开始。打开Dify工作台,点击左侧「知识库」,新建一个专用知识库,命名为“标签定义库”。记住,这个库只存标签标准,不存业务文档。每条记录格式很简单:标签名 + 换行 + 典型特征与排除条件。举个例子:
合同
包含甲乙双方名称、签署日期、违约责任条款;不含“报销”“金额合计”“开票信息”等字样。
发片
含“发片代码”“校验码”“销售方/购买方名称及税号”;通常有10~12位数字代码,且出现“¥”或“元”单位金额。
有个关键点必须提醒:每条记录必须用纯文本逐条录入,不能合并成一段,否则向量检索会把语义搅成一锅粥,召回效果大打折扣。
构建分类工作流
回到工作台,点击「工作流」,新建一个空白ChatFlow,命名为“文档自动标签化”。这里有两种路径可选,取决于你的标签数量和文档边界清晰度。
方法一:轻量级单节点分类(适合标签≤8个、文档类型明确)
直接添加一个「大模型」节点,在提示词里明确说:“你是一个精准的文档类型识别器。请严格从以下8个选项中选择唯一最匹配的标签:[合同, 发片, 用户反馈, 技术文档, 会议纪要, 培训材料, 法务函件, 其他]。仅输出标签名,不要解释。”然后把文档提取后的文本作为输入变量传入该节点。简单粗暴,但够用。
方法二:RAG增强双阶段分类(推荐,标签数多、边界模糊时准确率能提升40%以上)
第一步:添加「知识检索」节点,选择刚才建的“标签定义库”,设置top_k=5,开启「启用高亮片段」。
第二步:添加「大模型」节点,提示词开头写:“你已获得5个候选标签及其定义。请结合用户文档全文,选出语义匹配度最高的1个标签。若都不匹配,输出‘其他’。只输出标签名。”输入变量是文档文本加上检索返回的5段定义。
需要注意的细节:知识检索节点必须放在大模型节点之前,两者之间用实线连接,否则检索结果没法传递到大模型,整个流程就断了。
接入文档并触发分类
工作流主体搭好后,剩下的就是把文档接进来并输出结果。
第一步:添加「文件输入」节点,字段类型选「文件列表」,勾选支持格式:PDF、DOCX、TXT、MD。
第二步:添加「文档解析器」节点,连接到文件输入节点,设置里开启「保留原始段落结构」,关闭「自动分块」——这样能保证文档上下文不丢失。
第三步:将文档解析器的输出「text_content」拖拽连线至后续分类节点的输入变量。
第四步:在工作流末尾添加「变量输出」节点,新增输出变量名为「classified_label」,绑定来源为大模型节点的「输出文本」。
第五步:点击右上角「发布」,复制生成的API地址,然后用curl或Postman上传文件测试即可。
整套流程跑通后,文档上传时就能自动完成标签归类,后续的按标签检索、权限控制自然就水到渠成了。
