Trên M3 Max 128 GB chạy OpenClaw 2026.9.7 với Ollama 0.35.0, gemma4 — mô hình được thiết lập Ollama riêng của OpenClaw đề xuất — vượt qua cả 12 lần chạy được chấm điểm trên bốn tác vụ tác nhân; gpt-oss:20b vượt qua 11/12 lần với số lệnh gọi công cụ thất bại gần gấp ba; còn qwen3-coder:30b, lựa chọn lập trình thường dùng, vượt qua 2/12 lần vì các lệnh gọi công cụ liên tục hỏng trong bộ phân tích cú pháp của Ollama. Chúng tôi chạy mỗi mô hình ba lần trên mỗi tác vụ trong một workspace mới, chấm điểm kết quả bằng tập lệnh, đồng thời ghi lại số lượng lệnh gọi công cụ và token do chính OpenClaw báo cáo cùng nhật ký máy chủ Ollama. Đo vào ngày 1 tháng 10 năm 2026.
Để biết chi phí của chính OpenClaw và chi phí của mô hình lưu trữ thay thế, xem giá OpenClaw; để chạy mô hình cục bộ với API dự phòng, xem nhiều tác nhân và mô hình trong OpenClaw.
Đã chạy những gì
| Máy | Apple M3 Max, bộ nhớ hợp nhất 128 GB |
| OpenClaw | 2026.9.7 từ npm, Node 24.21.0, openclaw agent --local --json, một lượt mỗi lần chạy |
| Ollama | Tệp nhị phân bản phát hành v0.35.0, API gốc (không có /v1) |
| Mô hình | gemma4:latest — 7.5B, Q4_K_M, 6.6 GB trên đĩa; gpt-oss:20b — 20.9B, MXFP4, 13.8 GB; qwen3-coder:30b — mixture-of-experts 30.5B, Q4_K_M, 18.6 GB |
| Ngữ cảnh | OpenClaw contextWindow 32.768 cho cả ba; Ollama tải gemma4 và gpt-oss ở 131.072, qwen3-coder ở 262.144 |
| Thực thi công cụ | Sandbox Docker của OpenClaw, workspace được gắn với quyền đọc-ghi |
| Lần chạy | 4 tác vụ × 3 lần lặp × 3 mô hình = 36, mỗi lần trong workspace mới với trạng thái OpenClaw mới |
Bốn tác vụ
| Tác vụ | Tác nhân phải làm gì | Đạt khi |
|---|---|---|
| Đọc | Đọc nhật ký dịch vụ 301 dòng và nêu tên dịch vụ trên dòng ERROR duy nhất | Câu trả lời chứa đúng tên dịch vụ |
| Cách khắc phục | Chạy một tệp kiểm thử đơn vị, sửa lỗi trong mô-đun mà tệp đó kiểm thử, rồi chạy lại — không chỉnh sửa các bài kiểm thử | Các bài kiểm thử thoát với mã 0 và tệp kiểm thử giống hệt từng byte |
| Đếm | Đếm các hàng dữ liệu trong năm tệp CSV và ghi số lượng vào counts.json | counts.json bằng đúng đối tượng dự kiến |
| Sửa hai tệp | Hai lỗi độc lập trong hai mô-đun khiến ba bài kiểm thử thất bại; sửa cả hai mà không chạm vào các bài kiểm thử | Tất cả bài kiểm thử thoát với mã 0 và các bài kiểm thử giống hệt từng byte |
Kết quả
| Mô hình | Tác vụ | Đạt | Thời gian trung vị | Số lệnh gọi công cụ trung vị | Lệnh gọi công cụ thất bại (3 lần chạy) | Token trung vị vào / ra |
|---|---|---|---|---|---|---|
gemma4:latest | t1-read | 3/3 | 50,2 giây | 1 | 0 | 21.438 / 19 |
gemma4:latest | t2-fix | 3/3 | 47,5 giây | 4 | 0 | 13.387 / 866 |
gemma4:latest | t3-count | 3/3 | 37,9 giây | 7 | 1 | 13.073 / 513 |
gemma4:latest | t4-multi | 3/3 | 75,1 giây | 10 | 6 | 16.417 / 2.441 |
gpt-oss:20b | t1-read | 3/3 | 38,7 giây | 3 | 5 | 16.971 / 508 |
gpt-oss:20b | t2-fix | 3/3 | 54,2 giây | 7 | 6 | 12.409 / 1.193 |
gpt-oss:20b | t3-count | 2/3 | 76,5 giây | 10 | 5 | 13.247 / 1.713 |
gpt-oss:20b | t4-multi | 3/3 | 65,1 giây | 11 | 3 | 13.065 / 1.380 |
qwen3-coder:30b | t1-read | 0/3 | 25,1 giây | 0 | 0 | 8.915 / 38 |
qwen3-coder:30b | t2-fix | 0/3 | 34,8 giây | 3 | 0 | 9.435 / 163 |
qwen3-coder:30b | t3-count | 2/3 | 36,9 giây | 3 | 0 | 9.503 / 279 |
qwen3-coder:30b | t4-multi | 0/3 | 42,5 giây | 5 | 0 | 9.992 / 243 |
Thời gian là thời gian thực theo đồng hồ cho mỗi lần chạy, bao gồm khoảng năm đến bảy giây khởi động OpenClaw. “Token đầu vào” là đầu vào chưa được lưu trong bộ nhớ đệm theo ghi nhận của OpenClaw; ngữ cảnh được gửi lại từ bộ nhớ đệm nằm ngoài con số đó và được tính trong phần chi phí bên dưới. Cột lệnh gọi công cụ thất bại đếm các lỗi OpenClaw ghi nhận; các lỗi của qwen3-coder xảy ra trước khi lệnh gọi đến OpenClaw, nên cột này hiển thị bằng không và được giải thích bên dưới.
Các con số cho thấy điều gì
- gemma4 và gpt-oss:20b đều dùng được cho các tác vụ tác nhân ngắn. 23 trong 24 lần chạy của chúng đạt, bao gồm cả lần sửa hai tệp, vốn cần đọc một số mô-đun, chỉnh sửa hai mô-đun và chạy lại bài kiểm thử.
- gemma4 sử dụng công cụ sạch sẽ hơn. Trong tác vụ đọc, nó thực hiện chính xác một lệnh gọi công cụ mỗi lần; gpt-oss thực hiện ba lệnh, trong đó thường có hai lệnh thất bại trước khi đọc tệp. Trên tổng số mười hai lần chạy, gpt-oss có 19 lệnh gọi công cụ thất bại so với 7 của gemma4, và trung bình có 9,1 lượt trả lời của trợ lý mỗi tác vụ so với 6,8 của gemma4.
- Lần thất bại duy nhất là gpt-oss trong tác vụ đếm: sau mười ba lệnh gọi công cụ, nó ghi một counts.json sai định dạng rồi kết thúc lượt mà không trả lời.
- Tốc độ không phải yếu tố phân biệt ở đây. Trung vị 53 giây cho gemma4 và 54 giây cho gpt-oss trên mọi lần chạy; lần chạy đơn lẻ chậm nhất là 133 giây của gemma4 trong lần sửa hai tệp, với mười bảy lệnh gọi công cụ. Các lần chạy của qwen3-coder ngắn hơn chỉ vì chúng thất bại sớm.
- Các mô hình lớn hơn không mang lại độ chính xác cao hơn trong các tác vụ này. gpt-oss:20b có số tham số gần gấp ba gemma4, còn qwen3-coder:30b, được xây dựng cho mã, đạt điểm thấp nhất trong ba mô hình.
Mười hai lần chạy mỗi mô hình đủ để thấy một xu hướng trên các tác vụ này nhưng chưa đủ để xếp hạng mô hình nói chung. Chưa kiểm thử các tác vụ dài, cơ sở mã lớn hơn và các lượng tử hóa khác.
Vì sao qwen3-coder:30b thất bại
Không phải do việc lập trình. Trong mười lần chạy thất bại của nó:
- Năm lần kết thúc trong bộ phân tích cú pháp của Ollama. qwen3-coder viết lệnh gọi công cụ dưới dạng XML, và khi một đối số chứa mã, nó đóng phần tử
<parameter>bằng</function>. Nhật ký máy chủ của Ollama 0.35.0 ghi nhận "qwen tool call parsing failed … XML syntax error … element <parameter> closed by </function>", và OpenClaw kết thúc lượt với "Agent run failed". - Bốn lần không thực hiện được lệnh gọi. Câu trả lời thông báo bước tiếp theo rồi in một
</tool_call>đơn độc dưới dạng văn bản, không có gì để Ollama phân tích thành lệnh gọi; lượt kết thúc tại đó. Đây là triệu chứng mà tài liệu OpenClaw liên hệ với URL/v1— ở đây nó xảy ra trên API gốc. - Một lần cho câu trả lời sai: nó đếm các dòng tiêu đề CSV là hàng dữ liệu.
Bộ phân tích cú pháp thuộc về Ollama, vì vậy đây là kết quả của Ollama 0.35.0, không phải phán quyết về mô hình. Nếu chạy qwen3-coder với OpenClaw, hãy theo dõi nhật ký của ollama serve để tìm "qwen tool call parsing failed" trước khi đổ lỗi cho mô hình, rồi kiểm thử lại sau khi nâng cấp Ollama.
Thiết lập có ý nghĩa
- URL Ollama gốc. Tài liệu OpenClaw nói URL tương thích OpenAI
/v1"làm hỏng việc gọi công cụ và mô hình có thể phát ra JSON gọi công cụ thô dưới dạng văn bản thuần"; các lần chạy dùngbaseUrlkhông có/v1, cùng vớiapi: "ollama". - Ghim
contextWindowtrong các mục cấu hình viết thủ công. Trong một lần kiểm tra nhanh, một mục cấu hình mô hình được khai báo tường minh nhưng không có tham số này được phân giải thành ngữ cảnh 200.000 token; thiết lập Ollama riêng của OpenClaw ghi 32.768 cho các mô hình cục bộ, là giá trị được dùng trong các lần chạy này. - Ngữ cảnh của Ollama là riêng biệt. Ollama 0.35.0 tải gemma4 và gpt-oss ở 131.072 token, qwen3-coder ở 262.144 — 45.3 GB bộ nhớ thường trú — bất kể 32.768 của OpenClaw; chính điều đó, không phải ngân sách của OpenClaw, quyết định bộ nhớ.
- Sandbox shell. Mô hình cục bộ chạy lệnh shell trên máy của bạn mới là rủi ro thực sự ở đây. Với
sandbox.mode: "all", exec chạy trong hình ảnh Docker của OpenClaw và chỉ workspace được gắn vào; hình ảnh được xây dựng một lần bằng lệnhdocker buildtrong tài liệu sandbox của OpenClaw.
// ~/.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" } },
}Chi phí cục bộ
Mô hình cục bộ thay hóa đơn theo token bằng thời gian, dung lượng đĩa và điện năng. Mỗi lần chạy, OpenClaw ghi nhận khoảng 16.415 token đầu vào chưa được lưu trong bộ nhớ đệm, 78.469 token ngữ cảnh được gửi lại từ bộ nhớ đệm và 1.142 token đầu ra cho gemma4, cùng 13.761, 88.688 và 1.192 cho gpt-oss. Tính gần đúng — bộ tokenizer khác nhau giữa các mô hình — cùng số lượng đó theo mức giá Kunavo của Claude Haiku 4.5 ($0,70 đầu vào, $0,07 từ bộ nhớ đệm, $3,50 đầu ra trên mỗi triệu) tương đương khoảng $0,021 và $0,020 mỗi lần chạy. Không đo công suất; điện năng mỗi lần chạy là watt × giây ÷ 3.600.000 × giá mỗi kWh của bạn.
Mô hình thực tế là dùng mô hình cục bộ làm chính, với mô hình lưu trữ làm dự phòng cho những lượt mà mô hình cục bộ thất bại. OpenClaw nhận danh sách fallbacks cho mỗi tác nhân; khóa Kunavo hoạt động như nhà cung cấp tương thích OpenAI bên cạnh Ollama, tính phí theo token từ số dư trả trước. Chưa có ai tại Kunavo chạy OpenClaw với endpoint của họ — các lần chạy này hoàn toàn cục bộ.
Câu hỏi thường gặp
Mô hình cục bộ tốt nhất cho OpenClaw là gì?
Trong ba mô hình chúng tôi đo, gemma4 — mô hình Ollama do OpenClaw tự đề xuất — là lựa chọn tốt nhất. Trên M3 Max với 128 GB, chạy OpenClaw 2026.9.7 và Ollama 0.35.0, gemma4 (7.5B, Q4_K_M) vượt qua cả 12 lần chạy được chấm điểm trên bốn tác vụ; gpt-oss:20b (20.9B, MXFP4) vượt qua 11/12 lần với 19 lệnh gọi công cụ thất bại so với 7 của gemma4; qwen3-coder:30b chỉ vượt qua 2/12 lần vì các lệnh gọi công cụ liên tục hỏng trong bộ phân tích cú pháp của Ollama. Đây là kết quả của ba mô hình trên các tác vụ ngắn, không phải bảng xếp hạng mọi mô hình cục bộ.
OpenClaw có thể chạy hoàn toàn ngoại tuyến với Ollama không?
Có, đối với các lệnh gọi mô hình: khi nhà cung cấp trỏ đến máy chủ Ollama cục bộ, mọi yêu cầu mô hình trong các lần chạy này đều đi đến 127.0.0.1. Hãy dùng URL gốc, http://127.0.0.1:11434, không dùng URL tương thích OpenAI /v1 — tài liệu Ollama của OpenClaw nói rằng /v1 làm hỏng việc gọi công cụ và có thể khiến mô hình in JSON gọi công cụ thô dưới dạng văn bản. Các kỹ năng hoặc công cụ truy cập Internet vẫn cần Internet, và phải xây dựng hình ảnh sandbox Docker của OpenClaw một lần (hình ảnh không được tự động tải xuống).
Mô hình OpenClaw cục bộ cần bao nhiêu bộ nhớ?
Trên đĩa, gemma4 chiếm 6.6 GB, gpt-oss:20b 13.8 GB và qwen3-coder:30b 18.6 GB. Khi được tải, Ollama báo cáo gpt-oss dùng 13.7 GB và qwen3-coder dùng 45.3 GB, vì Ollama 0.35.0 tự xác định kích thước ngữ cảnh — 131.072 token cho gemma4 và gpt-oss, 262.144 cho qwen3-coder — bất kể OpenClaw được đặt là 32.768. Trên máy Mac 128 GB, tất cả đều vừa; trên máy 16 hoặc 32 GB thì không, nếu không dùng ngữ cảnh nhỏ hơn. Chưa kiểm thử trên máy nhỏ hơn.
Mô hình cục bộ có miễn phí khi so với API không?
Không miễn phí, chỉ là tính phí theo cách khác: bạn trả bằng thời gian, dung lượng đĩa và điện năng thay vì theo token. Mỗi lần chạy ở đây dùng khoảng 95.000–105.000 token, tính cả ngữ cảnh mà OpenClaw gửi lại — trên một API tính phí theo token, với mức giá của Claude Haiku 4.5, con số đó vào khoảng $0,021 mỗi lần chạy; đây chỉ là phép tính gần đúng vì các mô hình dùng bộ tokenizer khác nhau. Một lần chạy cục bộ mất khoảng 54 giây; công suất điện không được đo, nên chi phí điện được tính bằng công thức: watt × giây ÷ 3.600.000 × giá mỗi kWh của bạn.
Vì sao qwen3-coder thất bại trong OpenClaw với Ollama?
Trong các lần chạy của chúng tôi, vấn đề là định dạng gọi công cụ, không phải mã. qwen3-coder viết lệnh gọi công cụ dưới dạng XML, và trên Ollama 0.35.0, năm trong số mười hai lần chạy kết thúc với nhật ký máy chủ Ollama báo cáo "qwen tool call parsing failed" — lỗi cú pháp XML, một phần tử <parameter> được đóng bằng </function> — sau đó OpenClaw dừng với "Agent run failed". Bốn lần khác in </tool_call> đơn độc dưới dạng văn bản mà Ollama không thể phân tích thành lệnh gọi, nên không có gì được chạy. Hãy kiểm tra nhật ký máy chủ để tìm cảnh báo đó trước khi đổ lỗi cho mô hình, và kiểm thử lại trên Ollama mới hơn: bộ phân tích cú pháp thuộc về Ollama, và kết quả này chỉ áp dụng cho 0.35.0.
Vì sao phải đặt contextWindow khi thêm thủ công các mô hình Ollama vào OpenClaw?
Vì một mục cấu hình mô hình được khai báo tường minh nhưng không có tham số này đã được phân giải thành ngữ cảnh 200.000 token trong lần kiểm tra nhanh của chúng tôi — vượt xa khả năng xử lý của hầu hết mô hình cục bộ — trong khi thiết lập Ollama riêng của OpenClaw ghi 32.768 cho các mô hình cục bộ. Ghim contextWindow (và maxTokens) giúp ngân sách nén của OpenClaw thực tế hơn. Nó không thay đổi num_ctx của chính Ollama: tại đây Ollama vẫn tải các mô hình ở mức 131.072.
Chạy ngày 1 tháng 10 năm 2026 trên Apple M3 Max (128 GB): OpenClaw 2026.9.7 (npm, Node 24.21.0), Ollama v0.35.0 (tệp nhị phân bản phát hành), gemma4:latest, gpt-oss:20b và qwen3-coder:30b được tải từ registry của Ollama và kiểm tra bằng sha256. Mỗi lần trong tổng số 36 lần chạy dùng workspace mới và trạng thái OpenClaw mới, exec trong sandbox Docker của OpenClaw và bộ chấm điểm bằng tập lệnh; các lệnh gọi công cụ và số lượng token là đầu ra JSON của chính OpenClaw. Các tài nguyên thiết lập kiểm thử cho tác vụ, bộ chấm điểm và tập lệnh adapter được công bố cùng bằng chứng của trang này. Không đo: công suất tiêu thụ điện, tác vụ dài, các dạng lượng tử hóa khác hoặc máy nhỏ hơn.