Dify 中级实验(01):参数提取器实战——如何从自然语言中提取结构化数据?
2026/8/8 9:25:02 网站建设 项目流程

Dify 中级实验(01):参数提取器实战——如何从自然语言中提取结构化数据?

Dify 实验系列 · 中级 01/20 | 实验编号:DIFY-102-02

1. 实验目的

掌握Parameter Extractor(参数提取器)节点的使用——从自然语言中自动提取结构化字段,为后续的数据库操作、API 调用、条件判断提供精准的结构化输入。

这是 Dify 工作流里最常用的节点之一:任何「用户说人话、系统要结构化」的场景(表单预填、工单录入、搜索参数解析)都靠它。

2. 场景设计

构建一个「简历筛选助手」:用户用自然语言描述候选人,系统提取出结构化字段(姓名、年龄、技能、经验年限、期望薪资、学历),再根据字段做筛选判断。

输入(用户描述):

张三,28岁,计算机本科毕业 5 年,精通 Python、Java、SQL,目前在 BAT 做后端开发,期望薪资 25K-30K

输出(结构化 + 筛选意见):

{"name":"张三","age":28,"skills":["Python","Java","SQL"],"experience_years":5,"expected_salary":27500,"education":"本科"}

3. 节点拓扑

开始(resume_text) ↓ 参数提取(Parameter Extractor,6 字段) ↓ 校验提取结果(Code:完整性校验) ↓ 校验结果判断(IF-ELSE) ├── 通过 → 生成筛选意见(LLM)→ 结束 └── 不通过 → 结束(提示补充信息)

4. 关键配置

4.1 开始节点

resume_text变量类型必须选「段落」(paragraph)而不是「文本框」(text-input)——简历描述是长文本,text-input 有 48 字符输入限制,粘贴一段简历直接报错:

-label:简历描述max_length:10000required:truetype:paragraphvariable:resume_text

💡 这是同批实验里踩过的真实坑:长文本/JSON 粘贴类变量用 paragraph + 显式max_length: 10000,否则 Service API 报must be less than 48 characters

4.2 参数提取节点(核心)

配置 6 个提取参数:

query:['start','resume_text']parameters:-name:name# 候选人姓名type:stringrequired:true-name:age# 候选人年龄type:numberrequired:false-name:skills# 技能列表type:array[string]required:true-name:experience_years# 工作经验(年)type:numberrequired:true-name:expected_salary# 期望薪资(元/月)type:numberrequired:false-name:education# 最高学历type:stringrequired:false

要点:

  • 必填字段给足描述——参数描述直接影响 LLM 提取准确率(描述含糊 → 提取错)
  • 金额类(期望薪资)用 number,让 LLM 把「25K-30K」归一为数值(取 27500)

4.3 校验节点(Code)

参数提取偶尔会漏字段,用代码节点做完整性校验,返回valid标志 + 缺失项提示:

defmain(name:str,age:str,skills:list,experience_years:str,expected_salary:str,education:str)->dict:missing=[]ifnotname:missing.append("姓名")ifnotskills:missing.append("技能")ifnotexperience_years:missing.append("工作经验")return{"valid":"false"ifmissingelse"true","missing_fields":"、".join(missing)ifmissingelse"","summary":f"{name}{experience_years}年经验,技能:{', '.join(skillsor[])}"}

💡 boolean 必须展平为 string("true"/"false")——Dify 的 object/boolean 类型在节点间不可见,IF-ELSE 判断的是字符串。

5. 运行验证

输入上面的简历描述,预期:

  1. 参数提取返回 6 个结构化字段(skills 是数组)
  2. 校验节点valid=true
  3. LLM 生成筛选意见(结合经验年限/技能与岗位匹配度)

实测结果:完整简历 → 提取 6 字段全中 → 筛选意见输出正常;缺技能描述的简历 →valid=false→ 走提示分支。

6. 采坑点

现象修复
start 变量用 text-input长简历粘贴报「must be less than 48 characters」改 paragraph +max_length: 10000
校验结果 boolean 直出IF-ELSE 判断不到(类型不可见)展平为 string “true”/“false”
PE 提取字段描述含糊LLM 提取错/漏字段每个字段写清楚业务描述

7. 实验文档及源码获取

  • 实验文档(完整操作步骤):DIFY-02:参数提取——从非结构化到结构化.md
  • 源码(可直接导入):dify102_02_简历参数提取器.yml

文章聚焦核心配置与采坑点;实验的完整分步操作(节点搭建/参数表/调试指引)见实验文档原文。


下一篇:Dify 中级实验(02):问题分类器——智能路由引擎如何四路分发?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询