背景:一个不该存在的客服问题
2025 年末,仙匣互动的第一个外部合作项目 Xmohe(独游魔盒)面临一个典型的增长困境: 用户基数快速扩张,但客服资源严重不足。作为一个专注于独立游戏发行的平台, Xmohe 的问询集中在几十个高度重复的场景——账号注册、充值异常、游戏激活码、 退款政策……这些本不需要人工介入的问题,却占用了团队 70% 以上的客服时长。
我们的第一反应是:用现成的 AI 客服 SaaS 接入不就完了?现实很快给了答案—— 市场上的通用产品在中文语境下表现令人沮丧:方言口音识别率低、游戏行业术语 理解能力差、多轮对话状态管理混乱。更大的问题是:它们的意图树都是固定模板, 无法针对 Xmohe 深度定制。
没有一个现成产品能在"充值到账但钻石没到"这个句子上给出正确的意图识别。 这句话里的歧义、缩略和情绪,对中文母语用户来说完全透明,对通用模型来说却是迷宫。
这个项目让我们看到了一个真实的市场空白:专为中文垂直场景深度打磨的 AI 语音客服引擎。 AiWma 由此诞生。而 Xmohe 成了我们的"零号客户"——用真实需求验证我们技术栈的第一个战场。
为什么选择 Pipecat
在动手写第一行代码之前,我们花了两周评估架构方案。核心问题是: 用什么框架编排 ASR → LLM → TTS 的实时语音管线?
候选方案有三类:
- 自研管线:完全可控,但 WebSocket 流、VAD 集成、Turn Detection 的工程量巨大,2 人团队不现实。
- LangGraph / CrewAI:擅长 LLM 工作流编排,但对实时语音流的支持 极其有限,延迟控制几乎无从下手。
- Pipecat(Daily.co 开源):专为实时对话 AI 构建,内置 Transport 层(WebRTC/WebSocket)、VAD 集成、流式输出裁剪、Turn Detection。Python 优先, 与 Claude API、Deepgram、ElevenLabs 均有官方集成。
Pipecat 的设计哲学和我们的需求高度吻合:Pipeline 是一等公民,
每个 AI 服务都是可插拔的 Processor,整个管线的延迟是可测量、可优化的。
选定。
技术架构总览
最终落地的架构如下图所示:
整个管线运行在 Python 3.12 + FastAPI 后端,通过 WebSocket 与前端 Web 组件通信。 部署在单台 4 核 8G 云服务器上,可支持约 30 路并发语音会话。
中文语境的四个难点
1. 多音字与口语缩略
"我充了一百块没到" 和 "我充了100没到账" 在语义上完全等价,但在 ASR 输出层会产生 不同的 token 序列。更棘手的是口语缩略:"钻石" 被说成 "钻","客服" 被说成 "客", 在电话噪声环境下尤为突出。
解决方案:在 Deepgram 配置中启用 keywords 参数,把 Xmohe
特有的产品词汇(约 300 条)加入到 ASR 热词表,提权识别优先级。配合后置的
轻量文本规范化层(Python 正则 + 同义词替换字典),将 WER 从初始的 14.2% 降至 6.2%。
2. 句末语气词的情绪信号
中文用户表达不满的方式通常不是直接说"我很生气",而是通过语气词和句式传达: "这都多少天了啊"、"怎么还没解决呢"。这些情绪信号如果被忽略, AI 会用标准流程回复,进一步激化用户情绪。
我们在 Claude 的 System Prompt 中加入了情绪检测指令,要求模型在每轮对话中
输出一个隐式的情绪标签 [calm / frustrated / urgent],
并据此调整回复的语气、是否主动提出转人工。
这一改动将用户主动挂断率降低了约 18%。
3. 意图歧义与多轮状态
中文客服对话极少是单轮完成的。用户往往在澄清一个问题的过程中,带出了另一个需求。 传统的意图分类器(单轮 BERT)在这种场景下会频繁失效。
Pipecat 的 LLMContext 提供了多轮对话上下文管理,配合我们设计的
意图树(46 个叶节点,5 层深度),Claude 在每轮对话后更新当前意图状态,
确保后续问答基于正确的上下文分支。意图树以 YAML 格式定义,
可由非技术运营人员通过管理后台编辑。
4. TTS 自然度与节奏感
中文 TTS 的一大挑战是数字和金额的读法。"¥100" 应该读"一百元"而不是"人民币一零零"; "2025年11月28日" 不应被断句读成 "二零二五年 停顿 十一月 停顿 二十八日"。
我们在 TTS 输入层加入了文本后处理模块,统一将数字/日期/金额转换为 ElevenLabs 友好的自然语言格式,并插入 SSML 标记控制停顿节奏。 测试用户对 TTS 自然度的满意度从 3.1/5 提升至 4.3/5。
意图树设计:从 Xmohe 到可复用框架
Xmohe 的意图树是 AiWma 最核心的交付物之一。设计原则:
- 叶节点粒度:每个叶节点对应一个可完全由 AI 处理或转人工的终态。 避免模糊的中间节点导致 Claude 陷入自由发挥。
- 负向意图:显式定义"用户要求转人工"、"用户情绪激动"等负向路径, 不让模型自行判断是否升级。
- 知识库锚点:高频问答节点直接挂载 RAG 查询,减少 Claude 的 幻觉生成风险。
- 可观测性:每个节点写入结构化日志,方便运营人员分析哪些节点 跳出率最高,驱动迭代。
最终 Xmohe 的意图树覆盖 46 个叶节点,部署后 3 周内达到 89% 的自动解决率 (无需人工介入即完成服务闭环)。
从项目到平台:SaaS 化的关键决策
Xmohe 项目验证了技术可行性,但将单客户工程转化为 SaaS 平台,需要解决几个架构层面的问题:
多租户隔离
每个客户拥有独立的意图树、知识库、TTS 声线配置和 System Prompt。
我们采用数据库级别的 tenant_id 隔离,配合 FastAPI 中间件
在请求入口完成租户解析,不同租户的 Pipecat Pipeline 实例彼此独立。
配置热更新
意图树和知识库的更新不应要求重启服务。我们实现了基于 Redis Pub/Sub 的 配置热加载机制:运营人员在管理后台保存修改后,相关 Pipeline 实例 在下一个对话轮次开始时自动拉取最新配置。
延迟 SLA 监控
用户对语音 AI 的延迟容忍度极低:超过 800ms 的首字延迟会被明显感知为"卡顿"。 我们在管线每个阶段埋点,通过 Prometheus + Grafana 实时监控 P50/P95/P99 延迟分布, 并设置告警阈值。目前 P99 首字延迟稳定在 720ms 以内。
结语:真实项目是最好的测试床
在 AI 产品化浪潮中,"演示跑通"和"生产稳定"之间的距离常常被严重低估。 Xmohe 项目给了我们一个在真实噪声环境、真实用户行为、真实运营压力下 打磨系统的机会。那 6.2% 的 WER、380ms 的 P50 延迟、91.4% 的意图准确率, 背后是数十次参数调整和几十个小时的标注复核工作。
AiWma 的 ACS(AI 客服)产品正是从这个过程中提炼而来。我们把所有踩过的坑 封装成了可复用的配置模块,让下一个客户不需要重新发现这些问题。 如果你正在考虑为自己的业务构建 AI 语音客服,欢迎联系我们—— 我们能提供从意图树设计到私有化部署的全链路支持。