提高dify问题分类的准确性
1. 模型与参数:先把 “硬件” 拉满
模型选择分类任务必须用强推理模型:
- GPT-3.5-turbo / GPT-4
- 通义千问 Pro / 文心 4.0 / 字节豆包 Pro小模型(7B、1.8B)分类准确率天生差,不建议用于意图判断。
参数设置(关键)
Temperature = 0 ~ 0.1越低越稳定、越不会乱分类。Top P = 0.1 ~ 0.3- 禁止开启 “创意模式”“自由发挥”
2. 只让分类器看当前问题,不要看历史对话
这是90% 人准确率低的核心原因。用户前面聊别的,后面突然问新问题,分类器会被上下文带偏。
正确做法:Question Classifier 的输入只传:
plaintext
sys.query不要传入历史对话、不要传入系统提示。
3. 类别设计必须清晰、互斥、不重叠
类别越模糊,准确率越低。原则:
- 类别之间不能有歧义
- 一个问题只能属于一个类别
- 类别数量不要太多(建议 3~8 类)
- 必须加一个【其他】兜底
错误示例:
- 投资、融资、找机构、找资金 → 应该合并为【找投资】
- 需求、项目、产品、痛点 → 合并为【找需求】
4. 提示词结构:固定格式 = 高准确率
给你一个Dify 分类器专用高准确率提示词,直接复制:
plaintext
你是一个严格的意图分类器。 规则: 1. 只根据用户当前这句话判断,不看上下文。 2. 必须且只能选择一个类别。 3. 语义不明确时,一律返回【其他】。 类别定义: 【找投资】 用户询问融资、投资人、基金、投资偏好、合作、资金、IPO、并购、退出。 【找需求】 用户询问项目、产品需求、市场机会、客户痛点、解决方案、功能设计。 【AI赛道】 涉及大模型、LLM、RAG、Agent、提示词、AI应用、AIGC、向量库。 【智能制造】 涉及机器人、工业自动化、芯片、硬件、装备、产线、工厂、精密制造。 【其他】 不属于以上任何类别。 用户问题:{user_query} 只输出类别名称,不要任何多余内容。5. 给每个类别提供 3~5 个示例句(非常有效)
LLM 最喜欢示例,有示例准确率直接提升一档。在提示词里加:
plaintext
示例: 1. 我想融资 → 【找投资】 2. 有什么好项目 → 【找需求】 3. 怎么做RAG → 【AI赛道】 4. 工业机器人前景 → 【智能制造】 5. 今天吃什么 → 【其他】6. 禁止输出解释,只输出类别名
分类器一旦开始解释,就容易跑偏。强制要求:
- 只输出类别名称
- 不要理由
- 不要分析
- 不要 JSON(除非你必须用 JSON)
简单输出最稳定。
7. 用 “强制格式指令” 锁死输出
在最后加一句:
plaintext
输出格式:仅输出【】内的类别名称,不输出任何其他内容。8. 避免类别太细、太相似
例如:
- 不要分:早期投资、成长期投资、PE 投资
- 统一叫【找投资】细分类可以在后续节点再判断,不要让分类器一次性做太难的任务。
9. 测试集验证 & Bad Case 优化
准备 20~50 条测试问句,反复跑,把分错的句子加入提示词作为反例。
例如:
plaintext
反例: “我有项目想找钱” → 不属于【找需求】,属于【找投资】反例越多,模型越不容易错。
10. 进阶:用 JSON 结构化输出(更稳定)
如果你希望后续流程更稳,可以让分类器输出 JSON:
plaintext
{ "category": "找投资" }JSON 格式比纯文本更不容易乱输出。
最简单总结(照着做就能提高)
- 用强模型,温度 0.1
- 只看当前问题,不看历史
- 类别少、清晰、互斥
- 提示词给定义 + 示例
- 强制只输出类别
- 收集错例,优化提示词
