2026年1月31日 · 阅读 —

大模型意图识别测试这事,AI 测试人得有一套“能落地、能复盘、能挨骂还能活”的体系

Agent 与 Skills测试与评测

大模型意图识别测试这事,AI 测试人得有一套“能落地、能复盘、能挨骂还能活”的体系

原文核心思想

这篇文章聊的不是“模型有多强”,而是“意图识别到底该怎么测”。作者想提醒的是:测试不能只看准确率,要把语义理解、情绪语境、潜在需求和闭环效果整个链路测干净。为什么现在值得聊?因为模型分数高、用户照样骂,这才是产品真正的痛。读完能带走的东西很具体:测试目标如何拆层、数据集怎么做脏样本、指标怎么定义、流程怎么跑、以及哪几类场景必须打穿。

正文

我真是被“分数好看但用户骂街”的局面折磨过。测出来90%准确率,线上还被喷得狗血淋头,那个时候我才意识到:意图识别测试不是考试刷分,是实战打仗。测试人员要测的不是“模型懂不懂”,而是“模型有没有把事做对”。

我和读者站在同一边——我们都想让AI别翻车,但现实是翻车最常发生在最关键的场景:模糊、情绪、多轮漂移、潜在需求。这些全是关键词匹配解决不了的狗东西。

一、先把“测什么”说清楚:意图识别不是一个点,是一条链

你如果只测意图分类准确率,就像你只测刹车灵敏度,却不测方向盘。这玩意儿会把人直接送走。建议按四层拆:

1)显性意图准确性

  • 识别用户“在说什么”
  • 目标:意图分类准确率、混淆率、Top-2 命中率

2)隐性状态识别

  • 识别用户“怎么说的”(情绪、讽刺、焦虑)
  • 目标:情绪极性识别准确率、讽刺误判率、焦虑类召回

3)潜在需求预测

  • 识别“接下来要干嘛”
  • 目标:下一步需求预测命中率、触发正确策略的比例

4)闭环效果

  • 识别 → 策略 → 行动 是否正确
  • 目标:任务完成率、人工转接率下降、投诉/差评率变化

一句话:模型能懂只是起点,产品能做对才是终点。

类比一下,意图识别像你家管家,不止要听懂你说啥,还得懂你情绪、猜你下一步、最后把活干对。只测“听懂”就是测了耳朵,没测脑子和手。

二、测试数据集:别用干净样本骗自己

意图识别的死敌是“脏话术”,真实用户不是写需求文档的。你用干净语句去测,只能测出“实验室成绩好”,上线就翻车。

建议数据集至少覆盖这些坑点:

  • 模糊意图(“我有点不舒服”“这个衣服怪怪的”)
  • 讽刺/情绪(“你们物流真快啊”)
  • 多轮漂移(先订机票 → 查天气 → 退了吧)
  • 场景歧义(“买苹果”到底是水果还是手机)
  • 潜在需求(“裙子什么时候发货”背后可能是婚礼急用)
  • 高价值用户/低价值用户策略差异

这块就像做防洪工程,干净样本是晴天模拟,脏样本才是真洪水。

三、评测指标:别只盯 Accuracy

Accuracy 很重要,但不够。测试指标要像体检表,不能只量血压。

1)分类层指标

  • Accuracy / F1 / Top-2 accuracy
  • 类别混淆矩阵(重点看高频误判对)

2)情绪/语境指标

  • 情绪极性准确率
  • 讽刺句误判率
  • 焦虑/愤怒场景下安抚策略触发率

3)多轮对话指标

  • 意图漂移识别率
  • 错误继承率(把上一轮当当前意图)

4)业务闭环指标

  • 任务完成率
  • 澄清选项触发正确率
  • 正确补偿策略触发率
  • 投诉/转人工变化趋势

如果只测Accuracy,就像只看考试卷子分数,没看学生出门会不会迷路。

四、评测流程:分层 + 回归 + 线上 A/B

我推荐一套“分层→回归→线上验证”的流程,稳、不花哨但能活命。

1)离线评测

  • 标准意图集测显性意图准确率
  • 情绪语句集测隐性状态识别
  • 多轮对话集测意图漂移和上下文权重

2)仿真回放

  • 抽真实日志回放
  • 看“模型预测 → 策略触发 → 用户反馈”是否一致

3)线上 A/B

  • 看投诉率、人工转接率、NPS 变化
  • 重点看“策略是否触发对了”

这三段像打游戏的三关:练习场、模拟战、真刀真枪。每关都有坑,少走一关都可能上线翻车。

五、重点测试场景:时间不够就先打穿这五类

这五类不打穿,线上基本会被喷到怀疑人生。

1)模糊意图

  • 识别率 < 阈值时是否给澄清选项
  • 是否避免“乱答”

2)讽刺/情绪

  • 是否识别到情绪极性
  • 是否优先安抚或补偿策略

3)多轮漂移

  • 是否被旧意图绑架
  • 最新指令是否能正确覆盖

4)潜在需求

  • 是否主动给下一步建议或按钮
  • 是否能提前两步做准备

5)高价值用户策略

  • 是否触发“直接赔付/优先处理”
  • 是否减少“走流程废话”

这五类就像消防演习里的火源点,你不提前练,线上火一烧就完蛋。

六、给你一套工程化步骤(至少 6 步)

这是我用过的“实战流程”,从拉数据到上线复盘。

  1. 收集真实用户话术(重点含情绪、讽刺、抱怨)
  2. 标注意图层级(显性/隐性/潜在)
  3. 定义置信阈值(低于阈值必须澄清)
  4. 设计多轮对话权重(近期>远期,允许反转)
  5. 配套策略库(澄清、安抚、赔付、转人工)
  6. 建立回归测试集(覆盖高频Badcase)
  7. 上线A/B并监控投诉率、NPS、转人工趋势

这个流程像修路,地基不打稳,车一上来就翻。

七、表格清单(两个用途,不同视角)

  • 表1:四层测试目标与指标对照表* | 层级 | 测试目标 | 关键指标 | 典型风险 | |---|---|---|---| | 显性意图 | 听懂说什么 | Accuracy / F1 / Top-2 | 场景混淆 | | 隐性状态 | 识别情绪语境 | 情绪极性准确率、讽刺误判率 | 误判导致用户更怒 | | 潜在需求 | 预测下一步 | 预测命中率、策略触发率 | 只回答字面需求 | | 闭环效果 | 行动是否正确 | 任务完成率、投诉率、转人工变化 | 只会说不会做 |

  • 表2:脏样本清单与覆盖策略* | 样本类型 | 例子 | 必测原因 | 覆盖方式 | |---|---|---|---| | 模糊意图 | “我有点不舒服” | 误判风险高 | 低置信触发澄清 | | 讽刺情绪 | “你们物流真快啊” | 情绪误判会激怒用户 | 情绪极性评测 | | 多轮漂移 | 订机票→查天气→退了吧 | 旧意图绑架 | 多轮上下文权重 | | 场景歧义 | “买苹果” | 意图归类错误 | 场景意图标注 | | 潜在需求 | “裙子什么时候发货” | 需求不止查询 | 下一步策略验证 |

八、代码示例(工程感保证,含输入/输出/翻车点)

  • 代码示例 1:置信度阈值触发澄清(场景:模糊意图)* 输入示例: 用户:“这裙子我有点不舒服”

可运行代码:

from typing import Dict

def resolve_intent(intent_score: Dict[str, float], threshold=0.85):
    best_intent = max(intent_score, key=intent_score.get)
    best_score = intent_score[best_intent]
    if best_score < threshold:
        return "您是想了解发货时间,还是想修改配送地址?"
    return f"已为您进入{best_intent}流程"

# 输入示例
intent_score = {"发货时间查询": 0.62, "修改地址": 0.59}
print(resolve_intent(intent_score))

预期输出: “您是想了解发货时间,还是想修改配送地址?”

翻车点提醒: 如果低置信直接答,用户会觉得你在装傻,还可能直接投诉。


  • 代码示例 2:多轮意图漂移处理(场景:上下文权重)* 输入示例: 对话:订机票 → 查天气 → 退了吧

可运行代码:

def resolve_multi_turn(history, latest):
    # 近期意图权重更高,但允许新指令覆盖旧语义
    recent_intent = history[-1]["intent"]
    if "退" in latest and "机票" in history[0]["intent"]:
        return "退机票"
    return recent_intent

history = [
    {"intent": "订机票"},
    {"intent": "查天气"}
]
latest = "那帮我退了吧"

print(resolve_multi_turn(history, latest))

预期输出: “退机票”

翻车点提醒: 如果只看上一轮,很可能误判成“取消天气提醒”。

九、结语:测试的不是“懂”,是“帮你做对”

意图识别测试,最终不是给模型打分,而是让产品在最容易翻车的地方别翻车。 我承认,测清楚这套东西很累,但不测会更惨。 你要的不是“90%准确率”,而是“用户在愤怒时你能安抚、在模糊时你能澄清、在关键时刻你能补偿”。

这事就像开车: 模型懂路牌不够,测试要保证它真的会安全开车。 别让AI在用户最难的时候,做了最蠢的事。

#AI测试 #意图识别 #大模型评测 #NLP #多轮对话 #情绪识别 #产品体验 #质量保障 #Badcase #闭环设计