当你对 AI 说"帮我查一下后面三站附近评分高一点的日料",它需要理解多少东西?
引言
你有没有想过,当你随口对一个 AI 助手说出一句话,它到底经历了什么?
比如这句:
"帮我查一下后面三站附近评分高一点的日料"
如果让你来做这个系统,你需要从这句话里提取出:
- 领域:公共交通 + 餐饮
- 意图:搜索路线沿途的餐厅
- 参数:范围=后面三站,菜系=日料,排序=评分
- 是否需要追问:不需要
- 能否并行执行:可以
这已经远远超出了传统"客服分类"的范畴。这就是现代 Agent 系统中意图识别(Intent Recognition) 正在解决的问题。
今天这篇文章,带你看看这个领域从"if-else"到"任务结构提取器"的五代演进。
意图识别在 Agent 中的角色
在一个完整的 Agent 系统里,意图识别器(Intent Recognizer)不只是"分个类"这么简单。它需要同时完成这些事:
| 能力 | 说明 |
|---|---|
| 领域路由 | 用户的问题属于哪个领域? |
| 技能路由 | 应该调用哪个 skill 或 workflow? |
| 参数提取 | 提取关键参数(slot filling) |
| 约束识别 | 有什么限制条件? |
| 追问判断 | 信息够不够?需不需要追问? |
| 多意图分解 | 一句话里是不是包含多个子任务? |
| 安全边界 | 是否涉及越权或危险操作? |
可以说,意图识别是 Agent 系统的"入口调度中心"。
第一代:规则 + 关键词路由

最早期的做法简单粗暴:
if"天气"inquery:weather_skill()elif"股票"inquery:finance_skill()优点:稳定、可控、延迟低。
致命问题:换个说法就崩了。"明天出门需要带伞吗"——没有"天气"两个字,系统直接傻掉。
但别小看它。时至今日,规则路由仍然活跃在:
- 安全策略(safety rules)
- 硬性路由(hard routing)
- 兜底逻辑(fallback)
- 紧急策略(emergency policy)
工业界永远不会完全放弃规则。
第二代:传统 NLU 分类模型
到了这一代,我们有了 FastText、TextCNN、BERT、RoBERTa 这些武器。
核心思路很简单:
用户输入 → Encoder → CLS pooling → softmax → 意图标签
本质就是一个分类问题:P(intent | x) = softmax(Wx + b)
看起来不错,但在 Agent 场景下迅速暴露三个致命问题:
1. 意图爆炸
当 skill 从 10 个增长到 100、1000、10000 个时,softmax 分类根本不可扩展。
2. 复合意图
"帮我比较一下东京飞上海最便宜的航班,并推荐附近便宜酒店"
这不是一个 intent,而是两个甚至三个。
3. 参数决定流程
"后面三站有什么吃的"——真正决定 workflow 走向的不是 intent 标签,而是range = next_3_stops这个 slot。
第三代:语义路由(Embedding Router)

这是目前很多 Agent 系统第一层实际在用的方案。
核心思想:不做硬分类,而是做语义匹配。
用户输入 → Embedding → 向量 → ANN 搜索 → Top-K 候选 Skills
本质公式:score(q, s) = cos(e_q, e_s)
为什么这一步是革命性的?
因为新增一个 skill,只需要写一段描述,embedding 进向量库就行了。不需要重新训练分类器。
这和推荐系统的思路如出一辙——"粗召回 + 精排":
Query → Embedding Router → Top-K Skills → LLM Rerank → Final Skill
如果你做过推荐算法,这个架构你一定倍感亲切。
第四代:LLM 驱动的意图识别
这是当前的主流方案。
核心思想:让 LLM 直接输出结构化的意图 JSON。
用户输入 + 历史上下文 + 系统策略 ↓ LLM ↓ 结构化意图 JSON
输出类似这样:
{"domain":"restaurant","intent":"search_restaurant","slots":{"location":"shibuya","price":"cheap"}}为什么 LLM 意图识别能崛起?
| 能力 | 传统分类 | LLM |
|---|---|---|
| 多意图 | 差 | 强 |
| 参数提取 | 弱 | 强 |
| 长上下文 | 弱 | 强 |
| Zero-shot | 差 | 强 |
| 复合任务 | 差 | 强 |
| 推理能力 | 无 | 有 |
但要注意——真正的线上系统从来不是 LLM 一个人在战斗。
第五代:层次化意图 + Planner

这是 Agentic AI 真正的前沿方向。
意图识别不再是简单的query → intent,而是:
用户输入 ↓ 高层目标(high-level goal) ↓ 子目标分解(subgoal decomposition) ↓ 技能图路由(skill graph routing)
举个例子。用户说:
"规划一个东京三天旅游,预算5000人民币"
系统的处理过程:
一级意图:travel_planning
二级分解:
- find_flights
- find_hotels
- build_itinerary
- budget_optimization
三级技能图:
planner ├── flight_search ├── hotel_search ├── map_agent └── budget_optimizer
这意味着什么?
意图识别器从一个"分类器",变成了一个**"任务结构提取器"(Task Structure Extractor)**。
这是 Agent 时代最本质的变化。
为什么 Slot Extraction 如此关键?
你可能会问:参数提取(slot extraction)为什么单独拎出来说?
因为它解决了一个核心问题:把自然语言的不确定性,转化为结构化的状态变量。
用户说"后面三站",workflow 真正需要的是:
{"range_type":"relative_stop","offset":3}Workflow 只认结构化变量。Slot extraction 就是那个"翻译官"。
真正可落地的工业架构
说了这么多代际演进,真正能在线上跑的到底是什么?
答案是:"规则 + 检索 + LLM" 混合架构。

完整链路如下:
用户输入 ↓ 预处理(Preprocess) ↓ 安全规则(Safety Rule) ↓ 领域路由(Domain Router) ↓ 意图识别(Intent Recognizer) ↓ 参数填充(Slot Filling) ↓ 规划器(Planner) ↓ 工具选择(Tool Selection) ↓ 执行器(Executor)
落地建议:四步走
如果你现在要搭一个 Agent 系统的意图识别模块,我建议分四步:
Phase 1:混合路由器
先把三层堆起来:规则 + Embedding 召回 + LLM JSON 解析。不要一上来就搞端到端 agent。
Phase 2:Schema-first 意图定义
用强约束 JSON schema 定义意图输出格式:
{"domain":"","intent":"","slots":{},"constraints":{},"clarification":[]}这一步让系统行为可预测、可调试、可监控。
Phase 3:意图 → 技能图
不要做intent → function的一对一映射,而是intent → executable graph:
{"skills":["..."],"dependencies":["..."]}Phase 4:可训练路由器
积累数据,开始训练:
- 路由模型(router model)
- 奖励模型(reward model)
- 规划模型(planner model)
用 router trace、失败路由、追问数据、工具成功/失败来持续优化。
总结
Agent 中的意图识别,已经从"分个类"演进为"理解任务结构"。五代技术路线概括如下:
| 代际 | 方案 | 核心思想 |
|---|---|---|
| 第一代 | 规则+关键词 | if-else 匹配 |
| 第二代 | NLU分类 | softmax 分类 |
| 第三代 | 语义路由 | embedding 匹配,粗召回+精排 |
| 第四代 | LLM驱动 | 直接输出结构化 JSON |
| 第五代 | 层次化+Planner | 任务结构提取 + 技能图路由 |
而真正能上线的,是混合架构——规则兜底、向量召回、LLM精排,三者缺一不可。
如果你正在搭建 Agent 系统,记住一句话:
意图识别不是终点,它是通向"理解用户真正想做什么"的起点。
如果觉得有帮助,欢迎点赞和分享。
