任何对话功能的实现,第一个要面对的任务就是意图识别——搞清楚用户到底想要什么,这个功能的准确率直接决定了后续动作和流程的执行:对当前流程而言,错误意图——错误执行——错误结果;对长期运行来看,一轮误判被存入历史对话,后续的判断会基于该历史进行执行,导致多米诺骨牌效应。

业务角度

从业务角度来看,意图识别的准确率有以下几个阈值:

低于90%:基本判定为失效,大量用户流式;

90-95%:基本保证可用,但仍有优化空间;

95%以上:该水平以上每增加1%都是质的飞跃。

架构设计角度

下面将从架构设计角度来分析如何优化意图识别准确率

架构解析

从全链路来看,对话功能的实现可以拆解为:接入层——意图识别层——业务逻辑层——输出层。

接入层:

完成消息接收、预处理(包括数据清洗、上下文组装等工作)等功能;

意图识别层:

核心部分,完成意图分类、实体抽取、情感分析

意图分类用来判断用户想做什么,可以拆解为三层架构:

关键词匹配——轻量分类——LLM兜底

关键词匹配:基于规则库实现,以智能云商平台项目为例,专门设计一个规则库来判定退货申请,ruleId为AutoReturn支持自动退货,ruleId为StrictReject严格不允许退货,直接跳转到拒绝部分。

轻量分类:混合检索(向量检索+关键词检索,BM25rescore),用于关键词匹配未命中但是语义相近的意图。

LLM兜底:处理低置信度/很罕见的输入,可以结合few-shot做提升。

实体抽取用于提取关键参数,如提取流水中的订单号、用户名、金额等;情感分析用于识别用户态度;预先准备好槽位模板(如order_id,return_reason,product_name等),在确定意图之后加载对应模板,并将提取到的内容加载到模板中

业务逻辑层:

实现对话管理、RAG知识检索、API调用、决策执行

输出层:

生成回复、渲染并推送

优化角度

可以从任务执行的流程来分析可优化的节点:

执行前预处理

1、测试集处理

测试集构建的合理与否会极大地影响意图识别的准确率——测试集往往由内部人员构造,描述的是"希望用户如何表达",真实用户的表达方式与内部假设存在显著差异,所以有时即使离线测出来准确率90%+,但是实际用起来体感很差。

针对这一问题,可以从三个角度来优化:1、借助脚本对样本进行泛化;2、基于历史日志进行改写;3、基于真实日志和对抗样本进行改写。

2、槽位类型

意图识别达到的效果是:可以判断现在什么执行必须向用户询问,考虑到执行操作的风险性,可以将槽位进行类型标记:

如果提取的实体只包含商品数量、商品名等,对应映射的槽位可以标记为默认执行;

如果包含用户地址等信息,对应的槽位类型标记为必填,如果当前槽位不完整,需要获取相关信息必须向用户提问;

如果是支付、转账等操作必须每次都显式要求用户确认。

3、针对用户问题,先检测是单意图还是多意图,如果是多意图,先进行query拆分(LLM精确拆分),后分析子query之间的依赖关系和执顺序。

执行中检测

1、多轮对话管理

为每个意图维护5-10轮对话,根据语境提供的额外信息提升意图识别准确率;并将对话历史结构化保存到RAG向量库中。

2、意图切断

当检测到用户话题急剧转换时,主动隔离上下文,避免无用信息的干扰

执行后复盘

Bad case

周期性的从线上挖掘错误案例,更新case 库

Reference:

大模型意图识别:架构设计、开发实战与准确率提升方法论

https://mp.weixin.qq.com/s/dNqRop-FA3d9KnCundu9DQ

更多推荐