Discord LLM Chat Bot
Ollama ベースのローカル LLM を Discord に常駐させたチャットボット。Web 検索補強・画像入力・推論ログと GPU 消費電力の記録まで、ローカル LLM を「実用」に寄せるための仕組みを詰め込んだ。
自宅 GPU で動かす Ollama(Qwen / Gemma など)を推論エンジンにした、Discord 常駐のチャットボット。
クラウドの LLM ChatBot と違い、ローカル LLM は「知識が古い」「知らないことを答えられない」「性能が見えない」といった弱点がある。
ローカル LLM の学習用として始めたプロジェクトであったが、身内に公開したところ最新の情報や専門的な知識を求められるケースが続出した。
そのため、検索機能を導入し知識の補強を図った。
結果はやや好評であったが、GPU の排熱が暑すぎたので夏を目前にして連続運用を断念した。
実装のポイント
- reply チェーンでの会話継続 — Bot の返信にリプライすると、保存済みの会話チェーンをコンテキストとして引き継いで会話が続く。SQLite に履歴を保存し、サーバー単位で設定を管理する。
- 条件付き Web 検索 — メインモデル自身が「検索が必要か」を判定してクエリを生成し、外部の検索 API で回答を補強する。複数の知識が必要なときはクエリを並列実行し、回答末尾に参考 URL を表示する。
- 推論の可視化 — 推論ごとにトークン数・所要時間・検索クエリ数に加えて GPU の消費電力・消費エネルギーを SQLite に記録。
/statsコマンドでチャンネルの最新推論ログを誰でも確認できる。 - 画像入力 — vision 対応モデルを使うときは、添付した画像をそのまま入力として扱える。本文なしで画像だけ投げられた場合は既定プロンプトで補完する。推論時間が極端に大きくならないよう、前処理をしてから LLM に渡す。
- プリセットプロンプト管理 —
/presetコマンド群でシステムプロンプトを登録・切替。anchor メッセージへの reply チェーンにだけプリセットが適用される設計で、同じチャンネル内で複数のキャラ・用途を同時に使い分けられる。 - 運用まわり — 推論の直列化とキュー数の presence 表示、webhook による起動・終了・エラー通知、graceful shutdown。
「ローカル LLM を使えるモノにする」ための積み上げが詰まった一本。