当您的应用需要实时语音转文本,且不需要语音助手回复时,请使用实时转录。实时转录会话会在音频到达时流式传输转录增量,因此用户可以在完整话语结束前看到文本。
如需延迟最低的流式转录路径,请使用 gpt-realtime-whisper。对于离线文件或不需要流式增量的工作流,请使用 Audio API 中的标准语音转文本模型。
选择转录模型
| 模型 | 适用场景 | 备注 |
|---|---|---|
gpt-realtime-whisper | 实时音频、转录增量、可调节的延迟。 | 原生流式传输,专为实时会话设计。 |
| gpt-4o-transcribe | 无需流式传输的更高精度语音转文本。 | 适用于文件和请求-响应转录工作流。 |
gpt-4o-mini-transcribe | 成本更低的转录。 | 适用于对成本的关注度高于最高精度的场景。 |
| whisper-1 | 现有的 Whisper 集成。 | 不像以下模型那样原生支持流式传输
|
gpt-realtime-whisper 是实时转录的替代方案,但不能一概而论地替代所有转录模型。在切换生产流量之前,请针对您的音频、语言、词汇和延迟要求进行测试。
创建转录会话
实时转录使用带有以下配置的会话 type: "transcription"。您可以连接 WebSocket 用于服务端音频管道,或 WebRTC for browser audio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 24000
},
"transcription": {
"model": "gpt-realtime-whisper",
"language": "en"
}
}
}
}
}会话字段
type: 设置为transcriptionfor transcription-only sessions.audio.input.format: 追加到缓冲区的音频的输入编码。发送时请使用 24 kHz 单声道 PCMaudio/pcm.audio.input.transcription.model:使用gpt-realtime-whisperfor streaming transcription.audio.input.transcription.language: 可选的语言提示,例如en.audio.input.transcription.delay: 针对以下功能的可选延迟/准确度权衡gpt-realtime-whisper。支持的值为minimal,low,medium,high,且xhigh.audio.input.turn_detection: 对于支持该功能的模型,提供可选的语音活动检测。对于gpt-realtime-whisper, 省略此字段或将其设置为null, 然后手动提交音频。
流式传输音频
使用以下方式发送音频块 input_audio_buffer.append:
1
2
3
4
5
6
ws.send(
JSON.stringify({
type: "input_audio_buffer.append",
audio: base64Pcm16,
})
);如果禁用轮次检测,请在希望开始转录时提交缓冲区:
1
2
3
4
5
ws.send(
JSON.stringify({
type: "input_audio_buffer.commit",
})
);对于支持服务端 VAD 的模型,会话会在检测到轮次边界时自动提交音频。
处理转录事件
监听增量转录增量和完成事件:
1
2
3
4
5
6
7
8
9
10
11
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);
}
});增量事件包含最新可用的转录文本:
1
2
3
4
5
6
{
"type": "conversation.item.input_audio_transcription.delta",
"item_id": "item_003",
"content_index": 0,
"delta": "Hello,"
}完成事件包含已提交项的最终转录结果:
1
2
3
4
5
6
{
"type": "conversation.item.input_audio_transcription.completed",
"item_id": "item_003",
"content_index": 0,
"transcript": "Hello, how are you?"
}不同语音轮次的完成事件之间的顺序无法保证。请使用 item_id 将转录事件与已提交的输入项进行匹配。
调整延迟和准确性
流式转录是用延迟换取转录质量。较低的延迟设置可以更早生成部分文本。较高的延迟设置可在输出文本前为模型提供更多音频上下文,并有助于降低词错率。
首先设置 audio.input.transcription.delay 并使用真实音频进行测试。以下是一些实用的起点:
minimal适用于对延迟最敏感的交互;lowfor low-latency live captions;medium用于平衡延迟与准确性;high当准确性比即时显示更重要时使用;xhigh当您的工作流可以容忍最大延迟以获取更多上下文时使用。
以毫秒为单位的确切延迟可能因模型配置而异,因此请使用代表性音频进行基准测试,而不是假设每个级别都有固定的时长。
不要仅凭合成音频选择设置。请使用具有代表性的麦克风、电话音频、口音、背景噪音、语码转换、领域词汇以及长会话进行测试。
引导词汇和领域术语
如果您的应用依赖精确的领域词汇,请包含语言提示,并仅在所选模型支持时使用提示或关键词引导。对于 gpt-realtime-whisper in GA Realtime sessions, prompt 不支持此功能。
在提供提示引导功能的地方,请使用简短的关键词列表,而非冗长的说明。模型已被指示进行转录,因此请将提示重点放在领域词汇、拼写或风格上,而不是重述转录任务。
关键词样式示例:
Keywords: metoprolol, atorvastatin, A1C, systolic, diastolic在生产环境中,请将关键词引导视为辅助手段,而非绝对保证。继续手动评估名称、数字、日期、药物名称、产品名称、艺人名称及其他高价值实体。
处理置信度、时间戳和说话人分离
仅请求所选模型和端点支持的可选字段。如果您的应用需要置信度评分、时间戳或说话人分离,请在发布前验证支持情况,并为不可用的字段添加备用方案。
当对数概率可用时,请使用以下方式请求它们 include:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"transcription": {
"model": "gpt-realtime-whisper"
}
}
},
"include": ["item.input_audio_transcription.logprobs"]
}
}生产检查清单
- 在调整之前,确定目标延迟和准确性阈值。
- 使用真实的生产音频进行测试,而不仅仅是干净的样本。
- 测试每种目标语言。
- 在评估集中包含数字、日期、货币、电子邮件地址、产品名称和领域术语。
- 将空转录、截断转录和延迟转录与词错率分开追踪。
- 确定当后续增量修正早期文本时,您的 UI 应如何修订部分文本。
- 使用
item_id用于排序和核对最终转录结果。 - 为不支持的时间戳、说话人分离或置信度字段保留备用路径。
相关指南
对比语音代理、翻译和转录会话。
使用专门的翻译会话翻译实时语音。
通过服务端媒体管道传输原始音频。
为实时音频流配置轮次检测。