🔧 AI 知识库

图解订票Agent必懂的20个意图识别核心概念

原文链接

图解订票Agent必懂的20个意图识别核心概念

原文链接:https://mp.weixin.qq.com/s/zYZVXg_eMKXbrMLSyg8GJg 来源:产品经理老王霸 | 2026-05-03

摘要

用一句"帮我订一张明天从北京到上海的高铁,早上8点左右,二等座"贯穿全文,完整拆解订票 Agent 意图识别链路的 20 个核心概念。不讲公式,每个概念直接对到真实产品设计场景。核心判断:大多数初版订票 Agent 的主流程有 5-6 个环节是错的,端到端跑通的不超过一半。


链路全景(20个概念)

1. 意图(Intent)

系统给用户操作贴的标签,不是 AI 猜的,是你提前定好的。订票 Agent 五个意图:订票/查询车次/退票/改签/问政策。颗粒度是产品设计阶段最重要的决策——太粗追不到问题原因,太细训练样本不够。

2. 意图识别(Intent Recognition)

输入一句话,输出意图标签+置信度。三方案:关键词匹配(简单但说法变了就抓不到)→ 模型分类(需标注数据,隐式表达也能识别)→ 大模型判断(无需训练但慢且贵)。高频场景用模型分类做主力,关键词兜底,大模型处理长尾。

3. 置信度(Confidence)

模型对判断结果的把握程度,0-1。"明天去上海的高铁"可能是订票 0.55,查询 0.38。置信度阈值是产品决策,不是技术参数:订票 ≥ 0.85 才执行(出错代价高),查询 ≥ 0.60 即可(无副作用)。

4. 未知意图 / OOD(Out-of-Domain)

用户问了系统没有预定义意图的问题。三种来源:超出产品边界、新需求、模糊表达。处理:兜底回复 → 追问澄清 → 转人工 → 大模型兜底。OOD 数据是下一个版本的选题库,几百个用户问距离就该新增距离查询意图。

5. 实体(Entity)

从用户输入里提取的有用信息片段——意图是做什么,实体是用什么做。通用实体(时间/地点),领域实体(车型/席别)。绝大多数关键实体是领域实体,必须自定义词典或领域专项训练。

6. 命名实体识别(NER)

机器自动从文字里找实体并分类。本质是给每个字打标签,连续相同标签的字合并成一个完整实体。分两层:通用模型识别时间/地名 + 领域专项处理识别高铁/二等座。

7. BIO 标注体系

NER 模型内部的标注方案:B(实体首字)、I(实体后续字)、O(非实体)。产品侧不需要精通,但发现实体边界错误时,知道从这层日志查标签定位。

8. 实体边界识别

确定实体从哪个字开始到哪个字结束,是 NER 最容易出错的环节。"早上8点左右"必须整体识别为一个时间范围,不能切成"早上+8点";"北京南站"是一个完整站点,不能拆成"北京+南站"。边界错了,后面全跑偏。

9. 嵌套实体

一个实体包含另一个实体。"从北京南站出发",既需要城市(北京)又需要站点(北京南站),两个字同时属于两个实体。订票场景优先保留外层(北京南站),城市名只在没有外层时才用。

10. 实体歧义

同一段文字对应多种可能实体。三类:类型歧义(北京=城市 vs 北京站=站点)、边界歧义(北京南站怎么切)、指代歧义("那班车"指 G1 还是 G3)。歧义不是错误,是语言的自然属性,系统要检测+消解+追问。

11. 实体消歧

发现歧义后,用上下文缩小候选到唯一。先查对话历史(信号最强),再看当前句子上下文,两个都推不出来才追问。能消歧不消歧直接追问,是懒设计。

12. 实体归一化

把用户自然语言转成系统能处理的标准格式:

用户表达归一化后
明天2026-04-28
早上8点左右06:00 ~ 09:30
北京北京南站(BJP2)
上海上海虹桥(AOH)
高铁G/D 字头
二等座席别代码 M

归一化做差了,12306 返回空结果,用户看到"没有符合条件的车次",实际是系统查的东西不对。

13. 实体链接

归档后的参数对应到数据库真实条目。参数包 → 调 12306 余票接口 → 匹配到 G1/G3/G7 三个车次。链接失败两种情况:没找到(走 OOD/追问)、多条未选(展示列表,不能随机选一个下单)。余票是几秒前数据,下单时要再查一次实时余票。

14. 槽位(Slot)

意图执行所需的参数容器。订票意图 8 个槽位(出发日期/出发站/到达站/席别/乘客姓名/身份证号/出发时间偏好/车型偏好),每个定义三件事:必填还是选填、缺失时怎么处理、接受什么类型的实体。

15. 槽位填充(Slot Filling)

识别出来的实体按规则填入对应槽位。"帮我订一张明天从北京到上海的高铁" → 6 个槽位填上,2 个必填缺失(姓名、身份证号),触发追问。要保证类型匹配和位置唯一。

16. 槽位验证

两层:格式校验(本地,身份证 18 位、日期合法、出发≠到达)+ 业务校验(调后端,实名认证、余票确认、一人一座)。格式失败提示重输,业务失败区分原因告诉用户怎么办。

17. 槽位触发追问

必填槽位缺失时的追问机制,直接影响完成率。三原则:说清楚要什么("请提供乘车人姓名"不说"请补充信息")、一次只问一个、有记忆不重复问。追问超过三轮,完成率断崖下跌。

18. 多轮槽位积累

跨多轮对话逐步填满槽位,每轮新信息累积到同一订单。核心:保存会话槽位状态、新输入先匹配未填槽位、意图不变不重置。意图切换时判断保留还是清空(订票→查询保留出发地/到达地/日期,订票→退票全部清空)。

19. 槽位冲突

用户给出前后矛盾的槽位值。低风险槽位(席别二等→一等座)直接用新值+明确告知;高风险槽位(改日期触发新一轮查询+价格变化)先确认再执行。

20. 冷启动意图

系统零历史数据时让意图识别链跑起来。四步走:

  • Step 1 规则先行:关键词词典+站点词典(12306 约 3000 站)+ 席别枚举
  • Step 2 种子数据:每意图手写 20-30 条典型话术 → 同义词扩充到 100+
  • Step 3 借力预训练模型:在 BERT 等中文模型上微调,数据需求少一个数量级
  • Step 4 大模型零样本兜底:处理前三步覆盖不到的长尾说法

第一天不需要 90% 准确率,先把订票主流程跑通,有真实流量再迭代。先活着,再变好。


核心判断

整条链路里任何一环掉链子,订票就完不成:

  • 意图识别错了 → 下游全是无效计算
  • 实体边界识别错了 → 归一化结果不能用
  • 槽位定义不全 → 开发不知道要追问什么
  • 冷启动卡住 → 连第一天都上不了线