如何让dify分类器更加精准的分类?
为了让 Dify 的 AI 流程在“分类”这一环节尽可能精准,你需要把“分类提示词”当成一个小型专家系统来设计:
- 让模型先理解分类目的;
- 给它边界清晰、互斥、完备的类别定义;
- 再给它可复制的“判断流程”(而不是只扔几个例子);
- 最后给它兜底与反馈机制,方便后续迭代。
下面给出可直接套用的模板 + 调优口诀,按“提示词结构 → 变量占位 → 迭代方法”三步走,基本就能达到生产级的精确度。
一、提示词结构(可直接复制到 Dify 的“提示词模板”里)
【角色】
你是一名<垂直领域>分类专家,任务是把用户输入唯一分到且仅分到一个类别,否则记为“other”。【类别定义表】
请严格使用下表,不得新增、合并、删减。
| 类别编码 | 类别名称 | 定义(必填) | 关键特征(必填) | 反例(必填) |
| A | 退货咨询 | 用户想退回已购商品 | 含“退”“退款”“寄回”等词 | “如何保养商品”不算 |
| B | 价格保护 | 用户要求补差价 | 含“降价”“买贵”“补差” | “能否便宜点”不算 |
| … | … | … | … | … |【判断流程】
1. 提取输入中的关键词,与“关键特征”列做交集。
2. 若仅命中一条定义→直接返回对应编码。
3. 若命中多条→按“定义”列的限定条件再筛选;仍无法区分→选排序最靠前的一条。
4. 若完全未命中→返回“other”。 【输出格式】
只返回 JSON:{"category":"<类别编码>","reason":"<一句话原因>"}【输入】
{{input}}
二、变量占位与 Dify 对接
- 把上面的提示词整体放进 Dify 的“系统提示词”节点。
- 用
{{input}}
作为用户原始 Query 的占位符(Dify 会自动替换)。 - 如果分类维度不止一个(先主场景、再情绪),就串两个“LLM 节点”:
节点 1 输出主场景编码 → 节点 2 把主场景编码再当变量{{scene}}
传进去,做第二次细分。
这样既解耦,又方便分别迭代。
三、迭代口诀(精准度从 85% → 98% 的核心)
-
定义闭环:
每出现一次“other”或人工纠偏,就把新样本补充到“反例”列,并检查是否需拆类。
保证“定义-特征-反例”三位一体同时更新,否则模型会学会偏斜。 -
关键词权重化:
把“关键特征”再拆成“强信号词”与“弱信号词”,在提示里告诉模型:
出现 1 个强信号即可直接判定;仅出现弱信号时需结合上下文。
示例:- 强信号:花呗、退款编号、价保入口
- 弱信号:便宜、差价
-
引入“否定特征”:
在定义里加一行“若出现以下词则直接排除本类”,可快速解决边界混淆。
示例:
“价格保护”类否定特征:含“优惠券”“秒杀”直接排除。 -
小样本冷启动:
若初始样本<30 条,先用提示工程跑 100 条伪标签,再人工复核 30 条高置信错误即可上线;后续用线上日志做主动学习。 -
输出置信度:
在 JSON 里多加一字段"confidence":<1-5>
,让下游流程决定是直通还是转人工。
调优时优先看低置信区间的错误,效率最高。
四、一个最小可工作的电商场景示例
【角色】
你是电商客服场景下的分类专家。【类别定义表】
| 编码 | 名称 | 定义 | 关键特征 | 反例 |
| A | 退货 | 用户想退回商品 | 退、退款、寄回、已申请 | “如何保养” |
| B | 价保 | 用户要求补差价 | 降价、买贵、补差、30 天价保 | “能否便宜点” |
| C | 开发票 | 用户索要发票 | 发票、抬头、电子发票 | “收据” |
| D | 其他 | 以上都不是 | — | — |【判断流程】
1. 先匹配强信号词;
2. 多条命中时,选最先出现的类别;
3. 完全无匹配→D。 【输出】
{"category":"<编码>","reason":"<原因>"}【输入】
{{input}}
五、常见坑速查表
- 类别名称用“动词+名词”短句,避免“咨询/问题”这种万能词。
- 一条样本只能属于一个类别,若业务上允许多标签,就拆成“多轮单标签”或改用多标签模型,别硬塞给 LLM。
- 提示词里别给“正向示例”,只给“定义+特征+反例”,否则模型会过拟合例子而忽视定义。
- 每次新增类别,一定同步更新“否定特征”,否则旧类别会“吃掉”新类别。
按以上模板填完,基本能在 30 条样本内把宏观准确率拉到 95%+;后续靠线上日志滚动迭代即可。祝调优顺利!