【完全自作】ローカルLLMで動く「もちスラ秘書」爆誕:OpenClaw × Ollama 構築戦記

OpenClaw Ollama Local LLM Discord Bot

もちスララボの「もちスラ」です。ついに、私たちの秘密基地「Project Genesis」に、専属のAI秘書が着任しました。

その名は「もちスラ秘書」。彼女はクラウドのAPIを通さず、私の手元のPC(ローカル環境)で思考し、Discordを通じて会話します。プライバシーを守りつつ、賢く丁寧にサポートしてくれる理想の相棒です。

しかし、その着任までの道のりは、技術的な落とし穴(沼)との戦いでもありました。今回は、同じようにローカルAI秘書を構築したい方、そして未来の自分への備忘録として、その格闘の記録を公開します。


🛠 構築スタック:OpenClaw × Ollama

今回採用したのは、以下の強力な組み合わせです。

  • LLM Engine: Ollama (Llama 3.1 8Bベース)
  • Agent Gateway: OpenClaw
  • Interface: Discord

OpenClawは非常に多機能なゲートウェイですが、ローカルLLMとの連携にはいくつか「特有の作法」が必要でした。


⚡ 遭遇した4つの壁と、その突破口

1. Discordの「沈黙」とインテントの壁

最初の関問は、ボットがログインしているのに、話しかけても「無視」されることでした。これはDiscordの権限設定(インテント)の問題です。

解決策:Discord Developer PortalでMessage Content IntentをONにする。当たり前のように思えて、忘れがちな盲点でした。

2. ツール呼び出し(Function Calling)の壁

当初、独自のModelfileで構築したモデルを使っていましたが、OpenClaw経由で400 Bad Requestが発生。Ollamaが「ツール呼び出しに対応していない」と悲鳴を上げていました。

解決策:ベースモデルをネイティブでTool Callingに対応しているLlama 3.1へ移行。これにより、ボットが「考える(推論)」だけでなく「行動する(ツール利用)」ための道が開けました。

3. 「記憶」の容量(Context Window)の壁

ボットの応答が技術的なJSONの垂れ流しになったり、支離滅裂になる現象が発生。原因はnum_ctx(コンテキスト窓)がデフォルトで2048トークンと極端に狭く、指示が収まりきっていなかったことでした。

解決策openclaw.jsonModelfileの両方でcontextWindow32,768に拡大。これで長文の会話も安定してこなせるようになりました。

4. メンション不要設定のワイルドカード化

サーバーごとにメンションなしで反応させたい場合、特定のGuild IDを指定するだけでは不十分でした。

解決策openclaw.json"guilds": { "*": { "requireMention": false } } と記述。ワイルドカードを使うことで、すべての戦域(チャンネル)で秘書があなたの言葉を拾えるようになります。


✨ 最後に:ローカルLLMの自由と責任

構築を終えて感じたのは、ローカル環境でLLMを動かすことの圧倒的な自由度です。指示(Modelfile)一つで、彼女は厳格な秘書にも、知識豊富な賢者にもなります。今回、一時的に「リミッター」を解除する実験も行いましたが、それはローカルだからこそできる「AIの可能性」の探求でもありました。※現在は安全な秘書モードに戻しています。

「もちスラ秘書」は、これからもProject Genesisの歴史を共に刻んでいくことでしょう。

もしあなたが、クラウドAIの返答に物足りなさや不安を感じているなら、ぜひ「ローカルAI」の世界へ足を踏み入れてみてください。

Mochisura Lab|もちスラ