はじめに
七尾百合子さん、お誕生日 302日目 おめでとうございます! nikkieです。
メンテしている SpeechRecognition を さくらのAI Engine と奇跡的相性させます。
目次
- はじめに
- 目次
- さくらのAI Engine
- issue #850「Allow vllm hosted whisper models to be used with recognize_openai」
- openai SDK 用に環境変数を設定し、SpeechRecognition で さくらのAI Engine の Whisper API を叩く
- 終わりに
- P.S.「そこの実装者、俺だもん」
さくらのAI Engine
テキスト生成・分類・埋め込み・音声認識(whisper)に対応
OpenAI互換
無償プランあり
Chat completions だけでなく、Whisper を使った Audio transcription(音声認識)も可能です。
Whisper は「1ヶ月あたり50リクエストまで」無料です。
curl例:https://manual.sakura.ad.jp/cloud/ai-engine/03-operation-guide.html#id14- APIドキュメント:https://manual.sakura.ad.jp/api/cloud/ai-engine/inference.html#operation/createTranscription
SpeechRecognition から簡単に叩けるなと気づいて、手を動かしました。
issue #850「Allow vllm hosted whisper models to be used with recognize_openai」
直近対応した issue です。
vLLM や ollama でホストした Whisper モデルを SpeechRecognition から利用したいという要望。
取り組む中で、現在の SpeechRecognition は OpenAI の Whisoer API 互換の API は、すでにサポートできていることに気づきました2。
ドキュメントに記載し、テストコードでも pytest-httpserver で OpenAI の Whisper と互換な API を用意して3、動くことを確認しています。
ポイントは、依存している openai SDK の環境変数です。
OPENAI_API_KEY: API キーを指定します- さくらのAI Engine の API キー払い出し:APIキー | さくらのクラウド マニュアル
OPENAI_BASE_URL: OpenAI と互換な API エンドポイントを指定して、向き先を変えられますhttps://api.ai.sakura.ad.jp/v1(この下の/audio/transcriptionsを SDK が叩きます)
openai SDK 用に環境変数を設定し、SpeechRecognition で さくらのAI Engine の Whisper API を叩く
% say 親譲りの無鉄砲で子供の時から損ばかりして いる -o sample.wav --data-format=LEI16@16000
inline script metadata を使っています。
% uv run --python 3.12 sakura_whisper.py 親譲りの無鉄砲で子供の時から損ばかりしている
計画通り!
終わりに
openai SDK は環境変数を使って、OpenAI の API と互換な API に向けられます。
さくらのAI Engine では OpenAI の API と互換な API エンドポイントを提供しています。
今回は無料枠を利用して Whisper API に向けました。
設定する環境変数はOPENAI_API_KEYとOPENAI_BASE_URLです。
openai SDK に依存する SpeechRecognition も、さくらのAI Engine の Whisper API を利用できました!
OpenAI の音声認識(Whisper)API と互換な API を利用する際は、SpeechRecognition もぜひお試しください。
試していただくだけでも嬉しいですし、「ここがよかった」「ここいまいちに感じたので、もうちょっとなんとかならないか」といったお声もいただけるとなお嬉しいです。
応援ください!
P.S.「そこの実装者、俺だもん」
openai SDK を組み込んだ部分は私が実装したので、熟知している身からはこんな実装もできます
1つの巨大な Recognizer よりも、用途ごとの小さな Recognizer の方が美しいよな〜と思い始めてます(試行錯誤中)
- Qwen を試しました。↩
- https://github.com/Uberi/speech_recognition/issues/850#issuecomment-3704315688↩
- インターフェースが揃っていれば、具体はなんでもよい(vLLM でも pytest-httpserver というテスト用モックサーバでもよい)という好例だと思いました↩
-
wave.openするにはLEI16指定が必要と知りました。過去記事からのアップデートです。声をPythonに聴かせて(新章開幕!Whisperの環境構築、いっちゃうよ〜📣) - nikkie-ftnextの日記↩