當應用程式需要將麥克風、通話或其他即時音訊串流轉為文字,而不需要助理以語音回覆時,可使用即時轉錄。建議使用的模型會在收到語音時傳回轉錄文字增量,並在應用程式提交每個音訊回合時傳回最終轉錄文字。
先從 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排序並核對整合最終轉錄文字。 - 針對不支援的時間戳記、說話者標籤或信心度欄位,保留替代處理方式。
相關指南
比較語音智慧體、翻譯和轉錄工作階段。
使用專用翻譯工作階段翻譯即時語音。
透過伺服器端媒體處理流程串流傳送原始音訊。
設定即時音訊串流的輪次偵測。