必须规范表单字段命名(仅限英文、数字、下划线),其标识名直接构成变量路径{{form.field_name}},需在下游节点显式引用如{{node_start.field_name}},并配合parseint等内置函数或if条件语法处理空值与类型转换,确保数据准确流转。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让用户填写的表单内容准确流入后续节点并参与逻辑判断或API调用,必须厘清输入字段定义、变量命名规则、跨节点引用路径三者之间的绑定关系,否则会出现变量为空、类型错乱或引用失败等运行时错误。
定义表单输入字段
进入工作流编辑页→点击「开始」节点→在右侧「输入字段」区域点击「+ 添加字段」。
选择字段类型(如文本、数字、下拉选项),填写字段标识名——【该名称将作为变量名直接用于后续所有引用,仅支持英文、数字和下划线】。
勾选「必填」后,用户未填写该字段时无法提交;不勾选则允许为空,但后续节点若依赖此变量且未做空值判断,可能中断流程。
完成配置后,该字段会自动映射为形如 {{form.field_name}} 的变量,无需手动声明。
在提示词或API节点中使用表单变量
方法一:直接插入双花括号语法
在大模型提示词或HTTP请求体中,写入 你好,{{form.name}},你的订单号是{{form.order_id}}。Dify会在运行时自动替换为用户实际输入值。
方法二:嵌套表达式处理
若需对输入做基础转换,例如把手机号字符串转为数字再参与计算,可写成 {{parseInt(form.phone)}}——注意此时变量仍属字符串类型,parseInt 是Dify内置函数,不是JavaScript原生执行环境。
方法三:条件拼接
当字段可能为空时,避免模板渲染出“你好,undefined”,应改用 {{if form.name}}{{form.name}}{{else}}访客{{/if}} 语法包裹。
将表单变量传递给下游节点
第一步:确认上游节点已输出该变量
「开始」节点默认将所有表单字段作为输出,无需额外配置;但若中间经过了「代码」或「条件判断」节点,则必须在该节点的「输出」配置中显式声明,例如:{"user_name": "{{form.name}}", "age": "{{form.age}}"}
第二步:在目标节点的输入配置中引用
点击下游节点→展开「输入」设置→添加新输入项→键名设为 username,值设为 {{node_start.user_name}}(其中 node_start 是「开始」节点的默认ID;若重命名过,请以实际ID为准)。
第三步:验证变量是否生效
保存后点击「调试」→手动填入表单→观察下游节点日志中的输入数据是否匹配。若显示 undefined 或空字符串,大概率是节点ID写错或上游未正确输出。
这一步操作起来很简单,直接把文件拖进去就行。
系统变量与表单变量混用场景
在发送通知类API时,常需同时携带用户输入和系统上下文,例如:{"to": "{{form.phone}}", "app_id": "{{sys.app_id}}", "timestamp": "{{sys.timestamp}}"}。
【sys.* 变量无需定义,也不受表单必填约束,但不可修改或删除】。
注意:若表单字段名为 id,而系统变量也有 sys.id,二者不会冲突——Dify严格区分 form.id 和 sys.id 命名空间。











