汽修连锁语音机器人,客户咨询保养维修价格,多轮对话逻辑怎么搭建?
摘要
汽修客户咨询保养、维修项目时,会连续追问车型、配件、价格,属于典型的多轮对话场景。开发人员需要设计对话流程,让机器人可以连贯完成一问一答交互,而不是每个问题都从头开始。本文把汽修价格咨询拆成意图识别、槽位填充、实体归一、价格查询、上下文管理五个环节,给出车型、项目、配件三类槽位的设计方法、对话状态机流程图、YAML槽位配置、会话对象JSON结构、价格接口返回结构、平台字段对照、意图识别测试集分配方法、10条多轮对话测试用例表和一次带30通模拟会话细分的真实联调排障过程。文中对话流程设计思路来自语音机器人配置实践,字段命名参考自平台公开配置文档整理,具体字段名称以所用平台文档为准。
关键词:汽修连锁;语音机器人;多轮对话;槽位填充;意图识别;车型识别;价格查询;对话流程
一、前言
汽修客户咨询保养、维修项目时,会连续追问车型、配件、价格,属于多轮对话场景。开发人员需要设计对话流程,让机器人可以连贯完成一问一答交互。
这个场景的难点不在于“能不能识别一句话”,而在于客户的话往往不完整、前后有关联、还会中途改口。比如客户先说“我的车该保养了”,机器人问车型,客户答“朗逸”,再问年份,客户说“2019年的”,最后问项目,客户说“小保养多少钱”。如果每一轮都当成独立问题处理,机器人就会反复问已经回答过的信息,或者漏掉客户中途补充的条件。汽修连锁还有自己的业务特点:门店多、项目多、车型覆盖广、配件分原厂和品牌件、价格随车型和门店浮动。本文只讨论呼入侧保养维修价格咨询的多轮对话逻辑,不涉及其他业务方向,重点放在槽位设计、状态流转、价格查询对接和转人工策略上。
本节结论:多轮对话要槽位填得全、上下文记得住、查价查得准、转人工转得及时。
二、先给结论:多轮对话由五个环节组成
本节结论:意图、槽位、归一、查价、上下文,五环相扣。
很多开发人员一上来就写对话脚本,结果发现客户换个说法就接不住。更稳的做法是把多轮对话拆成五个环节:
| 环节 | 作用 | 关键设计 |
|---|---|---|
| 意图识别 | 判断客户这轮想干什么 | 区分询价、预约、问进度、投诉等意图 |
| 槽位填充 | 收集完成价格查询所需的信息 | 车型、年份、项目、配件类型、门店 |
| 实体归一 | 把客户的口语说法映射到标准值 | “朗逸”映射到车型库ID,“小保养”映射到项目ID |
| 价格查询 | 按槽位组合查询价格 | 接口入参、返回结构、无报价时的处理 |
| 上下文管理 | 记住前几轮已填的槽位 | 槽位继承、中途改口、超时重置 |
这五个环节里,槽位填充和实体归一是最容易出问题的。客户说的“朗逸”可能是“朗逸PLUS”,说的“小保养”可能对应门店的“基础保养套餐”,如果映射不准,价格查询结果就会偏差。
三、汽修价格咨询的多轮对话特征拆解
本节结论:汽修询价要支持分批填槽、中途改口、追问明细和车型澄清。
3.1 信息分批给
客户很少一次说全“2019款朗逸、小保养、原厂机油、XX门店多少钱”,通常是先说“保养多少钱”,机器人追问后才逐步补充车型、年份、项目。这意味着对话流程要支持“按槽位逐个追问”,而不是要求客户一次说全。
3.2 中途改口
客户可能先说“小保养”,聊到一半改口“算了,我问下大保养”。这时候项目槽位要能覆盖,而不是把两个项目都记下来导致查询条件冲突。改口处理的关键是“同一槽位以最后一次回答为准”。
3.3 追问明细
客户拿到价格后可能追问“包含哪些项目”“机油是什么牌子”“能不能便宜点”。这类追问不属于重新询价,而是对上一轮结果的细化,对话流程要能识别“追问意图”并调取上一轮的价格明细,而不是重新走一遍槽位收集。
3.4 车型表述多样
客户说车型的方式五花八门:“朗逸”“大众朗逸”“朗逸plus”“1.5L自动舒适版”。实体归一环节要能把这些说法映射到车型库里的标准车型,映射不准时要有澄清追问,而不是随便取一个近似车型报价。
3.5 与来电弹屏类方案的差异
多轮对话和来电弹屏解决的是不同问题:来电弹屏按主叫号码识别“这是谁”,多轮对话按客户回答收集“要查什么”。两者可以叠加使用,来电弹屏先带出客户档案,对话流程再补问本次咨询的车型、项目等信息。关联阅读可在站内搜索“家装公司云呼叫中心来电弹屏”,配合理解两种方案的分工。
四、槽位设计:价格查询需要哪些信息
本节结论:槽位不在多,在于每个槽位都能影响价格且客户答得上来。
4.1 核心槽位
汽修保养维修价格查询,建议至少设计以下槽位,实际按门店业务调整:
| 槽位 | 是否必填 | 说明 | 追问示例 |
|---|---|---|---|
| 车型 | 必填 | 品牌+车系,尽量到具体车型 | “请问您的车型是?” |
| 年份 | 必填 | 车辆年份或年款 | “是哪一年的车?” |
| 项目 | 必填 | 保养或维修项目 | “您想咨询保养还是维修?” |
| 配件类型 | 选填 | 原厂件/品牌件/不限 | “配件有原厂和品牌件两种,您想了解哪种?” |
| 门店 | 选填 | 就近门店或默认门店 | “您方便去哪家门店?” |
4.2 槽位的追问顺序
追问顺序影响客户体验。建议按“客户最容易答、对价格影响最大”的顺序追问:先问项目(客户通常已经想好要做什么),再问车型,再问年份,最后问配件类型和门店。如果客户第一句话已经带了车型,就直接跳过车型追问。
4.3 槽位的可选与必填
配件类型和门店设计为选填,是因为很多客户不清楚原厂件和品牌件的区别,追问太细容易让客户挂断。选填槽位的处理方式是:客户不答时用默认值(如“不限配件类型”查价格区间,门店用客户来电号码归属地就近推荐),并在结果里说明“具体价格以门店报价为准”。
4.4 槽位校验规则
每个槽位要有校验规则,避免无效值进入价格查询:
yaml
slots:
car_model:
required: true
type: "entity"
entity: "car_model_library"
clarify_threshold: 0.7 # 置信度低于0.7时发起澄清
max_clarify_times: 2 # 最多澄清2次,仍不明确转人工
car_year:
required: true
type: "integer"
range: [2005, 2027]
invalid_prompt: "年份没听清,请问是哪一年的车?"
service_item:
required: true
type: "entity"
entity: "service_item_library"
allow_override: true # 允许中途改口,以最后一次为准
part_type:
required: false
type: "enum"
values: ["原厂件", "品牌件", "不限"]
default: "不限"
store:
required: false
type: "entity"
entity: "store_library"
default: "nearest_by_area"
这段配置里有两个值得注意的点:clarify_threshold 控制车型澄清的触发条件,置信度不够时追问而不是硬匹配;allow_override 允许项目槽位被后续回答覆盖,处理中途改口。
4.5 平台字段对照
不同平台对槽位和意图的字段命名不同,对接前先对照平台文档确认。下表为常见字段命名示例,字段名参考自平台公开配置文档整理,仅作对照参考,实际以所用平台文档为准:
| 能力项 | 常见字段名示例 | 配置位置 |
|---|---|---|
| 意图标识 | intent / intent_name | 意图管理 |
| 槽位名称 | slot_name / slot_key | 槽位配置 |
| 追问话术 | prompt / ask_text | 槽位配置 |
| 澄清阈值 | confidence_threshold | 实体识别配置 |
| 会话ID | session_id / call_id | 会话参数 |
对照时重点确认三件事:意图标识是否区分“询价”和“结果追问”、槽位是否支持覆盖、澄清阈值是否可配。这三项确认清楚,后面的联调会省很多时间。
五、对话状态机设计
本节结论:状态机管当前问什么,上下文管已经答了什么,两者分开维护。
5.1 状态流转
5.2 上下文管理
上下文建议用一个会话对象维护,至少包含:已填充槽位、每个槽位的来源轮次、澄清次数、上一轮查询结果。下面是会话对象的结构示例:
json
{
"session_id": "S20261023001",
"intent": "price_inquiry",
"slots": {
"service_item": {"value": "小保养", "item_id": "ITEM001", "turn": 1},
"car_model": {"value": "朗逸", "model_id": "VW_LAVIDA", "turn": 3},
"car_year": {"value": 2019, "turn": 4},
"part_type": {"value": "不限", "turn": 4, "default": true},
"store": {"value": "XX路店", "store_id": "ST003", "turn": 4, "default": true}
},
"clarify_count": {"car_model": 0},
"last_result": {"price_range": "380-520", "currency": "CNY"}
}
这个结构里,turn 记录槽位来自第几轮,便于排查“客户明明改了项目为什么还用旧值”;default 标记默认值,播报时要说明“按不限配件类型查询”;last_result 保存上一轮结果,支持追问明细。
5.3 超时与重置
语音场景下客户可能中途沉默或挂断。建议设置槽位追问超时(如8秒无响应重播一次,两次无响应转人工),以及会话超时(如挂断后重新来电视为新会话)。上下文不要跨会话继承,避免上次咨询的车型带到这次。
六、实体归一:把客户的话映射到标准值
本节结论:车型和项目的归一准确率直接决定查价结果对不对。
6.1 车型归一
车型归一建议做三级映射:品牌别名 → 车系 → 年款。客户说“大众朗逸”,先识别品牌“大众”,再识别车系“朗逸”,再结合年份槽位确定年款。车型库要维护常见别名,比如“朗逸plus”映射到“朗逸PLUS”,“帕萨特”映射到“帕萨特”车系下的具体年款。
归一置信度低于阈值时,不要硬匹配,发起澄清追问:“您说的是朗逸还是朗逸PLUS?”澄清两次仍不明确,转人工。
6.2 项目归一
保养维修项目的口语说法和门店标准项目名差异很大。建议维护一张项目别名表:
| 客户说法 | 标准项目 | 说明 |
|---|---|---|
| 小保养、基础保养、换机油 | 基础保养套餐 | 含机油机滤更换 |
| 大保养、全面保养 | 综合保养套餐 | 含多项检查更换 |
| 换刹车片、刹车保养 | 制动系统保养 | 按车型报价 |
| 四轮定位 | 四轮定位 | 独立项目 |
项目归一还要处理和门店的对应关系:同一句“小保养”,不同门店的套餐内容可能不同。归一后要带上门店ID去查价,而不是用全国统一价。
6.3 归一结果的校验
归一完成后做一次组合校验:车型、年份、项目、门店是否都在有效库中,组合是否有报价。校验不通过时,优先追问最可能出错的槽位,而不是全部重问。
七、意图识别测试方法
本节结论:意图识别是五环第一环,测试要覆盖主意图、追问意图和边界说法。
7.1 测试集设计
建议准备至少100条标注语句,按下面的比例分配:
| 类别 | 条数 | 示例 | 说明 |
|---|---|---|---|
| 主意图 | 40条 | “小保养多少钱”“预约保养” | 覆盖询价、预约、问进度、投诉 |
| 追问意图 | 30条 | “包含哪些项目”“机油什么牌子” | 覆盖问明细、问配件、问工时 |
| 边界说法 | 30条 | “那个保养”“就是换油那个” | 覆盖模糊表达、方言说法、中途改口 |
每条标注正确意图,用于计算识别准确率。追问意图单独成类,是因为这类语句最容易被误识别为新的询价,导致重复收集槽位。
7.2 测试方法
把标注语句逐条输入意图识别接口,统计“识别正确数 / 总条数”得到准确率。重点看两类错误:一是“询价”被误识别为“追问”,导致重复收集槽位;二是“追问”被误识别为“询价”,导致重新走流程。这两类错误对体验影响最大,建议单独统计误识别率。
7.3 准确率参考
测试环境下,100条标注语句中主意图识别准确率通常在85%—95%之间。该范围为测试环境小样本参考值,实际准确率受语料覆盖度和模型配置影响,不同项目会有差异。低于85%时,优先检查意图训练语料是否覆盖了客户的实际说法,而不是直接调阈值。
八、价格查询接口对接
本节结论:接口要返回价格区间和明细,查不到要说明原因。
8.1 接口入参
价格查询接口建议接收归一后的标准ID,而不是客户原话:
http
POST /api/price/query
{
"model_id": "VW_LAVIDA",
"year": 2019,
"item_id": "ITEM001",
"part_type": "不限",
"store_id": "ST003"
}
8.2 返回结构
json
{
"code": 0,
"found": true,
"price_range": {"min": 380, "max": 520, "currency": "CNY"},
"detail": [
{"name": "机油", "spec": "5W-30 全合成", "price": 280},
{"name": "机滤", "price": 60},
{"name": "工时费", "price": 80}
],
"remark": "具体价格以门店实际报价为准"
}
查不到报价时返回明确原因,便于机器人播报不同话术:
json
{
"code": 0,
"found": false,
"reason": "model_not_supported",
"message": "该车型暂未收录报价"
}
reason 字段建议区分“车型未收录”“项目不适用”“门店暂未配置”三类,机器人按原因播报不同提示。
8.3 接口超时与降级
价格接口超时建议控制在800ms以内,超时后机器人播报“报价查询稍慢,我先帮您转人工确认”,不要让客户干等。接口不可用时要有兜底话术,不能直接挂断。
九、转人工触发条件
本节结论:转人工是体验兜底,触发条件要明确。
建议在以下情况转人工:
-
车型澄清2次仍不明确;
-
槽位追问2次仍无有效回答;
-
价格接口连续超时或返回异常;
-
客户明确说“转人工”;
-
客户询问价格之外的问题(如投诉、理赔、预约改期),超出当前对话流程范围;
-
客户情绪明显波动(语速加快、音量提高),语义质检识别到负面情绪。
转人工时要带上已填充的槽位和会话摘要,人工坐席接起后不用重新问一遍。这一点在多轮对话里特别重要,否则客户会觉得“刚跟机器人说过又要再说一遍”。
十、10条多轮对话测试用例
本节结论:测试覆盖正常流程、改口、追问、无效回答和转人工五类场景。
| 编号 | 测试场景 | 客户话术示例 | 预期结果 |
|---|---|---|---|
| 1 | 一次说全 | “2019款朗逸小保养多少钱” | 直接查价,不追问车型年份 |
| 2 | 分批给信息 | “保养多少钱” → “朗逸” → “2019年” | 逐槽追问,最终查价成功 |
| 3 | 中途改口 | “小保养多少钱” → “算了问大保养” | 项目槽位覆盖,按大保养查价 |
| 4 | 追问明细 | 查价后问“包含哪些项目” | 播报上一轮明细,不重新收集槽位 |
| 5 | 车型模糊 | “大众那个轿车” | 发起澄清追问,不硬匹配 |
| 6 | 无效回答 | 问年份答“不知道” | 重播一次,两次后转人工 |
| 7 | 接口查不到 | 冷门车型询价 | 播报“暂未收录”,建议转人工 |
| 8 | 明确转人工 | “给我转人工” | 立即转接,带会话摘要 |
| 9 | 超时沉默 | 追问后8秒无响应 | 重播一次,两次后转人工 |
| 10 | 跨会话隔离 | 挂断后重新来电咨询另一辆车 | 上下文重置,不继承上次车型 |
这10条用例建议在联调阶段全部跑一遍,每条记录实际对话轮次、槽位填充结果和最终播报内容。上线后每周抽10通真实会话回听,重点看改口和追问两类场景。
10.1 对话流程配置页要素说明
受限于文章形式无法直接贴图,下面用界面要素表说明对话流程配置页应包含的内容,配置时可对照检查:
| 区域 | 内容 | 说明 |
|---|---|---|
| 意图列表 | 询价、追问、预约、转人工 | 每个意图对应一个流程入口 |
| 槽位配置区 | 槽位名、是否必填、追问话术、校验规则 | 按第四节配置 |
| 状态流转图 | 各状态之间的跳转条件 | 可视化检查流程是否有死循环 |
| 澄清配置 | 澄清阈值、最大澄清次数、澄清话术 | 车型和项目归一必配 |
| 转人工条件 | 触发条件列表 | 按第九节配置 |
10.2 槽位日志页要素说明
| 区域 | 内容 | 说明 |
|---|---|---|
| 会话ID | 每通会话的唯一标识 | 便于回放和排查 |
| 槽位填充记录 | 每个槽位的值、来源轮次、是否默认值 | 重点看turn和default |
| 意图命中记录 | 每轮命中的意图及置信度 | 排查追问是否被识别为询价 |
| 澄清记录 | 澄清次数和客户回答 | 排查澄清话术是否有效 |
十一、一次真实联调排障过程
本节结论:多轮对话的问题多数能在槽位日志和轮次记录里定位。
某汽修连锁在联调语音机器人时,用30通模拟会话跑了三轮测试,发现三个问题。30通模拟会话的构成是:追问场景8通、改口场景10通、澄清场景12通。下面是三类问题在调整前后的对比:
| 问题 | 测试通数 | 调整前 | 调整后 | 修改动作 |
|---|---|---|---|---|
| 追问明细被当成重新询价 | 8通 | 8通全部重走槽位流程 | 0通重走,均调取上一轮明细 | 增加“结果追问”意图 |
| 中途改口未覆盖 | 10通 | 10通全部按旧值查价 | 10通全部按新值查价 | 开启allow_override |
| 澄清话术不明确 | 12通 | 7通澄清成功,成功率约58% | 11通澄清成功,成功率约92% | 澄清话术改为带品牌年份的完整问法 |
问题一:追问明细被当成重新询价。 客服反馈“客户问完小保养价格,追问包含什么项目,机器人又把车型年份问了一遍”。查会话日志,发现客户追问时,机器人把这一轮识别成了新的“询价意图”,于是重新走槽位收集流程。再查意图识别配置,发现“包含哪些项目”这句话没有配置追问意图,落到了默认的询价意图。处理方式是在意图识别里增加“结果追问”意图,命中后不重新收集槽位,直接调取上一轮last_result里的明细播报。改完后用测试用例4验证,8通追问场景全部正确调取明细。
问题二:中途改口未覆盖。 客户先说小保养,机器人追问车型,客户答完车型后说“还是问大保养吧”,机器人按小保养查了价。查日志发现项目槽位没有开启覆盖,第一次填的值一直保留。开启allow_override后,同一槽位以最后一次回答为准,10通改口场景全部按新值查价。
问题三:澄清话术不够明确。 客户说“朗逸plus”,车型库里有“朗逸”和“朗逸PLUS”两个车系,归一置信度0.65,低于阈值触发了澄清。但澄清话术问的是“您说的是朗逸还是朗逸PLUS”,客户回答“就是plus啊”,机器人又没听清,12通澄清场景中只有7通成功。后来把澄清话术改成带品牌和年份的完整问法“您说的是上汽大众朗逸PLUS吗”,同一批12通模拟会话中澄清成功11通。这个数字只说明本次30通模拟样本的改善幅度,实际澄清成功率受客户表达习惯和话术设计影响。
这三个问题说明:多轮对话的坑不在单轮识别,而在轮次之间的状态衔接。联调时重点看槽位日志里的turn和last_result,比逐句回放录音更快定位。
十二、实施建议
汽修连锁语音机器人的多轮对话搭建,建议按“先定槽位、再配流程、后调归一”的顺序推进。第一步先把价格查询需要的槽位和追问顺序定下来,和门店确认每个槽位的业务含义;第二步配置状态机和上下文管理,先跑通“一次说全”和“分批给信息”两个主流程;第三步再优化实体归一和澄清话术,重点处理车型别名和项目别名;最后补追问明细、中途改口、转人工三类分支。
在语音机器人配置实践中,通常建议先确认槽位校验规则和上下文覆盖策略,这两处是多轮对话接不住的高发点。槽位日志和轮次记录也建议作为联调必查项,优音通信的配置流程里就把这两项放在联调清单前列,配置完成后保留一份槽位表、对话流程和测试用例的对照记录,后续调整时有据可查。关联阅读可在站内搜索“家装公司云呼叫中心来电弹屏”“客服机器人问答库批量导入”“小型教培机构400热线时段策略”等主题,配合本文的槽位设计、测试用例和排障数据一起使用。
十三、总结
汽修连锁语音机器人的保养维修价格多轮对话,核心是把意图识别、槽位填充、实体归一、价格查询、上下文管理五个环节配齐,把分批填槽、中途改口、结果追问、车型澄清四种交互处理好。槽位设计按“必填少而准、选填有默认”的原则,状态机管当前问什么、上下文管已经答了什么,价格接口要返回区间和明细、查不到要说明原因。转人工要设明确触发条件并带上会话摘要。联调时用10条测试用例逐项验证,重点看槽位日志里的轮次记录,比逐句回放录音更快定位问题。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)