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