当你对 AI 说"帮我查一下后面三站附近评分高一点的日料",它需要理解多少东西?


引言

你有没有想过,当你随口对一个 AI 助手说出一句话,它到底经历了什么?

比如这句:

"帮我查一下后面三站附近评分高一点的日料"

如果让你来做这个系统,你需要从这句话里提取出:

  • 领域:公共交通 + 餐饮
  • 意图:搜索路线沿途的餐厅
  • 参数:范围=后面三站,菜系=日料,排序=评分
  • 是否需要追问:不需要
  • 能否并行执行:可以

这已经远远超出了传统"客服分类"的范畴。这就是现代 Agent 系统中意图识别(Intent Recognition) 正在解决的问题。

今天这篇文章,带你看看这个领域从"if-else"到"任务结构提取器"的五代演进。


意图识别在 Agent 中的角色

在一个完整的 Agent 系统里,意图识别器(Intent Recognizer)不只是"分个类"这么简单。它需要同时完成这些事:

能力 说明
领域路由 用户的问题属于哪个领域?
技能路由 应该调用哪个 skill 或 workflow?
参数提取 提取关键参数(slot filling)
约束识别 有什么限制条件?
追问判断 信息够不够?需不需要追问?
多意图分解 一句话里是不是包含多个子任务?
安全边界 是否涉及越权或危险操作?

可以说,意图识别是 Agent 系统的"入口调度中心"


第一代:规则 + 关键词路由

gen1

最早期的做法简单粗暴:

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)

gen3

这是目前很多 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

gen5

这是 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" 混合架构。

arch

完整链路如下:

用户输入 ↓ 预处理(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 系统,记住一句话:

意图识别不是终点,它是通向"理解用户真正想做什么"的起点。


如果觉得有帮助,欢迎点赞和分享。