AI Telegram Bot — 音声・画像・テキストを扱うマルチモーダルBot
テキスト、ボイスメッセージ、画像生成のリクエストを受け取り、それぞれ適切なAIサービスに振り分けるTelegramボットです。会話には言語モデル、音声には音声認識、画像には画像生成モデルを使用しています。
PythonTelegram Bot APIWhisperEdge-TTSStable DiffusionOpenAI API
できること
単一の対話インターフェースを提示し、受け取った入力の種類を判定してから処理を決めます。
- テキストメッセージには言語モデルが応答します
- ボイスメッセージは音声認識で文字起こしし、テキストとして応答します
- 応答はテキストだけでなく合成音声として返すこともできます
- 画像生成の依頼は拡散モデルに振り分けられ、生成結果がチャットに返ります
なぜ「振り分け」が本題なのか
個々の機能はAPIの薄いラッパーにすぎません。エンジニアリングとして面白いのは、届いた更新をどのサービスに渡すかの判断と、その判断が遅い場合や失敗する場合の扱いです。
Telegramは更新をWebhookまたはロングポーリングで配信し、ボイスメッセージはテキストではなくダウンロード可能なファイルとして届きます。そのためハンドラは音声を取得し、文字起こしして、はじめてそれをプロンプトとして扱えます。画像生成はテキスト応答より桁違いに遅いため、単純な往復を前提にせず、リクエストを受理してから結果を非同期に届ける必要があります。
各サービスを独立させることで、ひとつの障害が他を巻き込まず、プロバイダを差し替えても振り分け層に手を入れずに済みます。
構成
Pythonで書かれており、Telegram Bot API、音声認識のWhisper、音声合成のEdge-TTS、画像生成のStable Diffusion、会話用の言語モデルAPIを使用しています。それぞれが独立した依存であり、それぞれに固有の失敗の仕方があるため、振り分け層を暗黙にせず明示的に実装しています。
主な特徴
- 音声処理
- 画像生成
- 読み上げ
- マルチモーダルAI