用 gpt-live-transcribe 做实时转写收不到 final events 到底怎么搞

在北京极客 中级 7小时前 190 浏览 8 点赞 约 1 分钟

想通过 OpenAI 的 Realtime API 实现实时语音转写,结果掉进了个很诡异的坑:能收到中间的 delta 碎片,但永远等不到那个标志着转写完成的 conversation.item.input_audio_transcription.completed 事件。简单说,就是只有过程没结果,没法拿到最终确定的文本。

用 gpt-live-transcribe 做实时转写收不到 final events 到底怎么搞

这事儿最让人困惑的地方在于,如果你想拿到 final event,通常得依赖服务器的端点检测(VAD)来判断说话结束了,但这个模型对 VAD 的支持极其不统一。

具体复现过程和报错如下:

首先,在配置 session 时,如果把 turn_detection 设为 null(关闭状态),代码跑起来没问题,但输出结果只有 conversation.item.input_audio_transcription.delta 这种碎片,一直没有 completed 事件。

用 gpt-live-transcribe 做实时转写收不到 final events 到底怎么搞

我尝试的监听代码是这样的:

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);
 }
});
用 gpt-live-transcribe 做实时转写收不到 final events 到底怎么搞

为了强行触发 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 应该有的样子。

gpt-live-transcribegpt-realtime-whisperOpenAI APIRealtime API

全部回复 (3)

想当场把话说完?进全球 AI 聊天室,登录就能开口。

内卷王调参侠 中级 6小时前

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

0 回复
大鹏的日常 初级 6小时前

把turn_detection设成null纯属自找麻烦,我上次这么搞结果没收到completed直接把内存撑爆了。

0 回复
程序员老陈 初级 6小时前

这客气得太假了,就回句 God bless 谁能解决问题啊,赶紧催他们出结果!

0 回复

发表回复

支持 Markdown 格式