我见过了太多做智能音箱做成智障音箱的例子了,今天我就来说说如何做意图识别

本文寒冰 授权老码小张独家发布,转载需经过本人同意

今天我们来聊一个每个做AI产品的人都会遇到的经典难题。

想象一下这个场景:用户对着你的智能音箱说:"播放《成都》"。

这问题可就来了。《成都》是一首歌,还是一部同名电影?或者,用户想听的是关于成都的播客?一个指令,三种可能。你的AI系统该怎么选?

很多团队的第一反应,也是业界主流的方案,就是搞一个"混合系统":让LLM(大语言模型)先凭着它强大的理解力猜个大概,然后再用一堆我们写死的规则(Rule)、实体识别(NER)这些"小弟"帮着纠偏

这个思路,乍一看,是不是觉得挺稳的?既有大模型的泛化能力,又有规则的确定性托底。但今天,我想带你深入一步,看看这个"看起来很美"的方案,为什么常常在现实中跑着跑着就变成了一个谁都不想碰的"屎山",以及我们该如何通过一次思维上的跃迁,把它重构为一个真正意义上的"智能"系统。

美好的开始:当LLM遇上"老法师"规则

咱们先来看看这个"经典方案"是怎么设计的。通常,它会像一个流水线一样工作:

  1. LLM初步判断 :用户输入"播放MV《稻香》",LLM一看,大概率是想看视频。输出一个初步意图:video
  2. 规则强制修正 :我们定义了一些"金科玉律",比如只要句子里有"听"、"专辑"就一定是music;有"MV"、"电影"就一定是video。管你LLM说啥,我规则说了算。
  3. 知识库辅助判断 :通过NER识别出实体"稻香",然后去我们的媒资库里查。如果在音乐库里有,视频库里没有,那就倾向于是music
  4. 上下文和用户偏好:看看用户上一轮在干嘛,或者他平时是爱听歌还是爱看片。
  5. 最终仲裁 :搞一个优先级,比如:规则 > 知识库 > 上下文 > LLM。谁的优先级高,就听谁的。

这套架构看起来是不是很清晰?模块化,可插拔,逻辑分明。

graph TD subgraph "看似完美的经典方案" A[user说
我想听长津湖的电影原声带] --> B{LLM 初步判断}; B -- "可能想听歌" --> C{规则修正模块}; C -- "等等, 包含'电影'关键词!" --> D[强制修正为 video]; D -- "最终意图: video" --> E[执行播放电影]; end style C fill:#f9f,stroke:#333,stroke-width:2px

很多项目初期,这套方案确实能解决不少问题。但随着业务越来越复杂,你会发现,系统开始变得越来越"笨",越来越"一根筋"。

"一根筋"的致命缺陷:当现实打败了规则

这个架构最大的问题,在于它的"刚性"和"独裁"。它天真地认为,世界是可以被几条简单的规则和优先级清晰定义的。但现实,往往是一团乱麻。

1. 脆弱的规则,一戳就破

还记得上面那个流程图里的例子吗?"我想听《长津湖》的电影 原声带"。我们的规则模块,像个没感情的保安,看到"电影"两个字,啪一下就把意图改成了video。用户当场傻眼:"我明明想听歌啊!"

这就是硬规则的脆弱性。你试图用几个关键词去概括人类丰富多变的语言,就像想用一张渔网去捞水里的微生物,漏掉的永远比捞到的多,还经常捞错。为了修复,你只能不断加新规则、打新补丁,最后这个模块就成了代码里的"贫民窟",没人敢动。

2. 静态的优先级,凭什么你说了算?

那个"规则 > 知识库 > ..."的优先级链条,更是武断得可笑。

一个弱规则(比如包含"听"字),它的优先级真的应该高于一个来自知识库的高置信度结果吗?一个强烈的上下文信号(用户刚看完一部电影),它的优先级不应该更高吗?

更要命的是,很多团队会给每个信号源分配一个固定权重,比如规则0.7分,知识库0.6分,然后加权投票。这玩意儿最大的问题是,太死板了!对于"播放MV《稻香》"这个查询,规则模块(匹配到"MV")的可靠性几乎是100%,它的权重此刻就应该是1.0。而对于"播放稻香",规则模块啥也没匹配到,它的可靠性就是0。静态权重根本无法捕捉这种动态变化。

3. 缺失的个性化,它根本不认识你

最致命的是,整个系统里,"用户"几乎不存在。它只是在最后被当成一个微不足道的参考项。一个重度音乐发烧友和一个只看电影的用户,在系统眼里竟然没太大区别。这直接导致系统无法提供"懂我"的体验,永远停留在"对公"的层面。

思维跃迁:从"独裁"到"民主",让信号自己说话

好了,吐槽了这么多,那到底该怎么办?

关键在于一次核心的思维转变:停止让任何一个模块做"硬决策",拥抱"带置信度的软信号"

什么意思?就是说,我们不再让规则模块、知识库模块这些"小弟"直接下命令"必须是A"或"必须是B"。而是让它们每个人都发表自己的看法,并附上自己的信心。

这就像把一个"独裁"的决策过程,变成了一场所有人都可以在圆桌上发言的"民主会议"。

比如,那个脆弱的规则模块,我们可以这样改造它:

python 复制代码
# 旧的、独裁的规则模块
def rule_correction_old(text):
    if "MV" in text or "电影" in text:
        return "video" # 直接返回结果,一锤定音
    if "听" in text or "专辑" in text:
        return "music"
    return None

# 新的、提供信号的规则模块
def rule_as_signal_new(text):
    signals = []
    if "MV" in text:
        # "MV"这个词非常强,我给它0.95的信心
        signals.append({"category": "video", "confidence": 0.95})
    if "电影" in text:
        # "电影"也挺强,但可能指原声带,信心稍微低点
        signals.append({"category": "video", "confidence": 0.8})
    if "听" in text:
        # "听"这个词很弱,可能听播客,可能听歌,给个弱信心
        signals.append({"category": "music", "confidence": 0.6})
    return signals

看到区别了吗?旧模块是"我说了算",新模块是"我认为......,我的把握大概是......"。

当LLM、规则、知识库、用户画像等所有模块都从"独裁者"变成了"建议者"之后,我们的新架构就浮出水面了。

新架构的"三驾马车":信号化、融合模型与数据闭环

一个真正智能的、能持续进化的意图系统,必须依赖这三根支柱。

1. 万物皆信号

这是基石。把LLM的输出、规则匹配结果、NER在各个知识库的查找结果、用户历史行为偏好......所有的一切,都转化成带有置信度的信号。

2. 可学习的"仲裁者"

现在我们有了一大堆五花八门的信号,谁来做最终决策?不是写死的优先级,也不是拍脑袋的加权,而是训练一个轻量级的融合模型

这个模型就像一个经验丰富的会议主持人,它会观察今天到场的所有"建议者"(各个信号源)以及它们各自的发言(信号内容和置信度),然后根据以往的经验(训练数据),做出最靠谱的最终裁决。

graph TD A[用户输入] --> B{LLM} A --> C{规则引擎} A --> D{NER+媒资库} A --> E{用户画像} subgraph "新一代融合架构" B -- "信号1: {cat:music, conf:0.7}" --> F C -- "信号2: {cat:music, conf:0.6}" --> F D -- "信号3: {cat:video, conf:0.8}" --> F E -- "信号4: {pref:music, score:0.9}" --> F F[融合模型 GBDT/LR] -- "综合所有信号,动态决策" --> G[最终意图] end style F fill:#cde,stroke:#333,stroke-width:2px

这个融合模型可以选择的方案很多,丰俭由人:

融合策略 优点 缺点 适用场景
静态加权 实现简单,无需训练 过于死板,无法适应动态场景 快速验证期的原型系统
逻辑回归(LR) 简单、快速、可解释性好 线性模型,无法捕捉复杂特征交叉 大部分场景下的优秀基线
GBDT 效果好,能自动做特征交叉 模型稍复杂,可解释性稍差 追求更高准确率的生产系统
小型神经网络 潜力大,能学习更复杂的非线性关系 需要更多数据,调参复杂 数据量充足,且有高手调优

3. 系统的"灵魂":永不停歇的反馈闭环

这是让系统从"死"变"活"的关键。一个没有反馈的系统,就像一个只做题不看答案的学生,永远不会进步。

我们必须建立一个完整的数据闭环:

  1. 详细记录:记录每一次请求的所有中间过程------LLM说了啥,每个信号是啥,融合模型怎么判的,以及用户最终的行为(是满意地听了歌,还是骂骂咧咧地手动去搜了电影)。
  2. 自动挖掘:通过日志分析,自动找出那些"系统判断为A,但用户实际选择了B"的 bad case。这些就是系统犯错的铁证,是比你人工标注一万条数据都宝贵的财富。
  3. 持续学习:定期把这些新的"错题本"喂给我们的融合模型和LLM进行微调,让它们下一次不再犯同样的错误。

结语

回顾一下我们的旅程:我们从一个看似清晰、实则脆弱的"流水线"架构出发,通过将硬决策软化为信号 ,引入了一个可学习的融合模型 作为智能仲裁者,并为整个系统注入了数据闭环的灵魂

这不仅仅是一个技术方案的升级,更是一种架构哲学的转变。它要求我们放弃对系统的"完全控制欲",不再试图用僵化的规则去定义一个复杂的世界。而是去构建一个谦逊的、懂得倾听多方意见、并能从错误中不断学习的"有机体"。

下一次,当你的AI系统又犯傻时,别急着给它打补丁。问问自己:我是在继续加固一个"一根筋"的独裁者,还是在帮助一个"民主会议"变得更聪明?

希望今天的分享,能给你带来一些"Aha!"的瞬间。

相关推荐
倪旻萱43 分钟前
XSS漏洞----基于Dom的xss
前端·xss
JSON_L3 小时前
Vue rem回顾
前端·javascript·vue.js
brzhang5 小时前
颠覆你对代码的认知:当程序和数据只剩下一棵树,能读懂这篇文章的人估计全球也不到 100 个人
前端·后端·架构
躲在云朵里`5 小时前
SpringBoot的介绍和项目搭建
java·spring boot·后端
斟的是酒中桃5 小时前
基于Transformer的智能对话系统:FastAPI后端与Streamlit前端实现
前端·transformer·fastapi
烛阴5 小时前
Fract - Grid
前端·webgl
喵个咪5 小时前
Golang微服框架Kratos与它的小伙伴系列 - 分布式事务框架 - DTM
后端·微服务·go
JiaLin_Denny6 小时前
React 实现人员列表多选、全选与取消全选功能
前端·react.js·人员列表选择·人员选择·人员多选全选·通讯录人员选择
JouJz6 小时前
Kafka深度解析:架构、原理与应用实践
架构·kafka·linq