dify处理非结构化数据需三步:先用文档解析器预处理并启用ocr;再构建清洗型prompt工作流,关闭流式响应以确保json完整;最后用正则或大模型双校验提取字段。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

企业手头积压的PDF合同、扫描件发票、Word会议纪要等非结构化数据,直接丢进Dify训练会触发大量乱码、字段错位和语义断裂——必须先让大模型理解内容再结构化提取,而不是靠规则硬切。
第一步:用Dify文档解析器预处理原始文件
进入Dify控制台 → 点击「知识库」→ 新建知识库 → 上传PDF/DOCX/PNG等文件 → 勾选「启用OCR识别」(针对扫描件)→ 点击「解析」。
这一步不能跳过。Dify底层调用unstructured库做分块,若不启用OCR,扫描类PDF将被当作空白页处理,后续所有清洗都建立在空数据上。
上传后观察右侧「解析预览」面板:如果出现大量方框、乱码或段落断裂,说明原始文件质量差,需返回用Adobe Acrobat修复后再传。
第二步:构建清洗型Prompt工作流
新建「应用」→ 选择「文本生成」类型 → 在编排画布中拖入「大模型节点」→ 双击配置:
系统提示词写:你是一名企业数据治理专家,严格按以下格式输出JSON:{"cleaned_text":"去除联系方式、页眉页脚、重复段落后的内容","key_entities":[{"name":"甲方名称","value":"XXX公司"},{"name":"签约日期","value":"2025-03-12"}]}
用户输入设为:{{knowledge_retrieval.result}}(即上一步解析出的原始文本块)
【关键前提】必须关闭「流式响应」开关,否则JSON结构会被截断,下游节点无法解析。
第三步:用正则+大模型双校验提取关键字段
方法一:轻量级字段提取(适用于字段位置固定)
在大模型节点后接「代码节点」,输入Python脚本:
import re
text = input_data.get("cleaned_text", "")
date_match = re.search(r"签约日期[::]\s*(\d{4}年\d{1,2}月\d{1,2}日)", text)
print({"sign_date": date_match.group(1) if date_match else None})
方法二:语义级字段提取(适用于条款表述多变)
另起一个大模型节点,提示词写:从以下合同文本中精准提取「违约责任」条款全文,要求:1. 不增删字;2. 包含完整标点;3. 若未找到则输出null。文本:{{input.text}}
注意:两次调用大模型的成本差异极大,方法一单次调用耗时
第四步:清洗结果入库前的强制校验
步骤一:在代码节点中加入字段完整性检查
if not output.get("sign_date") or len(output["sign_date"]) raise ValueError("签约日期缺失或格式错误")
步骤二:对接Dify内置「数据质量看板」,设置阈值告警
当单批次清洗失败率>5%时,自动暂停工作流并邮件通知管理员
步骤三:导出清洗后数据 → 选择「JSONL」格式 → 勾选「保留原始文件名作为_id字段」→ 下载











