本文深入探讨了意图识别在 Agent 中的关键作用,分析了常见问题及解决方案。核心内容围绕意图识别的定义、挑战和分层策略展开,提出通过规则拦截、微调小模型和大模型分层处理,以平衡延迟、准确率和成本,提升 Agent 的响应质量和用户体验。文章强调标签设计和意图清单的重要性,并给出了具体的实现方法和优化建议,旨在帮助开发者构建更高效、准确的智能 Agent 系统。
意图识别到底该怎么做?为什么你开发的 Agent 老是答非所问?
先说一个很典型的场面。
工具接了十几个,提示词写了三百行,评测集上一跑,准确率挺好看。真上线两周,用户投诉最多的不是「答错了」,是「答非所问」。
用户说「我不想买了」,Agent 去查物流了。用户说「那件蓝色的帮我退一下」,Agent 反问「您要退哪个订单」——上一轮明明刚说过。
八成不是模型不行,是「判断用户想干什么」这件事,你整包塞给了大模型。
意图识别就是干这个的。它是 Agent 的入口闸门,闸门开错,后面再漂亮的工具调用、再长的上下文,全是白费。
一、意图识别到底在识别什么
医院的分诊台护士,就是真人版的意图识别。
她不听你把话说完,也不做诊断,只干一件事:把你这句话,映射到有限的几个科室里去。急诊扫一眼就放行,普通病人按经验分科,遇到说不清的,才叫来主治医生问两句。
把用户这句话映射到有限的几个标签上,这就是意图识别干的活,没有别的。
难的地方在于:用户的表达是无限的,你的标签是有限的。同样一个「退」,有人写「这个不太合适」,有人写「退货」,有人直接甩一张订单截图。你要用几个固定格子,去装五花八门的说法。
它还必须在链路入口发生。工具选哪几个、上下文塞多少、要不要转人工,全看这一步给出的那个标签。
二、延迟、准确率、成本,三个数互相拆台
给意图识别定方案,绕不开三个数。
延迟:它站在入口,耗时会被整条链路继承,用户等 1 秒和等 3 秒是两个产品。准确率:分错了后面全错,这不是「差一点」,是百分之百的返工。成本:它是全链路调用最频繁的一步,每轮对话都得跑一次。
这三个数天然互相拆台。想顶满准确率,省事的办法是每句话都丢给大模型,延迟和成本双双起飞;想省钱,用关键词硬匹配,准确率立刻掉进沟里。
所以解法不是「挑一个折中的模型」,而是分层:让说得清楚的请求走便宜通道,只把说不清楚的那部分交给贵的能力。
三、分层之前,先把标签设计对
分层能省成本,前提是标签本身站得住。这一步比选模型更重要,也常常被跳过。
两条硬标准。一是细粒度:别停在「查询」「售后」这种粗标签上——「查询」是查订单、查物流、还是查余额?三个走的是三套接口。粒度切到能直接对应一个下游动作,才算切到位。
二是低重叠:标签之间不能互相包含,边界要能用一句话讲清楚。有个实用的自检法,给每个标签写三条正例、三条反例,正例是「看到这种表述就往这里放」,反例是「这种看着像、但必须往别处放」。写不出反例的标签,通常跟隔壁那个是糊在一起的。
举个真实的糊法。「退款」和「取消订单」,很多人归成一类,可一个是已经付了钱要退回来,一个是还没付款不想要了,走的两套流程。这种标签不拆开,模型分得再准也没用——分的本来就是两件事。
四、三档怎么做
第一档:规则拦截
表达很明确的意图,关键词加正则就够了。
这一档的价值被严重低估。用户说了「转人工」「找客服」,你还让大模型思考三秒,那就是在浪费他的时间。订单号、金额、日期这些有固定长相的东西,正则一抓一个准,命中就是准的,耗时微秒级,成本是零,它的问题只是覆盖面有限。
const text = "我要转人工,订单 20260917001 怎么还没发货"; // 订单号有固定长相,正则抓比模型准,也快得多 const orderId = text.match(/订单/s*(/d{8,})/)?.[1]; if (orderId) return { intent: "query_order", orderId, from: "rule" }; // 固定几个词,用户一提就该走人工,不要犹豫 if (/转人工|找客服|要人工/.test(text)) return { intent: "human", from: "rule" };三个容易踩的点:只有命中必然对的规则才允许直接短路返回;规则要能热更新,别写死等发版;规则堆到几百条没人清理,它就是新的技术债。
第二档:微调一个小模型,只让它出一个标签
这一档性价比很划算,也是主力。做法很朴素:把分类变成一次受约束的输出——模型只回答一个标签名,别的什么都不许说。
落地通常是一个 LoRA 微调过的小模型,0.5B 、 1.5B 这种就够,使用足量的标注数据,垂直场景通常能跑到九成以上,单次推理几乎达到秒级,成本几乎可以忽略。
指令部分跟前面那张意图清单是同一份,只是换了句式:
const prompt = `你是一个业务意图分类器。候选意图只有: - query_order(查订单进度) - refund(已付款要退款) - cancel(未付款要取消) - human(要转人工) - unknown(以上都不是) 请根据用户输入以及最近对话上下文判断意图。 要求:1. 只能从上述标签中选择一个。2. 不允许解释。3. 无法判断时输出 unknown。 用户输入:${text} 最近对话:${recent.join("/n")}`; // 模型返回的就是一个标签,例如:refund const label = (await askModel(prompt)).trim();三条要求各管一件事。「只能选一个」堵掉两边都想沾;「不允许解释」是为了让输出能被程序稳定解析;「无法判断时输出 unknown」是给它一条体面的退路,没有这条它宁愿硬猜。
上下文在这一档的作用,是解决「那这个呢」。上一轮说「我想退掉那件蓝色的」,这一轮只问「运费谁出」——句子里没有「退款」两个字,但意图是明确的。所以提示词末尾要固定带上最近几轮对话,再有用户身份、当前渠道这类信息。
同一份标签定义还能用来造标注数据:让大模型先按它批量打标,人只做抽检和纠错,比人工标几千条现实得多。
这一档的产出就是一个标签。它拿不准时会回你一句 unknown——一个看得见、数得出来的「下不了判断」。上线后盯着 unknown 的占比和误判样本回流这两个数就够了。
第三档:大模型,接住所有的 unknown
第二档答 unknown 的那部分,交给大模型。
这些请求的共同点是:不是小模型不会,是它缺信息——用户跨着半个系统问,或关键信息散在好几轮对话里。大模型上下文更宽,也更能处理绕的说法。
这一档的提示词,该出现的不是「你是资深意图识别专家」这种人设,而是三样:前面那张意图清单原样贴进去、标签之间的边界说明、以及输出格式。
const reply = await askLLM(` 本轮用户说:${text} 最近三轮对话:${recent.join("/n")} 可选意图:refund=已付款要退款 / cancel=未付款要取消 / query_logistics=查物流 / unknown=以上都不是 边界:说"不想要了",已付款选 refund,未付款选 cancel 只输出 JSON:{"intent":"...","reason":"一句话"} `);边界说明比标签定义更重要。标签定义告诉它「有什么」,边界说明告诉它「别往哪放」,这才是让大模型在相邻意图上不飘的东西。
它也一样要留 unknown。大模型比小模型更爱硬答,总能编一个看着合理的标签。区别在于,到这一档不该再往下推了:要么反问补全信息,要么直接转人工。
也别让它顺便决定「要不要调工具」。它在这一步只负责分类,越界就会开始幻觉。
三档不是三选一,是一条流水线
从便宜到贵依次短路,前面能接住,后面的就不用出工:
async function route(text) { const byRule = matchRule(text); // 第一档:规则,微秒级 if (byRule) return byRule; const byModel = await classifyBySmallModel(text); // 第二档:只出一个标签 if (byModel !== "unknown") return byModel; // 答得出来就用,答不出往下走 return await askLLM(text); // 第三档:接住所有的 unknown }上线之后盯四个数:每一档的命中率、各档退回下一档的比例、各意图的分布变化、误判样本有没有回流到标注集。第四个尤其要盯住——意图识别不是一次调好的工程,是拿线上数据一轮一轮喂出来的。这三档建议先截图,搭的时候对着排一遍。
结尾
回到最开始那个目的。延迟、准确率、成本,从来不是靠选一个「更强的模型」同时满足的,是靠把流量分层,让贵的能力只出现在真正需要它的地方。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
为什么要学习大模型?
我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。
大模型入门到实战全套学习大礼包
1、大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
2、大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
3、AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
4、大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
5、大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
适用人群
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。