☰
意图识别实战:从规则匹配到传统机器学习,再到混合大模型方案
2026/10/5 7:09:23 网站建设 项目流程

做了快两年的对话系统和 AI Agent 相关的开发,从最早期的规则引擎,到后来的分类模型,再到现在直接用大模型做意图识别,这条路走了不少弯路。今天把这些经验整理一下,给正在做相关开发的朋友做个参考。

摘要:意图识别是对话系统的核心。本文从规则匹配、传统机器学习到大模型,梳理三代意图识别方案的演进与取舍,并结合工程实践给出「高频意图用轻量模型、低频复杂意图交给大模型」的混合落地思路,帮你少走弯路。

为什么意图识别这么重要?

简单说,意图识别就是搞清楚用户到底想干嘛。

用户说一句话,系统要判断他是想查信息、想办事、还是就是随便聊聊。判断对了,后面的流程才能跑通;判断错了,整个对话就跑偏了。

这个环节看似简单,实际上是整个对话系统最核心的部分。意图识别准确率上不去,后面再怎么优化都是白搭。

第一代:规则匹配,简单粗暴

最早做项目的时候,没钱买模型,也没什么数据,就靠写规则。

用户说什么关键词,就对应什么意图。比如用户说 “退款”,就触发退款流程;用户说 “查订单”,就触发查询流程。

这种方式的优点是简单直接,开发快,好解释。缺点也很明显:

  • 用户换个说法就认不出来了

  • 规则写多了之后互相打架,维护起来崩溃

  • 边界情况特别多,永远补不完

那个时候我们光规则就写了上千条,每次出问题就是到处找哪条规则写错了,痛苦得很。

第二代:传统机器学习,上了一个台阶

后来数据积累多了,开始用传统的分类模型。

把用户说的话分词,提取特征,然后用 SVM、朴素贝叶斯这些模型做分类。效果比规则好不少,用户换个说法也能认出来了。

但还是有问题:

  • 特征工程特别费时间,要人工调

  • 小语种、口语化的内容效果不好

  • 新意图出来的时候,要重新收集数据、重新训练,迭代很慢

而且传统模型对上下文的理解能力很弱,用户说半句话它根本接不上。

第三代:大模型时代,思路完全变了

大模型出来之后,意图识别这件事的玩法彻底变了。

以前是 “先分类,再处理”,现在大模型本身就能理解语义,你直接把用户的问题和系统的功能列表给它,让它自己判断是哪个意图。

这种方式的好处太明显了:

  • 不用再训练专门的分类模型了

  • 新意图只要在提示词里加一句就行,几分钟就能上线

  • 用户说什么奇怪的说法都能理解,泛化能力特别强

但也不是完美的。大模型做意图识别,成本比传统模型高,延迟也大一点。而且有时候会 “想太多”,把简单的问题想复杂了。

下面把三代方案放在一起对比一下,方便直观感受各自的取舍:

维度规则匹配传统机器学习大模型
准确率低,依赖规则覆盖中,依赖特征工程高,语义理解能力强
开发成本低,写规则即可高,需标注数据、调特征中,主要靠提示词设计
维护成本高,规则易冲突、难维护中,新意图需重新训练低,新意图改提示词即可
延迟极低低相对较高
泛化能力弱,换个说法就失效一般,口语化效果差强,能理解各种奇怪说法
适用场景意图少、说法固定的小项目数据充足、意图相对稳定的场景意图复杂、变化快、追求泛化的场景

小结:规则匹配胜在简单直接,适合小规模固定场景;传统机器学习在数据充足时性价比不错,但迭代慢、泛化弱;大模型能力最强、维护最省心,但成本和延迟更高。实际落地不必二选一,把高频简单意图交给轻量模型、低频复杂意图交给大模型,往往是最稳的组合。

工程实践中的几个坑

实际落地的时候,我踩过不少坑,这里列几个比较典型的:

1. 别全靠大模型,混合方案最靠谱

现在我们的做法是:高频常用意图,还是用轻量分类模型快速判断,准确率高、速度快、成本低。低频复杂意图,再交给大模型处理。

这样既能保证性能和成本,又能处理复杂情况。全用大模型,不仅贵,而且没必要。

下面用一段 Python 伪代码示意这种混合路由的核心逻辑:

# 高频意图白名单:这些意图用轻量分类模型,快且便宜HIGH_FREQ_INTENTS={"查订单","退款","改地址"}# 置信度阈值:低于该值不信任当前模型结果CONFIDENCE_THRESHOLD=0.8defroute_intent(user_input:str,context:dict)->str:# 第一步:先用轻量分类模型快速判断intent,confidence=light_model.predict(user_input,context)# 第二步:意图优先级判断——高频意图直接走轻量模型ifintentinHIGH_FREQ_INTENTSandconfidence>=CONFIDENCE_THRESHOLD:returnintent# 命中高频意图且置信度足够,直接返回# 第三步:低频或复杂意图,降级交给大模型兜底llm_intent=llm_model.predict(user_input,context)llm_confidence=llm_model.confidence()# 第四步:大模型结果也要过置信度阈值,不够就走兜底流程ifllm_confidence>=CONFIDENCE_THRESHOLD:returnllm_intent# 置信度都不够:反问用户或转人工,别硬猜returnfallback_to_human(user_input)

核心就三步:高频意图优先走轻量模型,命中且置信度够就直接返回;低频复杂意图降级给大模型;最后无论哪个模型,置信度不够都走兜底,绝不硬猜。

2. 一定要加置信度阈值

大模型判断完意图之后,不是直接就信了。我们会看它的置信度,如果置信度不够高,就走兜底流程,要么反问用户,要么转人工。

别觉得有了大模型就万事大吉了,它也会犯错。有个兜底机制,系统才稳。

3. 上下文很重要

很多意图不是单看一句话就能判断的。用户前面问了什么,会影响后面这句话的意思。

比如用户说 “那这个呢?”,单独看这句话根本不知道啥意思,但结合上下文就清楚了。所以做意图识别的时候,一定要把上下文信息带上,不要光看当前这一句。

最后说两句

意图识别这个技术,从规则到传统机器学习再到大模型,走了这么多年,现在算是到了一个比较成熟的阶段。

但不是说用了大模型就高枕无忧了。工程落地的时候,还是要结合自己的业务场景,该用什么方案就用什么方案,别盲目追新技术。

有什么问题评论区交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询