Whisper API サーバー:セットアップオプションとテキスト処理
Whisper APIサーバーは、音声を受け取って文字起こし結果を返すHTTPサービスです。音声処理のみを行うため、その後のテキスト処理には別のテキストモデルが必要です。
更新日:

主要ポイント
- Whisperは音声からテキストへの変換モデルであり、サーバーはそれをHTTPエンドポイントの背後にラップします。
- ホストされたエンドポイントをレンタルするか、ラッパーをセルフホスティングするか、ローカルバイナリを実行できます。
- このAPIはテキストのみを対象としています。音声処理のステップではなく、文字起こしの後のステップを担当します。
- OpenAI SDKを2回使用して、数行のPythonコードで2つのステージを接続できます。
短い答え
WhisperはOpenAIが公開したオープンソースの音声認識モデルです。単体ではモデルファイルと推論コードですが、サーバーがHTTPインターフェースを前面に配置することで、アプリがPython関数を直接呼び出す代わりに、音声ファイルを送信してテキストを取得できるようになります。
ほとんどのサーバーはOpenAIのトランスクリプションエンドポイントの構造をコピーしており、POST /v1/audio/transcriptionsは音声ファイルとモデル名を含むmultipartアップロードを受け取ります。この構造により、同じクライアントライブラリがホストされたサービス、自分のマシン上のコンテナ、または他人が書いた小さなラッパーと通信できます。
- 入力:音声ファイル(通常はmp3、wav、m4aなど)。
- 出力:プレーンテキスト、またはサーバーに応じてセグメントとタイムスタンプを含むJSON。
- 含まれないもの:要約、洗練された文章への翻訳、アクションアイテムの抽出。これらには言語モデルが必要です。
Whisperサーバーの3つの入手方法
1. ホストされたエンドポイント
OpenAIはホストされた文字起こしエンドポイントを提供しており、他のプロバイダーもWhisperベースの文字起こしを販売しています。従量課金制でハードウェアの管理は不要ですが、音声は他社のインフラストラクチャに送信されます。プロバイダー間で課金モデルが異なるため、音声サービスは通常音声の長さで課金します。大口利用にコミットする前に、現在の価格表を確認してください。
2. セルフホスト型のラッパー
Whisperをラップする、またはそれを再実装したオープンソースプロジェクトがいくつかあります。これらはOpenAIの文字起こしルートを模倣するWebサーバーとして動作します。GPU搭載マシンでDocker上で実行するか、処理が遅くなることを許容してCPU上で実行できます。これにより音声の処理場所を制御できますが、モデルのダウンロード、更新、キュー管理、再起動の責任はあなたにあります。
3. ローカルバイナリ
whisper.cppプロジェクトはCおよびC++へのポートであり、リポジトリにはHTTPサーバーの例が含まれています。通常のラップトップや小型サーバーで動作するため、プロトタイプや1日数本の録音を行う単一ユーザーに適しています。数百時間のバッチ処理には、GPU搭載サービスの方が実用的な場合が多いです。
音声の移動先、月間処理時間、サービスの運用担当者の3つの質問に基づいて選択してください。以下に説明するテキスト処理は、3つの方法のいずれでも同じように動作します。
文字起こし後のテキストLLM APIの位置づけ
生のWhisper文字起こし結果はテキストの塊です。段落区切りが少なく、音声認識(ダイアライゼーション)を別途追加しない限り話者名が含まれず、フィラーワードもそのまま残ります。Whisperは製品名、専門用語、固有名詞でも誤認識を起こすことがあります。実際のプロジェクトのほとんどは、テキストに対して処理を行う第2のステージを追加します。
典型的な第2ステージのタスク:
- 句読点の修正、段落への分割、誤った発話の削除。
- 通話や講義の要約を箇条書きで出力。
- 決定事項、名前、日付などの構造化データをJSONとして抽出。
- 口語を記事、スクリプト、またはショーノートに書き換え。
- クリーンなテキストの翻訳またはローカライズ。
これがこのサービスの役割です。これは1つのモデルuncensored、10万トークンのコンテキストウィンドウ、ストリーミングを備えたOpenAI互換のテキストAPIです。2時間のインタビューのトランスクリプトは1つのリクエストに収まることが多く、小さなコンテキストウィンドウが強制するチャンク処理ロジックをスキップできます。より長い素材については、リクエストの詳細をクイックスタートドキュメントで確認してください。
このモデルは、法的な成人向け利用に対してコンテンツ拒否なしで回答するようにチューニングされています。これは文字起こしパイプラインにとって重要です。ソース音声は予測不可能であり、インタビュー、ポッドキャスト、フィクションの朗読、サポート通話には強い表現や難しい主題が含まれることがあります。話者の発話内容のために文字起こしのクリーンアップを拒否するモデルは、課金対象の文字起こし処理を無駄にします。唯一の制限は、未成年者に関する性的コンテンツが含まれる場合は受け付けないことです。
動作する2段階のパイプライン
OpenAI Python SDKを使用すると、異なるbase URLを持つ2つのクライアントを作成できます。1つはWhisperサーバーを指し、もう1つは当APIを指します。独自の文字起こしサービスの環境変数を設定し、2番目のクライアントは当サイトのbase URLを使用します。
import os
from openai import OpenAI
# Stage 1: any Whisper-compatible transcription server you run or rent.
stt = OpenAI(base_url=os.environ["STT_BASE_URL"], api_key=os.environ["STT_KEY"])
# Stage 2: the text model.
llm = OpenAI(base_url="https://api.whisperapis.com/v1", api_key=os.environ["LLM_KEY"])
with open("call.mp3", "rb") as f:
transcript = stt.audio.transcriptions.create(
model=os.environ["STT_MODEL"], # the model name your server expects
file=f,
)
resp = llm.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "Clean up this transcript: fix punctuation, keep every statement, no commentary."},
{"role": "user", "content": transcript.text},
],
temperature=0.2,
)
print(resp.choices[0].message.content)間違えやすい点として2つあります。まず、文字起こしモデル名はサーバーが期待する名前のため、ここでは環境変数から取得します。次に、テキストAPIのキーは音声サービスのキーとは別であり、それぞれが自身のホストのみを認証します。
シェルを好む場合、テキスト処理は通常のチャットcompletionリクエストです:
curl https://api.whisperapis.com/v1/chat/completions \
-H "Authorization: Bearer $LLM_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "user", "content": "Summarize this transcript in five bullet points: ..."}
]
}'認証はAuthorizationヘッダーにBearerキーを設定することで実現し、エンドポイントはPOST /v1/chat/completionsとGET /v1/modelsです。APIキーページからキーを取得できます。新規アカウントはワンクリックで$0.50の無料トライアルクレジットを受け取ることができ、カード登録なしで7日間有効です。
実運用で問題となる点
大きな音声ファイル
多くのWhisperサーバーはアップロードサイズに制限を設けており、長時間の録音はリクエストの途中でタイムアウトすることがあります。ffmpegなどのツールでオーディオを10〜30分ごとに分割し、各パートをトランスクリプトしてテキストを結合してください。テキストAPIは最大10万トークンを受け付けるため、これらのパートを連結して1つのプロンプトとして送信できます。このAPIのリクエストボディの制限は8 MBで、トランスクリプトに必要な容量をはるかに上回っています。
レートおよび同時実行数の制限
フルキーは8つの同時リクエストと1分あたり300リクエストを許可し、トライアルキーは2および60を許可します。多くのワーカーでキューを実行する場合、キーの同時実行数に合わせて制限してください。制限を超えるとHTTP 429が返され、1分あたりのリクエスト数はrate_limited、同時実行数の超過はconcurrencyというコードで返されます。ストリーミングリクエストはストリーミングが完了するまでスロットを保持するため、停止したクライアントが予想以上にスロットを占有する可能性があります。バックオフして再試行してください。レスポンスにRetry-After: 5ヘッダーが含まれる場合は、その秒数待機してください。
LLMでは確認できない文字起こしエラー
Whisperが間違った単語を認識した場合、テキストモデルはその間違った単語しか見えません。誤りを補って意図的に見えるようにすることさえあります。名前や用語の用語集をシステムプロンプトに含め、推測ではなく不確実な箇所をマークするようモデルに指示してください。重要な素材では、クリーンなテキストの横に元の文字起こしを併記してください。
幻のフィラー
Whisperは沈黙や音楽中に捏造されたテキストを生成することがあります。送信前に沈黙をトリムし、第2ステージに文脈に不自然な文をフラグ付けさせます。低いtemperature(例:0.2)は、クリーンアップをソースに近づけます。
このAPIでできないこと
オーディオのトランスクリプトは行いません。オーディオ入力、音声出力、画像や動画の生成、埋め込み、ファインチューニングはありません。これは独立したプロバイダーが運営するチャット補完エンドポイントの背後にあるホストされたテキストモデルであり、OpenAIや他のモデルベンダーの公式APIではありません。プロジェクトで両方が必要な場合は、最初のパートに音声サーバー、2番目にこのサービスが必要です。
プロンプトはトレーニングには使用されません。これは音声プロバイダーが音声に対して行う処理とは別であり、そのプロバイダーの利用規約を別途お読みください。
コスト計画のため、テキスト側は前払いクレジットから、入力トークン100万トークンあたり$0.15、出力トークン100万トークンあたり$0.50でトークン単位で課金されます。価格ページにはチャージ額とボーナスが記載されています。失敗または拒否されたリクエストは課金されず、リトライループでも課金されません。
理にかなった始め方
- Whisper互換のサーバー(ホストまたはローカル)を起動し、1分間のファイルに対してテキストが返されることを確認します。
- アカウントを作成し、トライアルクレジットを受け取り、上記のcurlコマンドを短い文字起こしで実行します。
- Pythonスクリプトで2つのクライアントを接続し、希望するクリーンアップスタイル用の独自システムプロンプトを使用します。
- 単一ファイルのフローが動作してからキューを追加し、キーの同時実行数に合わせてキューのサイズを調整します。
多くの作業はグルーコードではなく、プロンプトと音声処理に費やされます。よく知る録音から始め、出力を自分の耳で確認し、スケーリングする前に指示を調整してください。
その他のガイド
質問と回答
Whisper API サーバーは OpenAI API と同じですか?
いいえ。Whisper はモデルであり、サーバーはそれを HTTP 経由で公開するプログラムです。OpenAI はホスト版を 1 つ提供していますが、同じトランスクリプト処理の仕組みをコピーしたオープンソースツールを使って、多くの人が自前のサーバーを運用しています。
この API で音声ファイルをトランスクリプト(文字起こし)できますか?
いいえ。テキストのみを受け付けます。音声処理には音声サービスや自前の Whisper サーバーを使用し、その後にトランスクリプトをこちらに送信してください。
テキスト処理にはどのモデル名を使用すればよいですか?
モデルIDにuncensored、ベースURLにhttps://api.whisperapis.com/v1、キーをBearerトークンとして使用します。
送信できるトランスクリプトの長さはどのくらいですか?
コンテキストウィンドウは10万トークンで、プロンプトと補完を合わせてカバーします。これにより、1つのリクエストで多くの長時間録音を処理できます。
試すためにクレジットカードが必要ですか?
いいえ。新規ユーザーは、サインアップ後にAPIキーページでワンクリックで$0.50の無料トライアルクレジットを取得できます。クレジットカードは不要です。
キーはフォームを1つ埋めるだけで手に入ります
アカウントを作成し、キーをコピーし、ベースURLを変更します。これでセットアップは完了です。