GPT Transcribe と GPT Live Transcribe 実践ガイド:ファイルとリアルタイム音声転写

GPT TranscribeとGPT Live Transcribeをファイル、リアルタイム、低遅延ストリームの文字起こし方式で比較し、文脈、キーワード、多言語プロンプト、本番展開の考慮事項を紹介します。

OpenAIは2026年7月28日に正式に2つの音声文字起こしモデルをリリースしました:gpt-transcribegpt-live-transcribe。どちらもAudio APIおよびリアルタイム文字起こしシステムの一部ですが、異なる課題に対応しています。

  • gpt-transcribe:完成した音声ファイルを処理するか、すでに提出された音声セグメント全体をリアルタイムで文字起こしします。
  • gpt-live-transcribe:ライブ音声を継続的に受信し、できるだけ早くインセメンタルテキストを返すこと。

これらはすべて自由フォーマットの文脈、キーワードプロンプト、複数の入力言語に対応しており、会議議事録、カスタマーサービス通話、ライブ字幕、音声検索、多言語録音の整理に適しています。

まず、音声到着方法でモデルを選択します

要件 推奨モデル アクセス方法
すでに録音した音声をアップロードしてください gpt-transcribe /v1/audio/transcriptions
限定的な長さの音声リクエストの処理 gpt-transcribe 文字起こしAPI
ファイル処理中に段落ごとにテキストが返送される gpt-transcribe ファイル書き起こしとストリーミング出力の有効化
文字起こし前にリアルタイム音声クリップを提出してください gpt-transcribe リアルタイム文字起こし
マイクまたは電話音声による字幕のリアルタイム表示 gpt-live-transcribe リアルタイムAPI
永続接続で受信される連続テキストインクリメント gpt-live-transcribe WebSocketまたはWebRTC

最も混乱しやすいのは「ストリーミング」という用語です。すでに録音されたファイルも処理中にテキストの一部をストリーミングで返すことができますが、音声自体はすでにそのままであり、リアルタイムセッションを設定する必要はありません。マイク、電話、メディアストリームから音声が継続的に届き、持続的なリアルタイム接続が必要な場合にのみgpt-live-transcribeされます。

両モデルの機能の違い

能力 gpt-transcribe gpt-live-transcribe
入力モダリティ 音声/テキストコンテキスト 音声/テキストコンテキスト
出力モダリティ テキスト テキスト
ファイル転写エンドポイント サポート済み サポートなし
リアルタイム文字起こし 提出クリップのサポート リアルタイムの増分データサポート
出力:差分テキスト サポート サポート
入力言語の検出 対応 言語予測は返さない
レイテンシー設定 該当なし 対応
ワードレベルのタイムスタンプ サポートされていません サポートされていません
話者ラベル 非対応 非対応
転写信頼度 サポートされていません サポートされていません

企業が単語のタイムスタンプ、SRT、VTTを取得する必要がある場合でも、公式の文字起こしガイドラインでは引き続き言語whisper-1の使用が推奨されています。スピーカーラベルが必要な場合は、これら2つのモデルにスピーカーを推測させるのではなく、ファイル文字起こしモデルをgpt-4o-transcribe-diarize用いるべきです。

SDKとAPIキーを準備する

Python SDKのインストールまたは更新:

1
pip install -U openai

APIキーの設定:

1
$env:OPENAI_API_KEY = "你的_API_Key"

APIキーをスクリプト、フロントエンドコード、Gitリポジトリに書き込まないでください。ブラウザがWebRTCを通じてリアルタイムAPIを使用する場合、短期クライアント認証情報はバックエンドが作成し、長期のサーバーキーでブラウザに送るのではありません。

GPT Transcribeによる音声ファイルの文字起こし

ファイル文字起こし呼び出しは/v1/audio/transcriptions。以下は公式Python SDKの基本構文です:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from openai import OpenAI

client = OpenAI()

with open("meeting.wav", "rb") as audio_file:
    transcription = client.audio.transcriptions.create(
        model="gpt-transcribe",
        file=audio_file,
    )

print(transcription.text)

対応するcURLリクエストは以下の通りです:

1
2
3
4
5
curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F model="gpt-transcribe" \
  -F file="@/path/to/file/meeting.wav"

ファイル転写ガイドに記載されている一般的なフォーマットには以下があります:

  • mp3
  • mp4
  • mpeg
  • mpga
  • m4a
  • wav
  • webm

ファイルあたりの最大サイズは25MBです。大きな録音はまず圧縮または分割し、各セグメントを25MB未満に抑えるべきです。分割時は、間や文の境界線を選ぶようにしてください。名前、数字、完全な文の間を切り詰めるのは避けてください。隣接するクリップは意味的な文脈を失います。

文脈を活用して専門用語の認識率を高めましょう

両方の新しいモデルは、3種類の書き換え文脈を受け入れています。

  • prompt:録音のテーマ、シーン、背景を説明してください。
  • keywords:音声に登場する可能性のある製品名、略語、独自用語。
  • languages:1つ以上の入力言語が現れることが予想されます。

ファイル書き起こしの例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from openai import OpenAI

client = OpenAI()

with open("support-call.wav", "rb") as audio_file:
    transcription = client.audio.transcriptions.create(
        model="gpt-transcribe",
        file=audio_file,
        prompt="一段关于高级套餐和账户 AC-42 的客户支持通话。",
        extra_body={
            "keywords": ["高级套餐", "AC-42", "账单"],
            "languages": ["zh-cn", "en"],
        },
    )

print(transcription.text)

prompt 録音に関する情報は「音声をテキストに変換してください」といった繰り返し作業を避けて提供すべきです。keywords これはあくまでヒントであり、モデルが出力しなければならない語彙リストではありません。音声にキーワードが欠けている場合、文字起こしの結果は無から加えるべきではありません。キーワードが多すぎたり内容に関係ないと、無言の単語が結果に現れることがあります。ライブ配信前に、キーワードの有無を問わず実際のエラー率を比較してください。

languages と従来の language パラメータの違い

gpt-transcribegpt-live-transcribe は複数形のパラメータlanguagesを使用しますが、古い単数languageを同時に送信しません。公式にサポートされている言語コード形式には以下が含まれます:

  • ISO 639-1(enesfrなど)。
  • ISO 639-3の一部(engspayuecmnなど)。
  • 中国の地域コード(zh-cnzh-twzh-hkなど)

サポートされていない、またはフォーマットが誤った言語コードはAPIによって拒否されます。多言語呼び出しは複数の候補言語を提供できますが、リクエストに全く関連のない言語を詰め込む必要はありません。キーワードは1行に1つの値を保持し、<>、キャリッジリターン、または改行文字を含めることはできません。これらの文字に遭遇した場合、ファイルリクエストやリアルタイムセッションの更新は全体として拒否されます。

GPT Live Transcribeセッションを作成

リアルタイム文字起こしセッションの種類はtranscriptionです。サーバー側の音声パイプラインは通常WebSocketを使用し、ブラウザのマイクシナリオではWebRTCが一般的に使用されます。以下のsession.updateは24 kHzのPCM音声を使用し、自動音声ターン検出をオフにします:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "transcription": {
          "model": "gpt-live-transcribe",
          "prompt": "一场包含中英文产品名称的技术支持通话。",
          "keywords": ["OpenAI", "Realtime API", "AC-42"],
          "languages": ["zh-cn", "en"],
          "delay": "low"
        },
        "turn_detection": null
      }
    }
  }
}

自動ラウンド検出をオフにした後、アプリは音声クリップの終了タイミングを自分で判断する必要があります。音声データはBase64でエンコードした後に追加されます:

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を設定して、システムが話し始めと終了を検知し、自動的にターンを送信させることもできます。

差分テキストと最終結果の処理

gpt-live-transcribeまずインクリメンタルイベントを送信し、その後そのボイスラウンドの完全な結果を送信します。

 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);
  }
});

インターフェースはすべてのデルタを恒久的なテキストとして扱うべきではありません。その後のインクリメントや最終結果は前の内容を修正する可能性があるため、更新可能な字幕バッファを設計すべきです。

異なるボイスラウンドの完了イベントは、コミット順に必ずしも到着するわけではありません。デルタ、最終テキスト、元の音声クリップを関連付けるためにitem_idを使う必要があります;WebSocketのメッセージ到着時間だけに頼ってソートできません。

リアルタイム文字起こしの遅延を調整する

gpt-live-transcribe 遅延と精度を調整できるdelay:

設定 適したシナリオ
minimal 即時表示を最優先するインタラクション
low 低遅延のライブ字幕
medium レイテンシーと精度のバランス
high より多くのコンテキストを待てる高精度タスク
xhigh より多くのコンテキストと引き換えに最大の待ち時間を許容できるタスク

レベルは固定されたミリ秒数に対応していません。実際のレイテンシはモデル構成、音声、ネットワークによって異なるため、テスト結果を厳密にサービスコミットメントとして書き込むことはできません。

レイテンシが低いことでテキストの一部が早く現れやすくなり、レイテンシが高いことでモデルは出力前により多くの文脈を聞き取ることができ、通常は単語の誤り率を減らすのに役立ちます。

コミット後の文字起こしのためのリアルタイムモード

アプリケーションがすでにRealtime WebSocketを使用しているが、話しながらテキストを表示する必要がない場合は、セッション内でgpt-transcribeを選択できます。

 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-transcribe"
        },
        "turn_detection": null
      }
    }
  }
}

アプリはまず音声を追加し、その後input_audio_buffer.commitを送信します。モデルは最終的な完了イベント前にテキストインクリメントを生成することができ、検出された言語も含まれます。

言語が確実に特定できない場合、languages空配列となります。gpt-live-transcribeはこの検出言語の結果を提供しません。

専用の文字起こしセッションやリアルタイム入力文字起こしでは、gpt-transcribe以前に書き起こしされたラウンドを自動的にコンテキストとして使用し、連続した会話の中で用語の一貫性を保つのに役立ちます。

本番環境のテスト方法

静かな部屋から標準的な標準の標準語サンプルだけを受け付けないでください。テストセットは実際の使用状況をカバーすべきです:

  • 目標言語、アクセント、そして途中で言語の切り替え。
  • 電話のナローバンド音声、異なるマイク、背景雑音。
  • 名前、日付、金額、メール、注文番号、英数字文字列。
  • 製品名、薬剤名、略語、業界用語。
  • 非常に短い回答、長い録音、中断、そして中断。
  • ネットワークジッター、接続再構築、繰り返しコミット。

全体の誤り率に加え、ビジネスにとって本当に重要な誤りもカウントする必要があります。カスタマーサービスシステムは注文番号と口座番号を別々に評価し、医療シナリオでは薬名や用量を別々に評価すべきです。

リアルタイムインターフェースは以下の記録も行う必要があります:

  • 最初のデルタの到着遅延。
  • 最終結果は遅れている。
  • 空の転写、切断、長期間の非活動。
  • デルタは最終テキストの修正された割合です。
  • 異なるdelayレベルでの精度の違い。

よくある質問

ファイル転写の stream は Realtime と同じですか?

同じではありません。ファイルは処理中にテキストをストリーミングできますが、入力音声はすでに完全にアップロードされています。リアルタイムは、連続的に届くライブ音声に使われます。

2つのモデルは字幕タイムラインを生成できますか?

ワードレベルのタイムスタンプは提供していません。ワードやセクション別タイムスタンプ、SRT、VTTが必要な場合は、公式ガイドラインに従って選択whisper-1ください。

GPT Live Transcribeは話者を区別できますか?

スピーカータグは返却できません。スピーカー分離が必要な場合は、互換性のあるファイル文字起こしモデルやアプリケーションレベルの後処理ソリューションを使用するべきです。

キーワードが多いほど良いのでしょうか?

いいえ。キーワードは単なる識別の促しに過ぎません。無関係な単語が多すぎると、言葉にされない言葉が結果に書き込まれるリスクが高まります。

多言語録音は言語を使うべきか?

これら2つの新しいモデルはlanguagesを使用しています。languagelanguagesを同時に送信しないでください。

まとめ

gpt-transcribe 完成したファイル、限定的な音声リクエスト、提出後にリアルタイムで処理される音声ラウンドに適しています。

gpt-live-transcribe マイク、電話通話、ライブ音声ストリームに適しており、低遅延のテキストを継続的に返し、delayを通じて速度と精度を調整できます。

どちらを選ぶにせよ、promptkeywordslanguagesは、特定のテキストが必ず現れるという厳格な制約ではなく、実際の音声評価のためのプロンプトとして扱うべきです。

公式資料