想象一下,当用户与 Dify Agent 填写表单时,最期待什么样的体验?就像与真人客服对话一样:先询问姓名,再确认手机号,接着核对地址,最后了解偏好——但过程中随时可以插入一句“地址填错了怎么办?”或“能跳过这步吗?”,Agent 能够灵活应对,而不是机械地按固定顺序执行到底。这才是真正理想的智能表单交互体验。
要实现这种效果,关键在于让 Agent 具备动态表单收集能力,同时支持用户中途打断、跳转和纠错。下面我们详细拆解具体实现方法。

你需要在 Dify 中利用 Agent 模拟真人客服的交互节奏:先问姓名→再问手机号→接着确认地址→最后让用户补充偏好,过程中允许用户随时插话追问甚至修改已填写的内容,而不是僵硬地按顺序跑完全部字段。
准备结构化表单字段定义
第一步是打好基础。在 Dify 知识库或应用设置中,新建一个 JSON 格式的表单 Schema,明确每个字段的名称、类型、必填性及校验规则。举例来说:{"name":{"type":"string","required":true,"description":"用户真实姓名"},"phone":{"type":"string","required":true,"pattern":"^1[3-9]\d{9}$"}}。
这里有一个关键要点:字段描述必须用自然语言写清楚。比如“地址”字段不能只写一个"string",而要写成“详细到门牌号的收货地址,需包含省市区和街道”,否则 Agent 无法准确追问细节。
这一步容易踩坑——遗漏pattern或required,后续多轮对话中 Agent 会缺失校验能力,用户随意输入手机号也能蒙混过关,体验直接崩掉。
配置Agent工作流:分阶段引导+动态跳转
两种方法,你可以根据实际场景选择一种,或组合使用。
方法一:用「条件分支节点」控制字段顺序
先在工作流画布中拖入一个「LLM 节点」,在提示词开头写明当前目标:“你正在收集用户注册信息,请严格按顺序获取:①姓名→②手机号→③地址→④偏好。每问完一项,确认用户已回答再进入下一项。”
然后在这个 LLM 节点后面接一个「条件分支节点」,设置判断逻辑为“是否已获得姓名且格式有效”。成立则流向手机号提问节点,不成立则返回原 LLM 节点重新询问。
对每个字段重复这个分支设置。不过地址分支需要额外加一条路径:当用户输入包含“改地址”“重新填”“跳过”等关键词时,直接跳回地址字段的 LLM 节点,不要死卡顺序。
方法二:用「记忆变量」记录填写进度
在应用设置中启用「对话记忆」,并手动添加三个记忆变量:filled_fields(数组)、current_step(字符串)、pending_correction(布尔值)。每次用户完成一个字段,就用「赋值节点」更新filled_fields,把字段名推入数组。
LLM 提示词里嵌入变量调用:{{filled_fields}},让模型实时知道“已经填了姓名和手机,下一步该问地址”。注意:current_step必须与filled_fields最后一个元素保持同步,否则会重复提问或跳过关键字段。
处理用户中途追问:拦截关键词+上下文锚定
用户随时可能打断,比如“手机号填错了”“我不想填这个了”“之前说错了”。每个字段对应的 LLM 节点提示词末尾,统一追加一段指令:“如果用户当前回复包含‘怎么修改’‘不想填’‘之前说错了’‘跳过’‘算了’等意图,立即暂停表单流程,先响应该问题,再根据用户最新输入决定是否回到上一字段、当前字段或继续下一字段。”
这一步如果不做,用户说“手机号填错了”后 Agent 还会继续傻乎乎地问地址,体验直接断裂。
更稳妥的做法是给每个字段 LLM 节点单独配置「关键词触发器」:在节点设置里勾选“启用关键词匹配”,填入该字段专属纠错词,比如手机号节点填“错号、打错了、重输、换一个”;地址节点填“写错、不对、要改、门牌号错了”。触发后自动跳转至专用纠错 LLM 节点,该节点只处理修改逻辑,不涉及其他字段,干净利落。
验证必填字段完整性并提交
当用户主动说“填完了”,或者四个字段全部出现在filled_fields数组中时,工作流进入终审节点。
用「代码节点」跑一段 Python 脚本,遍历 JSON Schema 中required:true的字段,检查是否全部存在于用户提交数据里。缺失项直接返回错误消息:“请补填【姓名】和【手机号】,这两项为必填。”
校验通过后,调用「HTTP 请求节点」将整理好的字典对象 POST 到你的业务接口,URL 和 Header 按实际填写,Body 选择 raw JSON。整个流程就收工了。
