dify agent需实现真人客服式动态表单收集:按姓名→手机号→地址→偏好顺序引导,支持用户随时插话追问并跳转纠错;通过json schema定义字段规则、条件分支控制流程、记忆变量跟踪进度、关键词触发器响应修改需求,最终校验必填项后提交。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让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工作流:分阶段引导+动态跳转
方法一:用「条件分支节点」控制字段顺序
第一步:在Dify工作流画布中拖入「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格式。










