128 GBのM3 MaxでOpenClaw 2026.9.7とOllama 0.35.0を実行したところ、OpenClaw自身のOllamaセットアップが推奨するモデルgemma4は、4つのエージェントタスクにわたる評価済み12回の実行すべてに合格しました。gpt-oss:20bは12回中11回に合格しましたが、失敗したツール呼び出しはgemma4のほぼ3倍でした。通常コード向けに選ばれるqwen3-coder:30bは、Ollamaのパーサーでツール呼び出しが繰り返し壊れたため、12回中2回に合格しました。各モデルを各タスクで、新しいワークスペースを使って3回ずつ実行し、スクリプトで結果を評価しました。OpenClaw自身が記録したツール呼び出し数とトークン数、およびOllamaのサーバーログを記録しました。測定日は2026年10月1日です。
OpenClaw自体の料金と、代わりにホスト型モデルを使う場合の料金についてはOpenClawの料金を、ローカルモデルをAPIフォールバック付きで実行する方法についてはOpenClawで複数のエージェントとモデルを使うをご覧ください。
実行内容
| マシン | Apple M3 Max、ユニファイドメモリ128 GB |
| OpenClaw | npmからの2026.9.7、Node 24.21.0、openclaw agent --local --json、実行ごとに1ターン |
| Ollama | v0.35.0リリースバイナリ、ネイティブAPI(/v1なし) |
| モデル | gemma4:latest — 7.5B、Q4_K_M、ディスク上6.6 GB;gpt-oss:20b — 20.9B、MXFP4、13.8 GB;qwen3-coder:30b — 30.5Bのmixture-of-experts、Q4_K_M、18.6 GB |
| コンテキスト | OpenClaw contextWindowは3モデルすべてで32,768。Ollamaはgemma4とgpt-ossを131,072、qwen3-coderを262,144でロード |
| ツール実行 | OpenClawのDockerサンドボックス、ワークスペースを読み書き可能でマウント |
| 実行回数 | 4タスク × 3反復 × 3モデル = 36回。各回、新しいワークスペースと新しいOpenClaw状態で実行 |
4つのタスク
| タスク | エージェントが行う必要があったこと | 合格条件 |
|---|---|---|
| 読み取り | 301行のサービスログを読み、唯一のERROR行にあるサービス名を答える | 返答に正しいサービス名が含まれる |
| 修正方法 | ユニットテストファイルを実行し、そのテスト対象モジュールのバグを修正して再実行する — テストには触れない | テストが0で終了し、テストファイルがバイト単位で同一 |
| カウント | 5つのCSVファイルのデータ行を数え、件数をcounts.jsonに書き込む | counts.jsonが期待されるオブジェクトと一致 |
| 2ファイルの修正 | 3つの失敗テストの背後に、2つのモジュールにまたがる独立した2つのバグがあります。テストに触れずに両方を修正してください | すべてのテストが0で終了し、テストがバイト単位で同一 |
結果
| モデル | タスク | 合格 | 中央値時間 | ツール呼び出し中央値 | 失敗したツール呼び出し(3回の実行) | 入力 / 出力トークン中央値 |
|---|---|---|---|---|---|---|
gemma4:latest | t1-read | 3/3 | 50.2秒 | 1 | 0 | 21,438 / 19 |
gemma4:latest | t2-fix | 3/3 | 47.5秒 | 4 | 0 | 13,387 / 866 |
gemma4:latest | t3-count | 3/3 | 37.9秒 | 7 | 1 | 13,073 / 513 |
gemma4:latest | t4-multi | 3/3 | 75.1秒 | 10 | 6 | 16,417 / 2,441 |
gpt-oss:20b | t1-read | 3/3 | 38.7秒 | 3 | 5 | 16,971 / 508 |
gpt-oss:20b | t2-fix | 3/3 | 54.2秒 | 7 | 6 | 12,409 / 1,193 |
gpt-oss:20b | t3-count | 2/3 | 76.5秒 | 10 | 5 | 13,247 / 1,713 |
gpt-oss:20b | t4-multi | 3/3 | 65.1秒 | 11 | 3 | 13,065 / 1,380 |
qwen3-coder:30b | t1-read | 0/3 | 25.1秒 | 0 | 0 | 8,915 / 38 |
qwen3-coder:30b | t2-fix | 0/3 | 34.8秒 | 3 | 0 | 9,435 / 163 |
qwen3-coder:30b | t3-count | 2/3 | 36.9秒 | 3 | 0 | 9,503 / 279 |
qwen3-coder:30b | t4-multi | 0/3 | 42.5秒 | 5 | 0 | 9,992 / 243 |
時間は、OpenClawの起動に約5〜7秒を含む、実行ごとの経過時間です。「入力トークン」はOpenClawが記録したキャッシュされていない入力です。キャッシュから再送信されたコンテキストはこれに加算され、下記のコストセクションで計上されます。失敗ツール呼び出しの列は、OpenClawが記録した失敗を数えます。qwen3-coderの失敗は呼び出しがOpenClawに到達する前に発生したため、ここでは0と表示され、詳細は下記で説明します。
数値が示すこと
- gemma4とgpt-oss:20bは、短いエージェントタスクにどちらも使用できます。24回中23回に合格し、複数のモジュールを読み、2つを編集してテストを再実行する必要がある2ファイル修正も含まれます。
- gemma4のほうがツールをきれいに使いました。読み取りタスクでは毎回正確に1回のツール呼び出しを行いました。gpt-ossは3回呼び出し、そのうち通常2回はファイルを読む前に失敗しました。12回の実行全体で、gpt-ossの失敗ツール呼び出しは19回、gemma4は7回でした。また、タスクあたりのアシスタントターン数はgpt-ossが平均9.1、gemma4が6.8でした。
- 唯一の失敗は、カウントタスクでのgpt-ossでした。13回のツール呼び出し後、形式不正のcounts.jsonを書き込み、返答なしでターンを終了しました。
- ここでは速度は差別化要因ではありません。全実行での中央値はgemma4が53秒、gpt-ossが54秒でした。最も遅い単一実行は、2ファイル修正におけるgemma4の133秒で、ツール呼び出しは17回でした。qwen3-coderの実行が短かったのは、早期に失敗したためにすぎません。
- これらのタスクでは、より大きなモデルによって精度が向上しませんでした。gpt-oss:20bはgemma4のほぼ3倍のパラメータ数を持ち、コード向けに構築されたqwen3-coder:30bは3モデル中で最低でした。
モデルあたり12回の実行は、これらのタスクで傾向を見るには十分ですが、モデル全般の順位付けには不十分です。長いタスク、より大きなコードベース、その他の量子化はテストしていません。
qwen3-coder:30bが失敗した理由
コーディングが原因ではありません。失敗した10回のうち:
- 5回はOllamaのパーサーで終了しました。qwen3-coderはツール呼び出しをXMLとして書き、引数にコードが含まれると
<parameter>要素を</function>で閉じました。Ollama 0.35.0のサーバーログには「qwen tool call parsing failed … XML syntax error … element <parameter> closed by </function>」と記録され、OpenClawは「Agent run failed」でターンを終了しました。 - 4回は呼び出しを一度も行いませんでした。返答で次のステップを示した後、裸の
</tool_call>をテキストとして出力し、Ollamaが呼び出しとして解析できるものはありませんでした。そこでターンが終了しました。これは、OpenClawのドキュメントが/v1URLに関連付けている症状ですが、ここではネイティブAPIで発生しました。 - 1回は誤答でした。CSVのヘッダー行をデータ行として数えました。
パーサーはOllamaのものなので、これはモデルへの判定ではなくOllama 0.35.0での結果です。OpenClawでqwen3-coderを実行する場合は、モデルを責める前にollama serveのログで「qwen tool call parsing failed」を確認し、Ollamaをアップグレードして再テストしてください。
重要だった設定
- ネイティブOllama URL。OpenClawのドキュメントでは、
/v1OpenAI互換URLは「ツール呼び出しを壊し、モデルが生のツール呼び出しJSONをプレーンテキストとして出力する可能性がある」と説明されています。実行では/v1なしのbaseUrlを、api: "ollama"とあわせて使用しました。 - 手書きのエントリでは
contextWindowを固定する。スモークテストでは、それを指定しない明示的なモデルエントリが200,000トークンのコンテキストになりました。OpenClaw独自のOllama設定ではローカルモデルに32,768が書き込まれ、今回の実行でもそれを使いました。 - Ollamaのコンテキストは別です。Ollama 0.35.0は、OpenClawの32,768に関係なく、gemma4とgpt-ossを131,072トークン、qwen3-coderを262,144(常駐45.3 GB)でロードしました。メモリを決めるのはOpenClawの予算ではなく、こちらです。
- シェルをサンドボックス化する。ローカルモデルが自分のマシンでシェルコマンドを実行することが、ここでの本当のリスクです。
sandbox.mode: "all"を使うと、execはワークスペースだけをマウントしたOpenClawのDockerイメージ内で実行されます。イメージはOpenClawのサンドボックスドキュメントにあるdocker buildコマンドで一度ビルドします。
// ~/.openclaw/openclaw.json — the runs used one model per config; the
// fallbacks line shows the pattern and was not part of the measured runs
{
models: { providers: { ollama: {
apiKey: "ollama-local",
baseUrl: "http://127.0.0.1:11434", // native Ollama URL — no /v1
api: "ollama",
timeoutSeconds: 600,
models: [
{ id: "gemma4:latest", name: "gemma4:latest", contextWindow: 32768, maxTokens: 8192,
params: { keep_alive: "30m" } },
{ id: "gpt-oss:20b", name: "gpt-oss:20b", contextWindow: 32768, maxTokens: 8192,
params: { keep_alive: "30m" } },
],
} } },
agents: { defaults: {
model: { primary: "ollama/gemma4:latest", fallbacks: ["ollama/gpt-oss:20b"] },
sandbox: { mode: "all", workspaceAccess: "rw" }, // shell runs in Docker
} },
tools: { exec: { mode: "full" } },
}ローカルでかかる費用
ローカルモデルでは、トークン単位の請求が時間、ディスク、電力に置き換わります。1回の実行について、OpenClawが記録したgemma4の値は、キャッシュされていない入力トークン約16,415、再送信されたキャッシュコンテキスト78,469トークン、出力1,142トークンでした。gpt-ossではそれぞれ13,761、88,688、1,192でした。概算として(モデル間でトークナイザーが異なるため)、同じ件数をClaude Haiku 4.5のKunavo料金(100万あたり入力$0.70、キャッシュ$0.07、出力$3.50)で計算すると、1回あたり約$0.021と$0.020になります。電力は測定していません。1回あたりの電気料金は、ワット数 × 秒数 ÷ 3,600,000 × 1 kWhあたりの価格です。
実用的なパターンは、ローカルモデルを主系にし、ローカルモデルが失敗したターンにホスト型モデルをフォールバックとして使うことです。OpenClawはエージェントごとにfallbacksのリストを受け取ります。KunavoキーはOllamaと並ぶOpenAI互換プロバイダーとして機能し、前払い残高からトークン単位で請求されます。Kunavoでは、OpenClawをそのエンドポイントに接続して実行した人はいません。今回の実行は完全にローカルでした。
よくある質問
OpenClawに最適なローカルモデルは?
測定した3つのモデルのうち、gemma4です。OpenClawが推奨するOllamaモデルでもあります。128 GBのM3 Maxで、OpenClaw 2026.9.7とOllama 0.35.0を実行したところ、gemma4(7.5B、Q4_K_M)は4つのタスクにわたる評価済み12回の実行すべてに合格しました。gpt-oss:20b(20.9B、MXFP4)は12回中11回に合格し、失敗したツール呼び出しはgemma4の7回に対して19回でした。qwen3-coder:30bは、Ollamaのパーサーでツール呼び出しが繰り返し壊れたため、12回中2回に合格しました。これは短いタスクでの3モデルの結果であり、すべてのローカルモデルの順位ではありません。
OpenClawはOllamaで完全にオフライン実行できますか?
モデル呼び出しについては可能です。プロバイダーをローカルのOllamaホストに向けたところ、これらの実行でのモデルリクエストはすべて127.0.0.1に送られました。/v1のOpenAI互換URLではなく、http://127.0.0.1:11434というネイティブURLを使ってください。OpenClawのOllamaドキュメントによると、/v1ではツール呼び出しが壊れ、モデルがツール呼び出しの生JSONをテキストとして出力することがあります。インターネットにアクセスするスキルやツールには引き続き接続が必要で、OpenClawのDockerサンドボックスイメージは一度ビルドする必要があります(自動では取得されません)。
ローカルのOpenClawモデルにはどの程度のメモリが必要ですか?
ディスク上では、gemma4が6.6 GB、gpt-oss:20bが13.8 GB、qwen3-coder:30bが18.6 GBです。ロード時にOllamaが報告した容量は、gpt-ossが13.7 GB、qwen3-coderが45.3 GBでした。Ollama 0.35.0がコンテキストを自動で決めたためです。OpenClawに指定した32,768トークンに関係なく、gemma4とgpt-ossでは131,072、qwen3-coderでは262,144でした。128 GBのMacならすべて収まりますが、16 GBまたは32 GBのマシンでは、より小さいコンテキストなしには収まりません。小容量のマシンではテストしていません。
APIと比べてローカルモデルは無料ですか?
Not free, just billed differently: you pay in time, disk and electricity instead of per token. Each run here used about 95,000–105,000 tokens counting OpenClaw's re-sent context — on a metered API at Claude Haiku 4.5 rates that would be roughly $0.021 a run, as rough arithmetic across different tokenizers. A local run took about 54 seconds; power draw was not measured, so the electricity side is a formula: watts × seconds ÷ 3,600,000 × your price per kWh.
qwen3-coderはOllamaを使うOpenClawでなぜ失敗しますか?
私たちの実行では、問題はコードではなく、ツール呼び出し形式でした。qwen3-coderはツール呼び出しをXMLとして書きます。Ollama 0.35.0では12回のうち5回が、Ollamaのサーブログに「qwen tool call parsing failed」と記録されて終了しました。XML構文エラーで、<parameter>要素が</function>で閉じられていました。その後OpenClawは「Agent run failed」で停止しました。さらに4回は、Ollamaが解析できる呼び出しを伴わず、裸の</tool_call>をテキストとして出力したため、何も実行されませんでした。モデルを責める前に、その警告がないかサーブログを確認し、新しいOllamaで再テストしてください。パーサーはOllamaのものであり、この結果は0.35.0に固有です。
OllamaモデルをOpenClawに手動追加するとき、なぜcontextWindowを設定するのですか?
明示的なモデルエントリでcontextWindowを指定しないと、スモークテストでは200,000トークンのコンテキストになりました。これはほとんどのローカルモデルが扱える範囲を大きく超えています。一方、OpenClaw独自のOllama設定ではローカルモデルに32,768が書き込まれます。contextWindow(およびmaxTokens)を固定すると、OpenClawのコンパクション予算を現実的に保てます。Ollama独自のnum_ctxは変更されません。ここではOllamaはモデルを131,072でロードしました。
2026年10月1日、Apple M3 Max(128 GB)で実行しました。使用したのはOpenClaw 2026.9.7(npm、Node 24.21.0)、Ollama v0.35.0(リリースバイナリ)、およびOllamaレジストリから取得してsha256で確認したgemma4:latest、gpt-oss:20b、qwen3-coder:30bです。36回の各実行では、新しいワークスペースと新しいOpenClaw状態を使い、execをOpenClawのDockerサンドボックス内で実行し、スクリプトで採点しました。ツール呼び出しとトークン数はOpenClaw自身のJSON出力に基づきます。タスクのフィクスチャ、採点スクリプト、アダプタースクリプトは、このページの検証資料とともに公開されています。未測定:消費電力、長いタスク、その他の量子化、より小規模なマシン。