日期:2026-07-24
本文为工程实践复盘,客户信息已脱敏;所述数据均为示意值,不对应任何具体合同或审计数字。
我们服务的一家家电售后企业,客服渠道散得厉害:文字工单走一套系统,用户发来的故障照片没人看、堆在聊天框里,电话热线又是另一套录音转写流程。坐席处理一个"空调不制冷+拍了张报错图"的工单,得在三个界面间来回切:先读文字、再手动下载图片、再切到语音系统听录音,上下文全靠自己脑记。结果一次解决率低、平均处理时长高、坐席流动大,新人培训两周还不敢独立接复杂单。我们判断:问题不在模型能力,而在"渠道割裂、会话不归一"——多模态数据没有被统一成一条会话时间线,坐席被迫做人工胶水层,既慢又容易漏信息。要从体验上破局,得先把多模态汇到同一个工作台。
我们用一个统一坐席工作台把图文语音归一:用户侧的文字、图片、语音(转写为文本)都汇入同一条会话时间线,按时间排序、带模态标签。坐席在一个界面里就能看到"用户说了什么、发了什么图、语音转成了什么",并调用智能辅助——模型基于完整上下文推荐回复话术、自动抽取故障要素、关联知识库条目。复杂问题一键生成工单,工单与知识库联动,处置经验和解决方案回流沉淀。底层能力依托我们采用的 AI 底座做多模态理解与语音识别,网关侧统一接入,对外只暴露受控的坐席接口,保障数据不出域。
第一个难点是多模态会话归一。不同渠道的协议、格式、时序都不一样,我们定义了一套统一会话模型:每条消息带 modality(text/image/voice)、ts、sender,语音消息先走 ASR 转写为文本再并入时间线,图片则保留原图引用并做 OCR/理解摘要,保证一条时间线能完整还原交互。第二个难点是上下文连贯。同一客户跨渠道、跨时段的会话要做身份归并,避免"换了个入口就当新客",我们把用户 ID 作为会话主键,历史会话可回溯拼接。第三个难点是智能辅助与话术推荐。模型读完整时间线(文本+图片理解结果+语音转写)生成建议,但建议只作辅助,关键承诺仍由坐席确认,避免模型替用户承诺引发责任问题。第四个难点是工单与知识联动:从会话自动抽取故障类型、机型、诉求,生成结构化工单,并回写知识库形成闭环。
案例片段(已脱敏):统一会话模型的简化结构:
json { "session_id": "S10086", "messages": [ {"modality": "text", "ts": 1, "body": "空调不制冷"}, {"modality": "image", "ts": 2, "ocr": "E4 错误码"}, {"modality": "voice", "ts": 3, "asr": "昨天开始响一声就不转了"} ] }
以脱敏示意口径看:统一坐席上线后,坐席的跨系统切换次数由单次工单约 7 次下降到约 1 次,平均处理时长(AHT)下降约 38%。一次解决率(不转接、不回拨即闭环)由约 61% 提升到约 83%。客户满意度(CSI)提升约 12 个百分点。图片类工单的要素抽取准确率约 90%,语音转写字错率约 6%,基本满足坐席辅助需要。工单自动生成占比约 65%,处置经验回流知识库约每月 800 条,知识库可用条目增长约 40%。新人独立接复杂单的培训周期由约两周缩短到约 5 天。所有数值均为示意值,不对具体合同负责。
坐席先归一,再谈智能——多模态不汇成一条时间线,模型再强也救不了"渠道割裂"带来的体验崩塌,坐席的人工胶水层既慢又漏。上下文连贯是体验核心,同一客户跨渠道要按身份归并历史,别让"换个入口就当新客"。智能辅助只给建议、不替承诺,关键动作仍由坐席确认,避免模型越俎代庖引发责任问题。工单与知识要联动闭环,每次处置都回流成可检索的经验,客服系统才会越用越聪明,而不是每次都从零开始。
上线策略上我们先选两个高复杂度的售后门店做试点,观察坐席真实使用行为再全量推:数据告诉我们,坐席并非来者不拒——话术建议的“采纳率”约七成,未被采纳的多是需现场判断的例外,这反而帮我们定位了知识库的盲区。培训上我们强调“辅助不是替代”,坐席保留最终 edit 权,避免因盲目信模型而承诺过头。隐私侧语音数据在转写后立即脱敏留存,原始音频不长期保存,满足合规要求。一个意外收获是新人上手更快:统一时间线把老师傅的脑内经验外显成可跟随的会话流,培训从“背手册”变成“看实例”。我们把“建议采纳率”和“一次解决率”绑在一起看,避免为了采纳率而堆砌无效提示,真正衡量的是坐席有没有因此更快、更准地解决问题。
我们也用统一会话时间线做了质检:主管随机抽检坐席会话时,不再需要拼凑三个系统的截图,一条时间线就能复盘整个处置过程,质检效率提升明显,也更容易发现“模型建议对、坐席没采纳”的共性问题去补知识库。会话可回溯还顺带满足了合规留痕要求,争议工单能快速定责。
案例片段(已脱敏):智能辅助推荐与工单生成片段:
python ctx = assemble(session) # 文本+图理解+语音转写 reply = llm.suggest(ctx, knowledge_base) # 话术推荐(辅助) ticket = extract(ctx, schema=["fault", "model", "need"]) knowledge.link(ticket, session)