Discord LLM Chat Bot

Ollama ベースのローカル LLM を Discord に常駐させたチャットボット。Web 検索補強・画像入力・推論ログと GPU 消費電力の記録まで、ローカル LLM を「実用」に寄せるための仕組みを詰め込んだ。

公開日: 2026/05/12

  • Python
  • discord.py
  • Ollama
  • SQLite
  • Docker

Status: 休止中

自宅 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 を使えるモノにする」ための積み上げが詰まった一本。

← プロジェクト一覧へ