在執行 OpenClaw 2026.9.7 與 Ollama 0.35.0 的 128 GB M3 Max 上,OpenClaw 自己的 Ollama 設定所建議的模型 gemma4,在四項代理程式任務的全部 12 次評分執行中均通過;gpt-oss:20b 通過 12 次中的 11 次,但失敗的工具呼叫次數幾乎是 gemma4 的三倍;而通常作為程式設計首選的 qwen3-coder:30b 只通過 12 次中的 2 次,因為其工具呼叫持續在 Ollama 的解析器中失敗。 我們在全新的工作區中,對每個模型的每項任務各執行三次,以腳本評分結果,並記錄 OpenClaw 自己的工具與 token 計數,以及 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,每次執行一個回合 |
| 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 混合專家模型、Q4_K_M、18.6 GB |
| 上下文 | OpenClaw 對三者皆為 contextWindow 32,768;Ollama 以 131,072 載入 gemma4 和 gpt-oss,以 262,144 載入 qwen3-coder |
| 工具執行 | OpenClaw 的 Docker 沙箱,工作區以讀寫模式掛載 |
| 執行次數 | 4 項任務 × 3 次重複 × 3 個模型 = 36 次;每次都在全新的工作區並使用全新的 OpenClaw 狀態 |
四項任務
| 工作 | 代理程式必須完成的事項 | 通過條件 |
|---|---|---|
| 讀取 | 讀取一份 301 行的服務日誌,並找出唯一一行 ERROR 所代表的服務 | 回覆包含正確的服務名稱 |
| 修正方法 | 執行一個單元測試檔案,修正該檔案測試的模組中的錯誤,然後重新執行——不要修改測試 | 測試以 0 結束,且測試檔案逐位元組完全相同 |
| 計數 | 計算五個 CSV 檔案中的資料列數,並將計數寫入 counts.json | counts.json 等於預期物件 |
| 兩檔案修正 | 兩個模組中有兩個彼此獨立的錯誤,導致三項測試失敗;修正兩者,不要修改測試 | 所有測試皆以 0 結束,且測試檔案逐位元組完全相同 |
結果
| 模型 | 工作 | 通過 | 中位數時間 | 中位數工具呼叫次數 | 失敗的工具呼叫(3 次執行) | 輸入/輸出 token 中位數 |
|---|---|---|---|---|---|---|
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 啟動時間。「輸入 token」是 OpenClaw 記錄的未快取輸入;從快取重新傳送的上下文另計,並計入下方的費用區段。失敗工具呼叫欄位計算的是 OpenClaw 記錄的失敗;qwen3-coder 的失敗發生在呼叫抵達 OpenClaw 之前,因此該欄顯示為零,詳情如下。
數據說明了什麼
- gemma4 和 gpt-oss:20b 都適合短時間的代理程式任務。 24 次執行中有 23 次通過,包括需要讀取數個模組、編輯其中兩個模組並重新執行測試的兩檔案修正。
- gemma4 更穩定地使用工具。 在讀取任務中,它每次都恰好進行一次工具呼叫;gpt-oss 進行三次,其中兩次通常在讀取檔案前就失敗。在全部 12 次執行中,gpt-oss 有 19 次失敗的工具呼叫,而 gemma4 有 7 次;gpt-oss 每項任務平均有 9.1 次助理回合,gemma4 則為 6.8 次。
- 唯一一次失敗是 gpt-oss 在計數任務中失敗:它進行 13 次工具呼叫後寫入格式錯誤的 counts.json,並在沒有回覆的情況下結束回合。
- 速度在此並非區別因素。 所有執行中,gemma4 的中位數為 53 秒,gpt-oss 為 54 秒;最慢的一次是 gemma4 在兩檔案修正中的 133 秒,進行了 17 次工具呼叫。qwen3-coder 的執行時間較短,只是因為它很早就失敗。
- 較大的模型在這些任務中並未帶來更高的準確度。gpt-oss:20b 的參數數量幾乎是 gemma4 的三倍,而為程式碼打造的 qwen3-coder:30b 三者得分最低。
每個模型 12 次執行足以看出這些任務上的模式,但不足以普遍排名模型。未測試長時間任務、更大的程式碼庫及其他量化方式。
qwen3-coder:30b 為何失敗
不是因為程式設計。其 10 次失敗執行中:
- 5 次在 Ollama 的解析器中結束。 qwen3-coder 以 XML 撰寫工具呼叫;當引數包含程式碼時,它以
</function>關閉了<parameter>元素。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 個 token 的上下文;OpenClaw 自己的 Ollama 設定會為本機模型寫入 32,768,本次執行即使用此值。 - Ollama 的上下文是獨立的。 Ollama 0.35.0 以 131,072 個 token 載入 gemma4 和 gpt-oss,以 262,144 個 token 載入 qwen3-coder——常駐記憶體為 45.3 GB——不受 OpenClaw 的 32,768 影響;決定記憶體的是這項設定,而不是 OpenClaw 的預算。
- 將 shell 放入沙箱。 在你的機器上執行 shell 命令的本機模型,才是這裡真正的風險。使用
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" } },
}本機模型的成本
本機模型以時間、磁碟空間和電力,替代按 token 計費。每次執行中,OpenClaw 記錄 gemma4 約有 16,415 個未快取輸入 token、78,469 個重新傳送的快取上下文 token,以及 1,142 個輸出 token;gpt-oss 則為 13,761、88,688 和 1,192。粗略計算——不同模型的 tokenizer 不同——以 Claude Haiku 4.5 的 Kunavo 費率(每百萬 token 的輸入 $0.70、快取 $0.07、輸出 $3.50)計算,同樣的數量每次約為 $0.021 和 $0.020。未測量電力;每次執行的電費為瓦特 × 秒 ÷ 3,600,000 × 你的每 kWh 價格。
實際可行的模式是以本機模型作為主要模型,並為本機模型失敗的回合提供託管模型備援。OpenClaw 為每個代理程式接受一個 fallbacks 清單;Kunavo 金鑰可作為 Ollama 旁的 OpenAI 相容提供者,從預付餘額按 token 計費。Kunavo 沒有人使用 OpenClaw 對其端點執行過測試——這些執行完全在本機完成。
常見問題
OpenClaw 最適合使用哪個本機模型?
在我們測試的三個模型中,gemma4 表現最好——它也是 OpenClaw 自己建議的 Ollama 模型。在配備 128 GB 記憶體的 M3 Max 上,執行 OpenClaw 2026.9.7 與 Ollama 0.35.0 時,gemma4(7.5B、Q4_K_M)在四項任務的 12 次評分執行中全部通過;gpt-oss:20b(20.9B、MXFP4)通過 12 次中的 11 次,工具呼叫失敗 19 次,而 gemma4 為 7 次;qwen3-coder:30b 只通過 12 次中的 2 次,因為它的工具呼叫在 Ollama 剖析器中持續失敗。這是短任務上的三模型結果,不是對所有本機模型的排名。
OpenClaw 可以搭配 Ollama 完全離線執行嗎?
就模型呼叫而言可以:將供應商指向本機 Ollama 主機後,這些執行中的每個模型請求都傳送至 127.0.0.1。請使用原生 URL http://127.0.0.1:11434,而不是 /v1 OpenAI 相容 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 自行設定了上下文大小——gemma4 和 gpt-oss 為 131,072 個 token,qwen3-coder 為 262,144 個 token——不受告知 OpenClaw 的 32,768 個 token 影響。在 128 GB Mac 上,這些都能容納;在 16 或 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 次將單獨的 </tool_call> 以文字輸出,沒有任何 Ollama 能解析的呼叫,因此沒有執行任何操作。在責怪模型之前,先檢查服務日誌是否有該警告,並在較新的 Ollama 上重新測試:解析器屬於 Ollama,這項結果僅適用於 0.35.0。
手動將 Ollama 模型加入 OpenClaw 時,為什麼要設定 contextWindow?
因為在我們的冒煙測試中,未設定此值的明確模型項目解析為 200,000 個 token 的上下文——遠超過多數本機模型能處理的範圍;而 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 registry 拉取並以 sha256 驗證的 gemma4:latest、gpt-oss:20b 和 qwen3-coder:30b。36 次執行中的每一次都使用全新的工作區與全新的 OpenClaw 狀態,在 OpenClaw 的 Docker 沙箱中執行 exec,並使用腳本評分器;工具呼叫與 token 計數來自 OpenClaw 自己的 JSON 輸出。任務測試資料、評分器及介面卡腳本,均隨本頁的證據一同發布。未測量項目:耗電功率、長時間任務、其他量化方式或較小的機器。