用 gpt-live-transcribe 做实时转写收不到 final events 到底怎么搞
想通过 OpenAI 的 Realtime API 实现实时语音转写,结果掉进了个很诡异的坑:能收到中间的 delta 碎片,但永远等不到那个标志着转写完成的 conversation.item.input_audio_transcription.completed 事件。简单说,就是只有过程没结果,没法拿到最终确定的文本。
这事儿最让人困惑的地方在于,如果你想拿到 final event,通常得依赖服务器的端点检测(VAD)来判断说话结束了,但这个模型对 VAD 的支持极其不统一。
具体复现过程和报错如下:
首先,在配置 session 时,如果把 turn_detection 设为 null(关闭状态),代码跑起来没问题,但输出结果只有 conversation.item.input_audio_transcription.delta 这种碎片,一直没有 completed 事件。
我尝试的监听代码是这样的:
ws.on("message", (data) => {
const event = JSON.parse(data);
if (event.type === "conversation.item.input_audio_transcription.delta") {
process.stdout.write(event.delta);
}
if (event.type === "conversation.item.input_audio_transcription.completed") {
console.log("\nFinal transcript:", event.transcript);
}
});
为了强行触发 final event,我尝试按照官方 VAD 文档去开启 server_vad,配置参数如下:
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": { "type": "audio/pcm", "rate": 24000 },
"transcription": { "model": "gpt-live-transcribe" },
"turn_detection": {
"type": "server_vad",
"threshold": 0.8,
"prefix_padding_ms": 500,
"silence_duration_ms": 700
}
}
}
}
结果直接被服务器怼回来一个报错,提示这个模型根本不支持端点检测:
{
"message": "Turn detection is not supported for this transcription model.",
"type": "invalid_request_error",
"code": "invalid_value",
"param": "session.audio.input.turn_detection"
}
最离谱的是,这个问题不仅出现在 gpt-live-transcribe 上,换成 gpt-realtime-whisper 居然也是同样的情况。
现在的局面很尴尬:关掉 turn_detection 没 final event,开启 turn_detection 直接报 invalid_request_error。这导致开发者陷入了一个死循环,因为没有 completed 事件,你根本没法知道一段话什么时候结束,也没法进行后续的业务逻辑处理。
我的判断是,目前这些转写模型在 Realtime API 里的 VAD 逻辑可能还没跑通,或者文档描述和实际 API 实现脱节了。如果你也在用这两个模型且需要最终转写结果,建议暂时不要依赖 server_vad,可能得自己在客户端做简单的静音检测,然后手动触发某种机制,但这显然增加了开发成本,不应该是 API 应该有的样子。
全部回复 (3)
想当场把话说完?进全球 AI 聊天室,登录就能开口。

这语气也太卑微了,求人办事还得发这么多so,看得我心疼。