设计智能体(Agent)的意图识别(Intent Recognition)系统,是构建整个Agent大脑的核心环节。优秀的意图识别不仅需要准确理解用户的字面意思,还要结合上下文、用户画像以及业务场景。
在目前大模型(LLM)时代,意图识别的设计范式已经从传统的"纯分类模型(如BERT+规则)"演进到了"语义路由(Semantic Routing)+ 工具调用(Function Calling)"的混合架构。
一、 意图体系设计(Taxonomy Design)
在写代码或调模型之前,首先要定义好Agent"能听懂什么"。
- 分层设计 :通常采用
领域 (Domain) -> 意图 (Intent) -> 槽位 (Slot/Parameters)的三级结构。- 例如 :
旅游 (Domain) -> 预订机票 (Intent) -> 出发地、目的地、时间 (Slots)。
- 例如 :
- 定义边界(OOD与兜底) :除了业务意图,必须设计闲聊意图 (Chit-chat) 和 未知意图 (Out-of-Domain, OOD)。当用户输入超出Agent能力范围时,系统应能准确识别为OOD并优雅地拒绝或引导。
- 颗粒度控制:意图不要过细也不要过粗。过粗会导致后续业务逻辑复杂,过细会导致模型分类容易混淆。
二、 技术架构选择(Modern Agent Workflow)
现代Agent通常不依赖单一技术,而是采用**漏斗式/多级路由(Multi-tier Routing)**架构,以平衡准确率、成本和响应延迟:
第一级:规则与缓存层(Rule & Cache)
- 做法:使用正则表达式、确切的关键词匹配,或者基于Redis的精确语义缓存(Exact Match Cache)。
- 场景:处理超高频、极简单的指令(如:"退出"、"查余额"、"人工服务")。
- 优点:0延迟,极低成本,100%准确。
第二级:语义路由层(Semantic Router / 小模型)
- 做法:将用户的Query转化为向量(Embedding),并在向量数据库中与预设的"标准意图语料库"进行相似度匹配(Cosine Similarity)。也可以训练一个轻量级的意图分类模型(如FastText、RoBERTa)。
- 场景:处理常规的、表达清晰的单轮业务意图。
- 优点:响应快(几十毫秒),成本低,能够拦截80%的标准业务请求。
- 开源库推荐 :
semantic-router。
第三级:大模型分析层(LLM Function Calling / Prompting)
- 做法 :如果前两级没有以高置信度命中,则将Query连同上下文交给大语言模型。利用大模型的 Function Calling(工具调用) 能力。
- 将所有意图定义为一个或多个Function的描述(包含意图说明和所需参数)。
- LLM会根据Query自动判断应该触发哪个Function,并顺便把参数(槽位)提取出来。
- 场景:处理长尾Query、复杂的长难句、多意图混合语句、隐式意图(如用户说"我有点冷",LLM识别意图为"调高空调温度")。
- 优点:泛化能力极强,零样本或少样本即可工作。
三、 意图参数提取(槽位填充 Slot Filling)
意图识别往往伴随着参数提取。Agent识别出用户的意图是"订机票"后,还必须知道"从哪到哪"。
- 传统方法:使用NER(命名实体识别)模型。
- Agent时代方法 :通过 LLM 的
JSON Mode或Function Calling强约束输出格式。 - 追问机制(Clarification):如果关键槽位缺失(如识别了订机票,但没有时间),Agent的意图管理模块应当自动挂起当前任务,向用户发起"反问(Prompting for clarification)",直到关键参数收集完毕。
四、 多轮上下文管理(Context & State Management)
真实用户的意图往往是在多轮对话中逐渐清晰的。
- 指代消解(Coreference Resolution):用户说"帮我查一下去北京的机票",Agent回复后,用户又说"那高铁呢?"。此时系统必须结合历史记录,将当前意图还原为"查询去北京的高铁"。
- LLM多轮理解 :可以直接将最近的 K 轮对话历史拼接(如
System Prompt + History + User Query),让LLM在多轮语境下判断当前最新意图。 - 状态机(State Machine):在复杂业务中(如办理银行业务),可以引入状态机,用户所处的当前节点会极大地改变他同一句话的意图权重。
五、 处理模糊与拒识(Ambiguity & Fallback Handling)
- 置信度阈值:如果使用向量检索或小模型,设定置信度阈值(如0.8)。低于该阈值的交给LLM处理,LLM也无法确定的则触发拒识。
- 多意图冲突:如果用户一句话包含多个意图(如"帮我查一下余额,顺便充100块钱话费"),Agent需要有拆解意图的能力,通常可以通过让LLM输出List形式的意图数组来实现。
- 主动澄清:当系统判断两个意图的概率非常接近时(如51%和49%),不应盲目执行,而应设计话术让用户做单选题:"您是想查询 A,还是想办理 B?"
六、 系统设计架构图示例
一个现代Agent意图识别系统的请求流转过程如下:
text
User Input
│
▼[ 安全审核 / 敏感词过滤 ] ──(违规)──> 拦截
│
▼[ 规则与精准缓存命中 ] ──(命中)──> 提取参数,直接执行
│
▼
[ 语义路由 (Embedding检索) ] ──(相似度>0.85)──> 命中预设意图,提取参数 -> 执行
│
▼ (相似度低于阈值,或者属于复杂逻辑)
[ LLM 意图解析 (Function Calling) ]
├──(命中工具库)──> 提取 JSON 参数 -> 校验参数是否完整 -> 执行或追问
└──(未命中工具库)──> 归类为闲聊或OOD -> [ 闲聊模块 ] 或 [ 兜底话术 ]
七、 评估与持续迭代(Evaluation & MLOps)
- 构建评测集:沉淀真实的线上用户语料,人工标注其真实意图,构建成 Golden Dataset。
- 评估指标 :使用 Accuracy、Precision、Recall、F1-Score。对于Agent,尤为重要的是OOD的拦截率(避免AI幻觉胡乱执行工具)。
- 数据飞轮:将线上识别置信度低、或者用户随后立刻取消操作(说明识别错误)的Case捞出来,通过微调(Fine-tuning)小模型或补充到语义路由的向量库中,实现系统的持续变聪明。