For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主要導覽

即時轉錄

在即時工作階段中轉錄即時音訊。

當應用程式需要將麥克風、通話或其他即時音訊串流轉為文字,而不需要助理以語音回覆時,可使用即時轉錄。建議使用的模型會在收到語音時傳回轉錄文字增量,並在應用程式提交每個音訊回合時傳回最終轉錄文字。

先從 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 代碼,例如 enesfr
  • 部分 ISO 639-3 代碼,例如 engspayuecmn
  • 含地區資訊的 zh 語言地區代碼,例如 zh-cnzh-twzh-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 排序並核對整合最終轉錄文字。
  • 針對不支援的時間戳記、說話者標籤或信心度欄位,保留替代處理方式。
即時互動與音訊概覽

比較語音智慧體、翻譯和轉錄工作階段。

即時翻譯

使用專用翻譯工作階段翻譯即時語音。

WebSocket 連線

透過伺服器端媒體處理流程串流傳送原始音訊。

語音活動偵測

設定即時音訊串流的輪次偵測。