【完全自作】ローカルLLMで動く「もちスラ秘書」爆誕:OpenClaw × Ollama 構築戦記
もちスララボの「もちスラ」です。ついに、私たちの秘密基地「Project Genesis」に、専属のAI秘書が着任しました。
その名は「もちスラ秘書」。彼女はクラウドのAPIを通さず、私の手元のPC(ローカル環境)で思考し、Discordを通じて会話します。プライバシーを守りつつ、賢く丁寧にサポートしてくれる理想の相棒です。
しかし、その着任までの道のりは、技術的な落とし穴(沼)との戦いでもありました。今回は、同じようにローカルAI秘書を構築したい方、そして未来の自分への備忘録として、その格闘の記録を公開します。
🛠 構築スタック:OpenClaw × Ollama
今回採用したのは、以下の強力な組み合わせです。
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.jsonとModelfileの両方でcontextWindowを32,768に拡大。これで長文の会話も安定してこなせるようになりました。
4. メンション不要設定のワイルドカード化
サーバーごとにメンションなしで反応させたい場合、特定のGuild IDを指定するだけでは不十分でした。
解決策:openclaw.jsonで
"guilds": { "*": { "requireMention": false } }
と記述。ワイルドカードを使うことで、すべての戦域(チャンネル)で秘書があなたの言葉を拾えるようになります。
✨ 最後に:ローカルLLMの自由と責任
構築を終えて感じたのは、ローカル環境でLLMを動かすことの圧倒的な自由度です。指示(Modelfile)一つで、彼女は厳格な秘書にも、知識豊富な賢者にもなります。今回、一時的に「リミッター」を解除する実験も行いましたが、それはローカルだからこそできる「AIの可能性」の探求でもありました。※現在は安全な秘書モードに戻しています。
「もちスラ秘書」は、これからもProject Genesisの歴史を共に刻んでいくことでしょう。
もしあなたが、クラウドAIの返答に物足りなさや不安を感じているなら、ぜひ「ローカルAI」の世界へ足を踏み入れてみてください。
Mochisura Lab|もちスラ
