「Open Claw」タグアーカイブ

Gemma4-E4Bだとコンテクストメモリを確保できなかった。。。

※この記事はClaude Codeで書いています。評価もClaude Codeが実施しています。

前回の記事でGemma4-E4BをOpenClawのメインモデルとして採用した、と書いたんだけど——

すぐ問題が出た。

コンテキストが足りなくなるんだよね😅

長めのタスクを投げると「コンテキスト上限に近づいてます」的な警告が出てきて、途中でレスポンスが切れたり、セッションが圧縮されてしまう。

E4BはVRAMを9.6GBも使うから、KVキャッシュ(会話履歴を保持するメモリ)に割ける余裕が少ない。 contextTokensを16384(約16K)に制限せざるを得なかったのが原因だった。

「もっとコンテキスト長を伸ばしたい…でもVRAMが足りない…」

というジレンマを解決するために 量子化を落とすという選択をした話です。


E4B vs E2B:量子化の違い

ここで少し技術的な話。

Gemma4には複数の量子化バリアントがある:

バリアント VRAM 量子化 精度
E4B 9.6 GB 4-bit 高め
E2B 7.2 GB 2-bit 低め

量子化(quantization)というのは、モデルの重みを圧縮する技術。 4-bit → 2-bit にすると精度は落ちるが、モデルサイズが約2.4GB削減される。

その削減分をKVキャッシュ(コンテキスト)に回せるのがポイント。

結果として:

  • E4B: contextTokens = 16,384(16K)
  • E2B: contextTokens = 131,072(131K)

コンテキストが8倍になった。エージェント用途ではこれが大きい。


ベンチマーク結果:E2BはE4Bより速い

量子化を落とすと精度が下がる、という一般論があるけど、速度はどうかも気になったのでベンチマークを回してみた。

条件は前回と同じく /api/chat + ツール定義 + think: false

モデル 指示理解 コーディング ツール呼出 合計 速度
gemma4-e2b-agent 2/3 4/4 2/2 8/9 129 tok/s
gemma4-e4b-agent 3/3 4/4 2/2 9/9 76 tok/s
qwen35-agent 3/3 4/4 2/2 9/9 47 tok/s
mistral-nemo-agent 1/3 4/4 1/2 6/9 31 tok/s

E2Bは 129 tok/s、E4Bは 76 tok/s

約1.7倍速い

モデルが軽くなる分、推論が速くなるのは理屈どおりだけど、 ここまで差が出るとは思わなかった(笑)


トレードオフ:精度 vs コンテキスト vs 速度

結果をまとめるとこんな感じ:

E4B E2B
精度 ⭐⭐⭐(9/9) ⭐⭐(8/9)
速度 ⭐⭐(76 tok/s) ⭐⭐⭐(129 tok/s)
コンテキスト ⭐(16K) ⭐⭐⭐(131K)
VRAM 9.6 GB 7.2 GB

E2Bで失点したのは「指示理解」の1問のみ。 具体的には「疑問文の末尾に?をつけてください」という条件を守りきれなかったケース。 コーディングとツール呼び出しは満点。

実用上どちらを選ぶか、というのは用途次第だけど:

  • 短いチャット・精度重視 → E4B
  • 長文コンテキスト・速度重視のエージェント → E2B

OpenClawでエージェントとして使う場合、長いシステムプロンプトやツール定義を毎回送るので コンテキストが多いほど助かる。今の使い方だとE2Bの方が合っている。


openclaw.jsonの設定

参考まで、現在のE2B設定はこんな感じ:

{
  "id": "gemma4-e2b-agent",
  "name": "Gemma4 E2B Agent",
  "contextTokens": 131072,
  "reasoning": false
}

reasoning: false は前回の記事で解説したthinkingモード対策。contextTokens: 131072 でKVキャッシュをフル活用する設定。

ただし注意点として、131Kトークン全部使い切ると今度はVRAMがパンパンになるので、 実際のタスクの長さに応じて調整が必要かも。


まとめ

ポイント 内容
E4Bの問題 VRAM 9.6GB消費でコンテキスト16Kに制限される
E2Bへ切り替え 7.2GBに削減 → コンテキスト131Kに拡大
精度の変化 9/9 → 8/9(指示理解1問失点)
速度の変化 76 tok/s → 129 tok/s(1.7倍速く)
結論 エージェント用途ならE2Bがベストバランス

VRAMが12GBしかない環境でも、量子化を工夫することで長いコンテキストと高速推論を両立できた。

精度的にはE4Bを使いたいところだけど、ないメモリは振れないですね :-)

自宅RTX 3060でローカルLLMを比べてみたら、エージェントとして使ったら全然違う結果になった話

※この記事はClaude Codeで書いています。評価もClaude Codeが実施しています。

前回、RTX 3060(12GB VRAM)で5つのローカルLLMをベンチマークしてみた記事を書いた。 結果としては coder14b が満点で圧倒的!という内容だったんだけど…

実際にAIエージェント(OpenClaw)として動かしてみたら、全然違う結果になった😅

「あれ?ベンチマークで高得点だったのに、なんでまともに動かないの?」

という沼にはまった話です。


前回のベンチマーク(/api/generate)の結果おさらい

前回は Ollama の /api/generate エンドポイントでシンプルにテキスト生成させてスコアを出した。

モデル 指示理解 コーディング WEB要約 合計
coder14b-agent 3/3 4/4 4/4 11/11
gemma4-e4b-agent 3/3 4/4 3/4 10/11
mistral-nemo-agent 2/3 4/4 4/4 10/11
qwen3-agent 3/3 0/4 3/4 6/11
qwen35-agent 1/3 4/4 0/4 5/11

この結果を見て「よし、coder14b をメインにしよう!」と思ったんだけど、 実際にエージェントに組み込んだらすぐ問題が出てきた。


問題① thinkingモードで content が空になる

OpenClaw(AIエージェントフレームワーク)は内部で Ollama の /api/chat エンドポイントを使う。 そしてツール定義(function calling の仕様)を一緒に渡す。

ここで Gemma4・Qwen3・Qwen35 が 盛大にこけた

Ollama のログを見ると:

500 | 59.996s | POST /api/chat

60秒でタイムアウト。毎回。

原因を調べてみると、これらのモデルは「thinkingモード」を持っていて、 ツール定義を受け取ると思考プロセスを <think>...</think> トークンに費やしてしまう。 その結果、実際の content フィールドが 空文字列 になってしまうのだ。

{
  "content": "",
  "thinking": "Let me analyze the tools available..."  // ← これが問題
}

エージェント側は空のレスポンスを受け取って「タイムアウトかな?」と判断 → フェールオーバー。 という流れで、何度やっても落ちていた。


問題② coder14b はネイティブ tool_calls に非対応

一方、coder14b はというと…こちらは別の問題。

ツールを呼び出すとき、OpenAI 互換の tool_calls フィールドを使う仕様なんだけど、 coder14b はそれを使わずに テキストとしてJSONを返す

// 期待するレスポンス(tool_calls フィールドを使う)
{"tool_calls": [{"function": {"name": "web_search", "arguments": "{...}"}}]}

// coder14b が実際に返すもの
```json
{"name": "web_search", "arguments": {...}}

エージェントが「ツールを呼んだ」と認識できないので、正常に動作しない。

---

## 解決策:`reasoning: false` を設定する

調べてみると、OpenClaw の設定ファイル(openclaw.json)に `"reasoning": false` を追加すると、
Ollama へのリクエストに `think: false` パラメータが自動で付与されて、thinkingモードが抑制されることがわかった。

```json
{
  "models": [
    {
      "provider": "ollama",
      "modelId": "gemma4-e4b-agent",
      "reasoning": false
    }
  ]
}

これを設定してから再テストしたら、Gemma4もQwen系もちゃんと動くようになった🎉


改訂版ベンチマーク(/api/chat + think:false)

今度は実際のエージェント動作に近い条件でテスト。/api/chat エンドポイント + ツール定義 + think: false を使用。

モデル 指示理解 コーディング ツール呼出 合計 速度
gemma4-e4b-agent 3/3 4/4 2/2 9/9 63 tok/s
qwen3-agent 3/3 4/4 2/2 9/9 19 tok/s
qwen35-agent 3/3 4/4 2/2 9/9 48 tok/s
mistral-nemo-agent 3/3 4/4 2/2 9/9 31 tok/s
coder14b-agent 3/3 4/4 0/2 7/9 36 tok/s

結果が がらっと変わった

前回のベンチマーク覇者だった coder14b は、ツール呼び出しで 0/2 という惨敗。 逆に Gemma4・Qwen3・Qwen35・mistral-nemo は全員満点🏆

前回の「Qwen3が低スコア」も、thinkingモードのせいだったということが判明。 あれ、全然 Qwen3 が弱かったわけじゃなかった(笑)


MVPは Gemma4-E4B

速度と精度のバランスを考えると Gemma4-E4B が最強という結論になった。

  • 全テスト満点(9/9)
  • 速度は 63 tok/s でトップクラス
  • RTX 3060 12GB に収まる(~9.6GB VRAM)

Qwen3.5 も満点で 48 tok/s と速く、サブモデルとして優秀。

というわけで、OpenClaw のメインモデルを gemma4-e4b-agent に切り替えた


教訓:「ベンチマーク環境 ≠ 実際の使用環境」

今回の一番の学びはこれだった。

/api/generate(ツールなし・シンプル生成)と、/api/chat(ツール定義あり・エージェント動作)では、同じモデルでも全く違う挙動をする

特に thinking モード搭載モデルは、ツールと組み合わせると無音になるという罠がある。 これ、知らなかったら永遠に「なんか不安定だな〜」で終わってた気がする。

ローカルLLMをエージェントとして使いたい人は、必ずエージェント条件でテストしてね!


まとめ

ポイント 内容
thinkingモードの罠 Gemma4/Qwen3系はツール定義と組み合わせると content が空になる
解決策 OpenClaw設定に "reasoning": false を追加
coder14b の限界 ネイティブ tool_calls に非対応 → エージェント用途には不向き
実質的な勝者 Gemma4-E4B(満点 + 最速)
教訓 ベンチマーク環境と実使用環境を合わせることが重要

自宅 GPU でローカル LLM を動かすの、なかなか沼ですが楽しいです😄 同じ環境で試してみたい人の参考になれば!

RTX 3060 12GBでローカルLLMを動かしてみた正直な感想

自宅サーバーにローカルLLM環境を構築してみた。結論から言うと、RTX 3060 12GBではプログラム開発用途としては厳しいというのが率直な感想だ。

構成

  • CPU: AMD Ryzen 5600X
  • RAM: 16GB
  • GPU: NVIDIA RTX 3060 12GB
  • OS: Ubuntu 24.04.4 LTS
  • 推論エンジン: Ollama
  • 自律エージェント: OpenClaw

やったこと

OllamaでQwen3やQwen3.5などのモデルを動かし、OpenClawという自律AIエージェントと組み合わせて、Discord経由で指示を出せる環境を作った。Claude CodeをボスとしてOpenClawに作業を振るという構成だ。

ブログ記事の自動投稿、Redmine連携のスキル化、Samba共有の設定など、いくつかのタスクを実際にやらせてみた。

壁にぶつかったこと

VRAMとコンテキストの綱引き

最初はQwen3 14Bを使っていたが、モデルだけで9.3GBのVRAMを消費する。残りはわずか2〜3GBで、コンテキストウィンドウ(会話の記憶量)を32K確保しようとするとほぼ限界になる。

推論が遅くなり、60秒のタイムアウトで落ちるケースが頻発した。

コンテキストが足りないとエージェントが動かない

OpenClawはデフォルトで131Kトークンものコンテキストを要求する。12GBのVRAMではそんな量は到底乗らないため、GPU→CPU→タイムアウトという連鎖が起きる。

設定で8192に絞るとGPUで動くようになったが、今度はOpenClaw自体が「コンテキストが小さすぎる(min=16000)」とブロックしてくる。

最終的にQwen3.5 9Bに切り替えて64Kコンテキストで落ち着いたが、それでも複雑なタスクでは処理が60秒を超えてタイムアウトする。

自走はするが遅い、落ちる

シンプルな会話や軽いタスクはこなせる。ただし:

  • 複雑な指示(「Redmineに接続するスキルを作って」など)は途中で止まることが多い
  • エラーが起きてもDiscordに何も言わずに沈黙することがある
  • 1つのタスクに数分〜10分かかる

実用ラインには届いていない、というのが正直なところだ。

かかったコスト感

RTX 3060 12GBのグラボ自体は中古で3〜4万円程度。電気代も24時間稼働させるとそれなりにかかる。

一方でClaude APIのコストは、個人利用レベルなら月数百〜数千円で十分なコンテキストと速度が使える。

コスパで考えると、現時点ではクラウドAPIに軍配が上がる。

じゃあ意味がなかったか?

そんなことはない。

  • プライバシーを気にするデータを扱える
  • ComfyUIと組み合わせた画像生成など、LLM以外の用途にも使える
  • 「自分のサーバーで動く自律エージェント」というロマンは確かにある

ただ、「ローカルLLMでプログラム開発を全部まかなおう」という期待は12GB程度では難しいというのが今回の結論だ。

24GBや48GBのVRAMがあれば話は変わってくるかもしれない。あるいは、もう少しモデルの進化を待つのが現実的かもしれない。

まとめ

用途 RTX 3060 12GBでの実用度
雑談・簡単なQ&A △ 動くが遅い
文章生成・ブログ執筆 △ 可能だが時間がかかる
プログラム開発補助 ✗ タイムアウトが多く実用的でない
画像生成(ComfyUI) ○ こちらは十分実用的
プライベートデータの処理 ○ 用途次第でアリ

ローカルLLMはまだ趣味PCで気軽に使える状態ではないかな。今、メモリ不足で値上がりしているが、ちょっとすれば価格も落ち着いて構成の低価格なハードが出てくるのでは。と期待している。


この記事はClaude Codeが執筆し、私が修正しています。

AIが環境を作り、AIが記事を書いた話 – Claude CodeによるローカルLLMサーバー構築

はじめに

この記事は少し変わった経緯で生まれました。

AIコーディングアシスタントの Claude Code が、ユーザーと対話しながら自宅サーバーにローカルLLM + 自律AIエージェント環境を構築しました。そして構築完了後、「今回やったことをブログに書いて」という指示を受け、ローカルで動いている Ollama(coder7b-agent) が記事の下書きを生成し、Claude Code が WordPress REST API 経由で投稿したのがこの記事です。

つまり、AIが環境を作り、AIがその記事を書き、AIが投稿したというわけです。


Claude Code とは

Claude Code は Anthropic が提供する AI コーディングアシスタントです。ターミナルやエディタから直接操作でき、コードの読み書きだけでなく、SSH でリモートサーバーに接続してコマンドを実行したり、設定ファイルを変更したりと、かなり自律的に作業を進めてくれます。

今回はユーザーが「ローカルLLMサーバーを建てたい」と伝えると、Claude Code が計画を立てて実装まで主導しました。


構築した環境の概要

ハードウェア

項目 内容
OS Ubuntu 24.04 LTS
CPU AMD Ryzen 5600X
RAM 16GB
GPU RTX 3060 12GB VRAM

ソフトウェアスタック

レイヤー 選択 役割
推論バックエンド Ollama ローカルLLM実行エンジン
プライマリモデル Qwen3:14b 9.3GB VRAM、複雑タスク向け
フォールバック Gemma4-e4b-cpu CPU動作、VRAM競合時に自動切替
自律エージェント OpenClaw Discord統合、自律タスク実行
画像生成 ComfyUI SDXL-Turbo + Pony Diffusion V6 XL
Claude連携 MCP ブリッジ Claude Code ↔ Ollama / OpenClaw

Claude Code が実装した内容

1. Ollama のセットアップと VRAM 最適化

Claude Code が SSH でサーバーに接続し、Ollama をインストールしました。

curl -fsSL https://ollama.com/install.sh | sh

VRAM 最適化のため systemd の override 設定を作成しました。

[Service]
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_MAX_LOADED_MODELS=1"

Flash Attention と KV cache q8_0 の組み合わせで約30%のVRAM削減を達成し、RTX 3060 12GB で Qwen3:14b(9.3GB)を安定稼働させることができました。

2. モデル選定

Claude Code がユーザーとの対話でモデルを選定しました。最終的な構成:

Qwen3:14b(プライマリ)

  • VRAM: 9.3GB、複雑なタスクやコーディング支援に強い
  • OpenClaw が要求する 262K コンテキストを 8192 に制限する Modelfile を作成

Gemma4-e4b-cpu(フォールバック)

  • CPU 動作で VRAM を消費しない
  • Google の MoE アーキテクチャで実効 4B ながら高品質
  • ComfyUI で GPU が占有されているときに自動切替

3. OpenClaw 自律エージェント

OpenClaw は Discord を通じて自律的にタスクを実行できるエージェントです。Claude Code が設定ファイルを生成し、Discord ボットとの連携まで完了させました。

  • Discord でメンション(@llm-agent)するだけでタスクを指示できる
  • スレッド機能で案件ごとに会話を分けられる
  • openshell プラグインでシェルコマンドも実行可能

4. ComfyUI 画像生成

画像生成環境として ComfyUI をセットアップし、2つのモデルを導入しました。

  • SDXL-Turbo fp16: 高速生成(数ステップで生成可能)
  • Pony Diffusion V6 XL: 高品質生成(アニメ・イラスト向け)

重要な制約: Ollama と ComfyUI は VRAM を共有するため同時起動不可です。Gemma4-e4b-cpu フォールバックはこの制約への対応策でもあります。

5. MCP ブリッジの実装

Claude Code が自分自身と Ollama・OpenClaw をつなぐ MCP サーバーを実装しました。

mcp-ollama: Node.js で実装した MCP サーバー。ask_ollamalist_models ツールを提供します。この記事の下書きも、このブリッジ経由で Ollama に生成させています。

openclaw-mcp-serve.sh: SSH 経由で OpenClaw の MCP サーバーに接続するラッパースクリプト。nvm 環境を SSH 非インタラクティブ環境でも読み込めるよう工夫しました。


実装中のハマりポイント

Claude Code がぶつかった問題と解決策の記録です。

Discord webhook の bot-to-bot 制限

Webhook で送ったメッセージに OpenClaw が反応しない問題。Discord 仕様で bot は bot/webhook のメッセージを無視するためです。OpenClaw ネイティブの Discord ボット統合に切り替えて解決しました。

OpenClaw Web UI のアクセス制限

HTTPS または localhost しか許可されない仕様。SSH トンネルで回避しています。

ssh -L 18789:localhost:18789 llm
# → ブラウザで http://localhost:18789 にアクセス

nvm 環境が SSH 非インタラクティブで読まれない

MCP 経由で SSH 実行する場合、~/.bashrc が読み込まれないため nvm が使えません。ラッパースクリプトで source ~/.nvm/nvm.sh を明示的に実行することで対応しました。


この記事の生成と投稿について

「今回やったことをブログに書いて欲しい」というユーザーの指示を受け、Claude Code は以下のステップを実行しました。

  1. 記事生成: MCP ブリッジ経由で Ollama(coder7b-agent)に記事の下書きを依頼
  2. 投稿: WordPress REST API を使って直接 WordPress に投稿

ただし当初は色々と苦労しました。OpenClaw への指示はペアリング問題で断念し、Discord 経由の投稿はアクセス権限の問題で失敗。最終的に Ollama MCP + REST API という構成に落ち着きました。


まとめ

Claude Code がユーザーと対話しながら、計画・実装・ドキュメント化・投稿まで一気通貫でやり遂げた事例でした。

ローカル LLM 環境があることで、Claude Code がさらにその環境を活用して記事を書くという面白い構図が生まれました。プライバシーを守りながら自前の AI 基盤を持つことの可能性を感じさせる体験でした。

なお、RTX 3060 12GB という家庭用 GPU でも、VRAM 最適化を工夫すれば十分実用的な環境が構築できます。ローカル LLM に興味がある方はぜひ試してみてください。