
意图识别不再只是分类器:Agent 时代的 Intent Router 技术栈
过去的意图识别很像一个分类问题:用户说一句话,系统把它归到 book_flight、check_balance、refund_order 这样的标签里。再往后接 slot filling,抽出城市、日期、金额、订单号,交给业务逻辑。
Agent 时代,这个定义不够用了。
用户不只是在表达一个 intent,而是在发起一个可能跨多轮、跨工具、跨权限的任务。系统要判断:用户到底想要信息、草稿、建议、执行、修改、删除、购买、发布,还是只是闲聊?这个任务是否在范围内?需要哪些上下文?应该调哪个工具?风险等级多高?是否要人工确认?
所以今天更准确的说法不是 intent classifier,而是 Intent Router。
从 intent label 到 action policy
传统 NLU 的输出通常是:
{
"intent": "refund_order",
"slots": {
"order_id": "A123"
}
}
Agent 系统需要的输出更像这样:
{
"user_goal": "request_refund_for_order",
"dialogue_state": "missing_reason",
"scope": "in_scope",
"risk": "medium",
"candidate_tools": ["orders.lookup", "refunds.estimate_policy"],
"requires_confirmation": true,
"missing_information": ["refund_reason"],
"allowed_actions": ["read_order", "draft_refund_request"],
"blocked_actions": ["issue_refund_without_approval"]
}
这不是语义标签,而是执行策略。它把语言理解、流程状态、权限、风险和工具选择合在一起。
技术路线一:小模型分类器仍然有价值
很多团队以为 LLM 出来以后,BERT、sentence transformer、SetFit 这类小模型分类器就过时了。实际生产里不是这样。
小模型仍然有三个优势:
- 延迟低;
- 成本低;
- 输出稳定,适合高频意图初筛。
近期多篇 intent detection 研究都指向混合路线:用小模型处理明确、常见、低风险意图;对高不确定性、多轮复杂、越界检测或工具选择任务,再路由给 LLM。
这种架构比“所有请求都问大模型”更稳。
技术路线二:OOS 检测比分类准确率更关键
Out-of-scope detection 是企业对话系统里很容易被低估的问题。分类器总会给一个最像的标签,但用户请求可能根本不属于系统能力范围。
例如银行客服里,用户说:
- “帮我把这笔钱转到一个新账户,不要短信确认。”
- “我想知道这个客户是不是在洗钱。”
- “把主管账号的审批邮件转发给我。”
这些请求不能只看语义相似度。它们可能和“转账”“风险咨询”“邮件查询”相似,但在权限和合规上是 OOS 或高风险。
一个可靠的 OOS 系统通常要结合:
- softmax / margin / entropy 等分类不确定性;
- embedding 距离和类中心距离;
- 负样本增强;
- LLM 复核;
- conformal prediction 这类 prediction set 方法;
- 业务规则和权限策略。
核心原则是:宁可把不确定请求升级,也不要让模型强行归类后执行。
技术路线三:多意图识别
真实用户很少一次只说一个干净意图。比如:
“查一下这张订单为什么没发货,如果是库存问题就帮我写一条道歉短信,顺便给客户一张优惠券。”
这里至少有四个意图:
- 查询订单;
- 判断原因;
- 生成短信;
- 申请优惠券。
传统 single-label intent classifier 会被迫选一个标签。Agent 需要 multi-label 或 hierarchical planning。
多意图识别常见做法:
- multi-label classification:一个输入输出多个 intent;
- sequence tagging:按子句或 span 切分意图;
- LLM decomposition:让模型先拆任务,再逐步校验;
- workflow graph:把意图映射成有依赖关系的步骤;
- plan verifier:检查计划是否越权或缺少信息。
多意图不是为了让 agent 看起来更聪明,而是为了防止它跳步。上面的例子里,“给客户优惠券”可能需要人工审批,不能因为前面订单查询成功就自动执行。
技术路线四:多轮上下文和状态机
多轮对话里,意图往往不是一句话能决定的。
用户第一轮说:“帮我处理一下上次那个投诉。”
第二轮说:“客户态度挺急的,可以稍微补偿一下。”
第三轮说:“别走标准流程了,直接给他发。”
单看第三轮,模型可能理解成发送补偿。结合上下文,它其实是一个高风险流程绕过请求。
因此 intent router 需要维护 dialogue state:
- 当前任务是什么;
- 已收集哪些槽位;
- 哪些信息来自用户,哪些来自系统;
- 哪些动作已经执行;
- 当前是否处在确认阶段;
- 用户是否改变了目标;
- 是否出现流程绕过或权限升级意图。
很多工业系统会把 LLM 和确定性状态机结合起来:LLM 负责把自然语言映射到 DSL 或事件,状态机负责决定下一步是否合法。这比让 LLM 自己维护所有流程更可靠。
技术路线五:工具选择就是意图识别的一部分
在 agent 系统里,意图识别和 tool calling 很难分开。用户说“帮我看看为什么今天转化率掉了”,可能需要:
- 查询 BI 指标;
- 拉广告投放数据;
- 对比自然流量;
- 检查最近发布;
- 总结异常;
- 生成报告。
这里 intent router 要输出的不只是 analyze_conversion_drop,还要选择工具拓扑:先查什么,再比较什么,是否需要外部网页,是否需要写入文档。
近期 tool-use benchmark 的一个共同结论是,真实用户行为里的隐式意图、跨轮变化和组合任务,是当前模型的明显难点。工具越多,意图识别越像一个规划问题。
一个生产级 Intent Router 设计
我会把生产 intent router 设计成五段流水线。
| 阶段 | 输入 | 输出 | 技术选择 |
|---|---|---|---|
| 快速分类 | 当前 utterance + 少量上下文 | top-k intents + confidence | encoder / SetFit / BERT / small LLM |
| 范围检测 | top-k + 原文 + 用户角色 | in-scope / OOS / risky | uncertainty + negative examples + LLM |
| 任务拆解 | 多轮上下文 + 业务 schema | subgoals + dependencies | LLM structured output |
| 策略门控 | subgoals + permissions + tools | allowed / confirm / blocked | policy engine + rules |
| 执行路由 | allowed actions | tool plan / response / human handoff | tool broker + state machine |
关键点是:LLM 不应该独自决定全部。它适合做语义理解、任务拆解和模糊判断,但权限、风险、合规、最终动作要由外部策略层控制。
评估指标也要升级
传统 intent classification 看 accuracy、macro F1、weighted F1。Agent intent router 还要看:
- OOS recall:越界请求有没有被拦住;
- risky intent precision:高风险误报是否过多;
- tool selection accuracy:工具选对没有;
- missing slot detection:缺信息时是否追问;
- confirmation correctness:该确认时是否确认;
- plan validity:拆出来的任务依赖是否合法;
- handoff quality:升级给人时上下文是否完整;
- latency/cost:路由本身是否太慢太贵。
如果只看 intent label F1,很可能一个模型看起来准确,实际上会在执行阶段犯错。
结论
Agent 时代的意图识别,已经从“识别用户想问什么”变成“判断系统应该如何行动”。
这就是为什么它要同时处理分类、OOS、多意图、多轮状态、工具选择、风险分级和人工确认。技术上最稳的路线,不是纯小模型,也不是纯 LLM,而是混合架构:快速分类器负责高频稳定路由,LLM 负责复杂语义和任务拆解,策略层负责边界,状态机负责流程,评估系统负责持续改进。
意图识别如果做得浅,agent 就会变成会说话的自动点击器。意图识别如果做得深,它就是企业 AI 的交通控制塔。
来源与延伸阅读
- arXiv:Intent Detection in the Age of LLMs
https://arxiv.org/abs/2410.01627 - arXiv:Efficient Out-of-Scope Detection in Dialogue Systems via Uncertainty-Driven LLM Routing
https://arxiv.org/abs/2507.01541 - arXiv:Intent Recognition and Out-of-Scope Detection using LLMs in Multi-party Conversations
https://arxiv.org/abs/2507.22289 - arXiv:Multi-Intent Recognition in Dialogue Understanding
https://arxiv.org/abs/2509.10010 - arXiv:Task-Oriented Dialogue with In-Context Learning
https://arxiv.org/abs/2402.12234 - arXiv:Benchmarking LLM Tool-Use in the Wild
https://arxiv.org/abs/2604.06185 - arXiv:Enhancing Tool Calling in LLMs with the International Tool Calling Dataset
https://arxiv.org/abs/2603.05515