見出し画像

外部API利用でぴぴの開発を加速させた話 — 外部LLMモードを追加する


開発が、遅い

前回の記事で、ぴぴにGPT-SoVITSで感情付きの声を与えた。

声が出る。感情で声色が変わる。嬉しいことだ。

でも、開発中ずっと悩まされていたことがある。

とにかく、遅い。

ぴぴに何か話しかけて、返事が返ってくるまでの流れはこうだ:

  1. テキストをLLM(qwen3:8b)に送る → 25秒待つ

  2. 返ってきた文章をTTS(GPT-SoVITS)に送る → 2〜4秒待つ

  3. 音声が再生される

合計30秒。1回のテストに30秒。

TTSの調整をしたいだけなのに、毎回LLMの返答を25秒待つ。コードを1行変えて試すたびに25秒。これが10回続くと4分以上、ただ待っているだけの時間が積み上がる。

Mac mini 16GBでローカルLLMを動かしている以上、これは仕方がない——と思っていた。

1. 別のPCでLLMを動かせばいい

冷静に考えたら、開発中のLLM処理はローカルで動かす必要がない。

ぴぴの人格やシステムプロンプトの検証なら確かにローカルLLMの挙動を見たい。でも今やりたいのはTTSの調整だ。「何かしらの返答テキストが速く返ってくればいい」だけの話で、LLMの品質は二の次。

ちょうど知人が試験的にローカルLLMを外部公開していて、OpenAI互換のAPIとして叩ける環境があった。

じゃあ、開発中だけこれを借りればいい。

2. 「remoteモード」を設計する

ぴぴのLLMバックエンドは現在2種類ある:

表1: ぴぴのLLMバックエンド一覧

ここに3つ目のバックエンド `openai_compat`(OpenAI互換API)を追加して、`remote` モードとして使えるようにする。

やりたいことはシンプルだ:

  • `!pipi mode remote` で外部APIに切り替わる

  • ローカルのLLM(Ollama/llama.cpp)は全停止してメモリを解放する

  • TTS(GPT-SoVITS)はそのまま動き続ける

  • `!pipi mode balanced` で元に戻せる

3. 実装はシンプル

変更したのは4ファイルだけ。やったことを簡単にまとめると:

  • `.env` に外部APIの接続先・APIキー・モデル名を追加

  • `llm_client.py` に OpenAI互換の送信関数を追加(`/v1/chat/completions` にPOSTするだけ)

  • `llm_manager.py` に「remoteのときはローカルLLMを全停止してメモリ解放」のロジックを追加

  • `discord_cog.py` のモード定義に `remote` を追加

OpenAI互換APIは仕様が統一されているので、既存のllama.cpp用コードとほぼ同じ形で書けるらしい。

4. 結果

再起動して、Discordで `!pipi mode remote` を打つ。

ログを見ると:

[BrainCog] モード切り替え開始: balanced → remote (ollama → openai_compat)
[LLMManager] Ollama アンロード: qwen3:8b
[LLM] バックエンド切り替え: openai_compat
[LLM] openai_compat 応答時間: 1.4秒 | content=34文字
[TTS] Using GPT-SoVITS (emotion=relax)

25.4秒 → 1.4秒。

約18倍速になった。快適すぎる・・・
なぜもっと早くやらなかったのか・・・

比較するとこうだ:

表2: balanced vs remote 比較

TTSのテストで一番大事な「テキストが返ってくるまでの時間」が激減した。おまけにローカルLLMを止めているからメモリにも余裕ができて、GPT-SoVITSの処理にも良い影響がある(はず・・・・・)。

5. 開発の体感が変わった

数字以上に、体感の変化が大きい。

「コード変更 → 再起動 → テスト」のサイクルが30秒から5秒になった。5秒なら待てる。30秒は辛い。この差は集中力に直結する。

ちなみに、Mac ショートカットアプリで brain の再起動ボタンも作った。ターミナルを開いてコマンドを打つ手間も省ける。

なんやかんや、コード修正しては「ターミナルでbot停止、bot起動・・・」を手打ちするのは結構時間を食っている・・・。

なんでも最適化していきたいと思う。

まとめ

Mac mini 16GBという制約の中で開発していると、「遅い」は毎日のストレスになる。

今回やったのは「LLMの処理だけ外に逃がす」というシンプルなことだった。でも、25秒が1秒になるだけで開発のリズムが完全に変わる。

自分はたまたま知人がAPIを公開してくれていたから使えたけど、一般的にはOpenAI APIやClaude API等のクラウドLLMを使うのが現実的だと思う。

ただ、開発中に何十回もAPIを叩くとなるとそれなりに費用がかかるので、そこは悩ましいところ。無料枠があるサービスを探すか、割り切って投資するか・・・。

とりあえず土台が出来上がるまでは時間との勝負だからそこは割り切っていきたい。まずは、このAI戦争の中でぴぴを「育てる」速度が加速できてよかった。

開発環境を整えるのは地味な作業だけど、その先にある「もっと良い声にしたい」「もっと自然に喋らせたい」という目標に、ぐっと近づけた気がする。

次はどこをやろうかな。。思いついたところからどんどん進めていこうと思う。


※サムネイル画像はAI(Gemini)で生成しています。

いいなと思ったら応援しよう!