摘要

汽修客户咨询保养、维修项目时,会连续追问车型、配件、价格,属于典型的多轮对话场景。开发人员需要设计对话流程,让机器人可以连贯完成一问一答交互,而不是每个问题都从头开始。本文把汽修价格咨询拆成意图识别、槽位填充、实体归一、价格查询、上下文管理五个环节,给出车型、项目、配件三类槽位的设计方法、对话状态机流程图、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实体识别配置
会话IDsession_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条测试用例逐项验证,重点看槽位日志里的轮次记录,比逐句回放录音更快定位问题。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐