在 Dify 里,意图识别本质是“规则+LLM分类+结构化输出”的组合,不是训练好的专用模型,而是用节点和提示词把大模型当分类器来用。下面从原理、两种实现方式、配置步骤和常见问题四方面讲清楚。


一、核心原理(一句话版)

Dify 没有内置“训练好的意图模型”,而是:

  1. 优先规则:关键词/正则快速拦截高频意图(快、省成本);
  2. LLM 兜底分类:用提示词把候选意图列出来,让大模型选最匹配的一个;
  3. 结构化输出:让模型固定返回 intentconfidenceslots,方便下游分支判断。

二、两种实现方式(你常用的)

方式1:用「问题分类器」节点(推荐,零代码)

Dify 自带节点,专门做意图/问题分类,本质是封装好的 LLM 分类模板。

配置步骤
  1. 工作流拖入 问题分类器(Question Classifier)

  2. 输入变量:选 sys.query(用户问题);

  3. 模型:选推理强的(如 GPT-4o-mini、DeepSeek),温度设 0.2–0.3(确定性高);

  4. 添加意图标签+描述+关键词

    • 意图1:查交期 → 描述:用户问交货时间、多久能好 → 关键词:交期、多久、什么时候到;
    • 意图2:查库存 → 描述:用户问有没有货、库存多少 → 关键词:库存、有货吗、剩多少;
    • 意图3:其他 → 兜底。
  5. 输出:节点会输出 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)"
  }
}
配置
  1. 拖入 LLM 节点,粘贴上面提示词;
  2. 开启结构化输出,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"]
}
  1. 下游用条件分支判断:
    • intent == "query_delivery" → 走查交期分支;
    • intent == "query_stock" → 走查库存分支;
    • 兜底走其他分支。

三、意图识别怎么判断“来自哪个分支”

你之前问“节点怎么判断来自哪个分支”,结合意图识别,答案是:

  1. 分支标记法(最常用)

    • 每个条件分支出口,加一个赋值节点,设置变量 from_branch = "查交期分支"
    • 下游节点直接读取 from_branch,就能知道来自哪个分支。
  2. 意图回溯法

    • 意图识别结果 intent 就是“来源”:
      • intent = "query_delivery" → 来自查交期分支;
      • intent = "create_order" → 来自下单分支。

四、常见问题(你遇到的)

1. 为什么上面分支能走完,下面不行、不报错?

  • 大概率是条件分支判断不严谨:下面分支的条件没触发(如意图识别结果和分支条件不匹配);
  • 下游节点有必填字段没传(如工厂编码为空),但节点没报错,直接静默终止。

2. 为什么走完“直接回复16”就不往下走了?

  • “直接回复16”是终止节点(如「回复用户」且勾选「结束流程」);
  • 把该节点的结束流程关掉,或移到流程最后,就能继续往下走。

五、最佳实践(直接能用)

  1. 简单意图:用问题分类器节点(零代码、快);
  2. 复杂意图+槽位:用LLM节点+结构化输出(灵活、能提参数);
  3. 分支判断:用赋值节点打标记,下游读标记判断来源;
  4. 模型参数:温度 0.2–0.3,减少随机性,提高意图准确率。
Logo

一站式 AI 云服务平台

更多推荐