Dify做意图识别
在 Dify 里意图识别本质是“规则LLM分类结构化输出”的组合不是训练好的专用模型而是用节点和提示词把大模型当分类器来用。下面从原理、两种实现方式、配置步骤和常见问题四方面讲清楚。一、核心原理一句话版Dify 没有内置“训练好的意图模型”而是优先规则关键词/正则快速拦截高频意图快、省成本LLM 兜底分类用提示词把候选意图列出来让大模型选最匹配的一个结构化输出让模型固定返回intent、confidence、slots方便下游分支判断。二、两种实现方式你常用的方式1用「问题分类器」节点推荐零代码Dify 自带节点专门做意图/问题分类本质是封装好的 LLM 分类模板。配置步骤工作流拖入问题分类器Question Classifier输入变量选sys.query用户问题模型选推理强的如 GPT-4o-mini、DeepSeek温度设0.2–0.3确定性高添加意图标签描述关键词意图1查交期 → 描述用户问交货时间、多久能好 → 关键词交期、多久、什么时候到意图2查库存 → 描述用户问有没有货、库存多少 → 关键词库存、有货吗、剩多少意图3其他 → 兜底。输出节点会输出category意图名称下游用条件分支按category走不同流程。方式2用「LLM 节点自定义提示词」灵活适合复杂意图自己写提示词让模型输出结构化意图结果适合需要槽位提取如工厂、数量的场景。标准提示词模板直接复制你是意图识别器只做分类和提取。 候选意图 1. query_delivery查交期关键词交期、交货、多久、什么时候 2. query_stock查库存关键词库存、有货、剩多少 3. create_order下单关键词买、订、下单、来一份 4. other其他问题 用户输入{{sys.query}} 输出JSON严格 { intent: 意图名称, confidence: 0.xx, slots: { factory: 工厂有就填没有null, qty: 数量数字没有0 } }配置拖入LLM 节点粘贴上面提示词开启结构化输出JSON Schema 如下{type:object,properties:{intent:{type:string},confidence:{type:number,minimum:0,maximum:1},slots:{type:object,properties:{factory:{type:[string,null]},qty:{type:number,minimum:0}}}},required:[intent,confidence,slots]}下游用条件分支判断若intent query_delivery→ 走查交期分支若intent query_stock→ 走查库存分支兜底走其他分支。三、意图识别怎么判断“来自哪个分支”你之前问“节点怎么判断来自哪个分支”结合意图识别答案是分支标记法最常用每个条件分支出口加一个赋值节点设置变量from_branch 查交期分支下游节点直接读取from_branch就能知道来自哪个分支。意图回溯法意图识别结果intent就是“来源”intent query_delivery→ 来自查交期分支intent create_order→ 来自下单分支。四、常见问题你遇到的1. 为什么上面分支能走完下面不行、不报错大概率是条件分支判断不严谨下面分支的条件没触发如意图识别结果和分支条件不匹配或下游节点有必填字段没传如工厂编码为空但节点没报错直接静默终止。2. 为什么走完“直接回复16”就不往下走了“直接回复16”是终止节点如「回复用户」且勾选「结束流程」把该节点的结束流程关掉或移到流程最后就能继续往下走。五、最佳实践直接能用简单意图用问题分类器节点零代码、快复杂意图槽位用LLM节点结构化输出灵活、能提参数分支判断用赋值节点打标记下游读标记判断来源模型参数温度0.2–0.3减少随机性提高意图准确率。