You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WebSocket实时电话转写时,Google Cloud语音识别未返回说话人分离结果

为什么Google Cloud Speech-to-Text没有返回说话人分离结果?

根据你的配置和返回的响应,我整理了几个最可能导致这个问题的原因:

  • 说话人分离需要足够的多说话人音频数据
    你的响应里words数组是空的,转录文本也只有短短一句话。Google的说话人分离模型需要至少几秒包含不同说话人交互的音频,才能有效识别并标记说话人标签。如果测试音频只有单个说话人发言,或者片段太短,模型根本无法区分出多个说话人,自然不会返回speakerTag。建议换一段包含至少两位说话人交替发言的更长音频来测试。

  • 实时流式场景下,完整分离结果需等待流结束信号
    虽然你的响应里标记了isFinal: true,但在WebSocket流式识别中,这个字段只是当前音频片段的最终转录结果。完整的说话人分离数据需要你向服务端发送end_of_stream信号(告知音频流已全部发送完毕)后,才会在最终的响应里返回。确认下你是否在音频结束时正确发送了这个信号。

  • 检查初始请求是否正确传递了说话人分离配置
    你提到了配置项,但要确保这些参数是在WebSocket连接的初始请求中发送的——Google流式Speech-to-Text要求说话人分离的配置必须在会话启动时就指定,后续音频帧里无法追加修改。如果初始请求漏传了enableSpeakerDiarization等参数,服务端不会进行说话人分离处理。

  • 验证音频质量与配置是否匹配
    虽然你设置了LINEAR16编码和8000Hz采样率,但如果音频存在严重噪音、失真,或者实际采样率/编码和配置不匹配,模型也可能无法正确解析说话人。可以先用离线识别测试同一段音频,看看是否能返回说话人标签,以此排除音频本身的问题。

另外,当说话人分离生效时,响应里的words数组会包含每个词的speakerTag字段,示例结构如下:

"words": [
  {
    "word": "what",
    "startTime": "0s",
    "endTime": "0.3s",
    "speakerTag": 1,
    "confidence": 0.98
  },
  ...
]

你可以先针对上面几点逐一排查,优先测试更长的多说话人音频并确保发送流结束信号。

内容的提问来源于stack exchange,提问作者Binu Mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:02:04