← 返回文章列表

输入处理族:参数提取 + 文档提取器——非结构化输入结构化的两种方式

基于 Dify 1.16.1 与 Hermes Agent 实战实测(2026-08/09):E3 参数提取防幻觉实验 + E5 文档提取器实验 + 文件上传链实测

📖 摘要:非结构化输入结构化有两条路:参数提取(从文本提取语义字段)和文档提取器(从文件提取文本内容)。本文实测:PE 的防幻觉 instruction 怎么写才有效(格式判定 + 边界定义 + 禁止编造)、PE「空」的两种形态(防幻觉输出 "null"、宽松输出 ""——下游判空坑)、文件链路的可靠路径(workflow 模式,chatflow 的 sys.files 实测静默失败)、文件类型白名单的 API/UI 双路径陷阱。

📌 本文要解决的核心痛点

  • 让参数提取从文本里抓姓名/电话/订单号,没提到它也编造一个?
  • 参数提取返回的「空」到底是 null 还是空字符串?下游怎么判才稳?
  • 上传文件给文档提取器,文件根本没进应用(不报错)——为什么?
  • 文件类型白名单:API 能传、UI 不能传,到底谁说了算?
  • 本文给 PE 的防幻觉写法 + 文件链路的可靠路径 + 双路径验证纪律。

一、两个节点是干什么的(先分场景)

节点 干什么 什么时候用
参数提取(PE) 从非结构化文本提取结构化字段(姓名/电话/订单号/技能) 用户输入一段话,你要抽出字段给下游(表单/建单/搜索)
文档提取器(DE) 提取上传文件(txt/pdf/docx)的文本内容 用户上传文件,你要读内容(解析/入库/处理)

关键认知:PE 是 LLM 驱动的概率性节点(模型提取);DE 是 确定性节点(平台解析文件)。所以 PE 的核心是「防幻觉」(概率性的通病),DE 的核心是「文件链路可靠」(确定性但要保证文件真的进来)。

二、设计模式

参数提取(PE)——防幻觉是设计的第一优先级

契约 要点
配置 query(selector)+ reasoning_mode(function_call/prompt)+ instruction + parameters[{name,type,description,required}] + model
防幻觉 instruction 三件套 ① 格式判定(「电话必须是明确的 11 位手机号,以 1 开头」)② 边界定义(「什么算、什么不算」含正反例——岗位不算技能)③ 禁止编造(「没有明确出现的字段必须输出 null,禁止推测或编造」)
判空 PE 只负责从文本提取语义字段;判「用户有没有填」用 start 变量直给值

文档提取器(DE)——文件链路选可靠路径

契约 要点
配置 type: document-extractor + variable_selector(文件变量引用)
⚠️ 可靠链路 workflow 模式:start 文件变量(allowed_file_extensions/types/upload_methods)→ DE [start, 文件变量] → 下游
Service API /v1/files/upload(user 在 multipart form,与 run 同 user)→ /v1/workflows/run inputs 内嵌 {transfer_method, upload_file_id}
输出 text(提取的文本内容)

三、实测踩坑(四个高频坑)

坑 1:PE 无防幻觉约束 → 编造填值

现象:用户输入里没有订单号,PE 还是提取了「订单号」填值 → 直接建单(脏数据入库)。

实测:dify104-02 无订单号也提取填值——instruction 无防幻觉约束。修复:显式「必须 null 禁止编造」+ 格式判定。

坑 2:PE「空」的形态不统一("null" vs "")——E3 实测

现象:输入「你好」(无姓名无电话),防幻觉 instruction 输出 "null"(字符串),宽松 instruction 输出 ""(空字符串)——两种都是「无」,但形态不同

实测(E3):防幻觉版 name/phone = "null"(__is_success=1,流程正常);宽松版 = ""。deepseek 本次未编造(模型较保守),但形态差异是确定的

根治:下游判空兼容两种形态(== "null" or == "" 都算空);instruction 统一「无则输出 null」。

坑 3:chatflow 文件链路静默失败——E5 实测

现象:advanced-chat + files 参数(type: document/custom 都试)+ features.file_upload → chat-messages 200,但 workflow_runs.inputs.sys.files = []——文件静默不进应用(DE 输出 text 空数组,不报错)。

根治:文件处理走 workflow 模式(start 文件变量)——E5 实测 txt 206 字符完整提取。chatflow 文件链路在本机 1.16.1 不可用。

坑 4:文件类型白名单双路径陷阱

现象:features.allowed_file_types 写 document,UI 上传 .yaml 报「文件类型错误」,但 Service API 冒烟全过。

根因:UI 前端按 allowed_file_types 白名单拦截(document 白名单不含 .yaml);API 后端按 allowed_file_extensions 校验。API 全过 ≠ UI 可用。

纪律:配置类功能必须双路径验证(API 冒烟 + UI 导出回读比对)。

四、节点级验证清单

验证点 怎么验 取证
PE 防幻觉 无信息输入 → 确认输出 "null"/""(不编造) 同输入 5 次采样全过才算修好
PE 正常提取 含信息输入 → 字段正确 提取结果断言
PE 判空兼容 下游判空覆盖 "null" 和 "" 两种形态 边界用例
DE 文件链路 workflow 模式 + 文件上传 → 文本完整提取 提取长度/内容比对
文件白名单 API + UI 双路径验证 两路径各跑一次

五、案例:客服工单信息提取 + 上传文件处理

环节 工具 做法
意图分类 问题分类 工单/咨询/投诉分流
信息提取 参数提取 instruction 三件套(格式判定/边界/禁止编造)提取姓名/电话/订单号
空值处理 条件分支 PE 输出 "null"/"" 都判空 → 走补料分支(人工输入)
文件处理 文档提取器(workflow) start 文件变量 → DE 提取 → 解析入库
建单 HTTP/代码 校验通过 → 调工单系统

核心结论:输入处理族的本质是「把不确定的输入变成确定的契约」——PE 靠防幻觉 instruction(概率性节点要采样验证),DE 靠可靠的文件链路(workflow 模式 + 双路径验证)。判空兼容两种空形态,是 PE 下游最常见的隐藏 bug。


下一篇(终篇)预告:《节点级验证方法论》——全系列收束:每个节点的验证清单总表 + 三层根因排查全流程(导入/运行/逻辑)+ 取证命令(node-executions / DB 直查)+ 验收案例。

这些 AI 应用能力,如何交付到真实业务场景?看看方案与服务 →

联系我

邮箱contact@fishsun.cn

点击邮箱直接写信 · 扫码加微信沟通

微信

微信二维码

扫码加微信 · 备注「门户」更快通过