Dify工作流中实现多轮意图动态切换需三步:一是用Memory+意图分类LLM节点输出并存入session.intents_current;二是通过Jinja合并至session.intents_all避免覆盖;三是基于新增意图、优先级或冲突检测触发分支,并设轮次限制与终止标志阻断循环。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify工作流中实现用户多轮提问时动态判断意图并切换处理路径,必须让条件节点能持续读取最新对话上下文、识别新增意图、避免路径固化。这要求条件逻辑不依赖单次输入快照,而要结合会话变量与历史标记做增量判断。
构建可累积的意图识别链
第一步:在Chatflow中启用Memory,并在开始节点后插入「意图分类LLM节点」,提示词明确要求输出JSON格式的意图数组,例如:{"intents": ["price", "shipping", "return"]}。
第二步:将该节点输出存入会话变量session.intents_current,注意不要覆盖原始session.intents_all——这一步很关键,【覆盖会导致历史意图丢失,后续无法做“新增意图”判断】。
第三步:添加「合并意图」节点,用Jinja模板拼接:{{ session.intents_all + session.intents_current | unique }},结果写回session.intents_all。这保证每轮新识别的意图都会追加进全局意图池,而非替换。
基于意图增量触发分支
方法一:用条件节点直接判断「本次是否含新意图」
添加条件节点,配置表达式为"support" in session.intents_current and "support" not in session.intents_all[:-1]——这里用切片[:-1]排除最后一轮(即本轮),精准捕获首次出现的support意图。
方法二:预设意图优先级表,按业务权重排序匹配
在工作流初始化时,用「设置变量」节点注入优先级映射:{"billing": 1, "technical": 2, "return": 3, "general": 4},存为session.intent_priority。条件节点中用session.intents_all | map('extract', session.intent_priority) | min提取当前最高优意图,再路由。
方法三:检测意图冲突并强制进入澄清流程
当session.intents_current | length > 2时,认为用户混合提问,自动跳转至「澄清提问」子工作流——该子工作流只做一件事:用LLM重写用户原始输入,拆分为两轮独立问题,再分别注入下一轮处理队列。
终止多轮循环的硬性出口
第一步:在每轮入口处插入计数器节点,更新session.round_count = session.round_count | default(0) + 1。
第二步:在条件节点前加「判断轮次」分支,表达式为session.round_count >= 5,满足则直连「兜底回复节点」,内容为“已为您汇总全部问题,请确认是否需要进一步协助?”。
第三步:该兜底节点输出后,强制写入session.conversation_ended = true,并在后续所有条件节点的表达式开头加上not session.conversation_ended and——这能阻断任何后续分支被意外激活。


















