如果您的应用需要将麦克风、通话或其他实时音频流转换为文本,而不需要助手的语音回复,请使用实时转录。推荐模型会在语音传入时返回转录文本增量,并在您的应用提交每个音频轮次时返回最终转录文本。
从 gpt-live-transcribe 开始。如果您的音频已录制完成,请使用文件转录,或参阅转录概览以比较这些工作流。
创建转录会话
使用 type: "transcription" 创建会话,并选择 gpt-live-transcribe。对于服务端音频流水线,使用 WebSocket 建立连接;对于浏览器音频,使用 WebRTC 建立连接。
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 24000
},
"transcription": {
"model": "gpt-live-transcribe"
},
"turn_detection": null
}
}
}
}此示例使用 24 kHz PCM 音频,并禁用自动轮次检测,以便您显式提交每个轮次。有关完整的会话配置,请参阅实时会话参考资料。
流式传输音频
使用 input_audio_buffer.append 发送音频块:
ws.send(
JSON.stringify({
type: "input_audio_buffer.append",
audio: base64Pcm16,
})
);关闭自动轮次检测后,请在您希望结束一个音频轮次时提交缓冲区:
ws.send(
JSON.stringify({
type: "input_audio_buffer.commit",
})
);如果希望由服务器检测轮次边界并提交轮次,请改为配置语音活动检测。
处理转录事件
监听转录文本的增量更新和完成事件:
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);
}
});增量事件包含新生成的转录文本:
{
"type": "conversation.item.input_audio_transcription.delta",
"item_id": "item_003",
"content_index": 0,
"delta": "Hello,"
}
完成事件包含已提交项的最终转录文本:
{
"type": "conversation.item.input_audio_transcription.completed",
"item_id": "item_003",
"content_index": 0,
"transcript": "Hello, how are you?"
}
不同语音轮次的完成事件不保证按顺序到达。请使用 item_id 将转录事件与已提交的输入项匹配。
添加转录上下文
当音频包含专业词汇或预计会使用多种语言时,请添加上下文。在现有会话中,再次发送 session.update 事件即可更改转录配置。
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 24000
},
"transcription": {
"model": "gpt-live-transcribe",
"prompt": "A customer support call about a premium plan and account AC-42.",
"keywords": ["premium plan", "AC-42", "billing"],
"languages": ["en", "fr"],
"delay": "low"
},
"turn_detection": null
}
}
}
}- 使用
prompt描述录音内容或录音场景。 - 使用
keywords指定音频中可能出现的产品名称、首字母缩略词及其他需要按原文识别的词语。 - 使用
languages指定预期的输入语言。
支持的语言代码格式包括:
- ISO 639-1 代码,例如
en、es和fr。 - 部分 ISO 639-3 代码,例如
eng、spa、yue和cmn。 - 包含地区信息的
zh语言区域代码,例如zh-cn、zh-tw和zh-hk。
Realtime API 会拒绝不受支持或格式不正确的语言代码。
关键词仅作为提示,并非必须输出的内容。每个关键词必须保持在一行内,且不得包含 <、>、回车符或换行符。如果关键词包含上述任一字符,或 prompt 超过模型的长度限制,Realtime API 会拒绝此次会话更新。
gpt-live-transcribe 使用 languages,而不是单数形式的 language 字段。请勿同时发送这两个字段。
转录已提交的轮次
仅当您明确需要在音频轮次提交后才开始转录,或需要输出检测到的语言时,才在实时会话中使用 gpt-transcribe。此专用工作流需要 WebSocket 连接。
当 gpt-transcribe 在 Realtime API 会话中执行输入转录,或在专用转录会话中运行时,它会自动将此前已转录的轮次用作上下文。
{
"type": "session.update",
"session": {
"type": "transcription",
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 24000
},
"transcription": {
"model": "gpt-transcribe"
},
"turn_detection": null
}
}
}
}追加音频并发送 input_audio_buffer.commit。随后,模型便可在最终完成事件之前发送转录文本增量。其完成事件还包含检测到的语言:
{
"type": "conversation.item.input_audio_transcription.completed",
"item_id": "item_003",
"content_index": 0,
"transcript": "Bonjour, pouvez-vous m'entendre ?",
"languages": [{ "code": "fr" }]
}
当 gpt-transcribe 无法可靠地预测语言时,languages 为空数组。gpt-live-transcribe 不返回语言检测的预测结果。
调整延迟和准确率
流式转录需要在延迟与转录质量之间进行权衡。较低的延迟设置可以更早生成部分文本。较高的延迟设置则让模型在输出文本前获得更多音频上下文,有助于降低词错误率。
首先设置 audio.input.transcription.delay,并使用您的真实音频进行测试。您可以从以下设置开始:
minimal适用于对延迟最敏感的交互;low适用于低延迟实时字幕;medium适用于平衡延迟和准确率的场景;high适用于准确率比即时显示更重要的场景;xhigh适用于您的工作流能够容忍最长延迟以获取更多上下文的场景。
具体的延迟毫秒数可能因模型配置而异,因此请使用有代表性的音频进行基准测试,不要假定每个级别都对应固定的延迟。
请勿仅根据合成音频选择设置。测试应涵盖有代表性的麦克风、电话音频、口音、背景噪声、语码切换、领域词汇和长时间会话。
处理置信度、时间戳和说话人标签
gpt-live-transcribe 不返回词级时间戳、说话人标签或转录置信度分数。如果您的应用需要时间戳或说话人标签,请使用支持这些功能的文件转录模型,或在应用层添加备用方案。
生产环境检查清单
- 在调优前确定目标延迟和准确率阈值。
- 使用真实的生产环境音频进行测试,不要只使用干净的样本。
- 测试每种目标语言。
- 在您的评测集中包含数字、日期、货币、电子邮件地址、产品名称和领域术语。
- 除词错误率外,还应单独跟踪转录结果为空、被截断或延迟的情况。
- 确定当后续增量更新修正先前文本时,您的 UI 应如何更新已显示的部分文本。
- 使用
item_id对最终转录文本进行排序和核对。 - 为不受支持的时间戳、说话人标签或置信度字段保留备用处理方案。
相关指南
比较语音智能体会话、翻译会话和转录会话。
使用专用翻译会话翻译实时语音。
通过服务端媒体流水线流式传输原始音频。
为实时音频流配置轮次检测。