128GB M3 Max에서 OpenClaw 2026.9.7 및 Ollama 0.35.0을 실행한 결과, OpenClaw 자체의 Ollama 설정이 권장하는 모델인 gemma4는 네 가지 에이전트 작업에 걸친 12개 평가 실행을 모두 통과했습니다. gpt-oss:20b는 12개 중 11개를 통과했지만 실패한 도구 호출은 거의 세 배 많았고, 일반적으로 코딩용으로 선택되는 qwen3-coder:30b는 도구 호출이 Ollama 파서에서 계속 실패하여 12개 중 2개만 통과했습니다. 각 모델을 새 작업 공간에서 각 작업마다 세 번 실행하고, 스크립트로 결과를 평가했으며, OpenClaw 자체의 도구 및 토큰 수와 Ollama 서버 로그를 기록했습니다. 측정일: 2026년 10월 1일.
OpenClaw 자체의 비용과 호스팅 모델을 대신 사용할 때의 비용은 OpenClaw 가격을 참고하세요. 로컬 모델과 API 폴백을 함께 실행하는 방법은 OpenClaw에서 여러 에이전트와 모델 사용하기를 참고하세요.
실행 내용
| 머신 | Apple M3 Max, 통합 메모리 128GB |
| 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.6GB; gpt-oss:20b — 20.9B, MXFP4, 13.8GB; qwen3-coder:30b — 30.5B 혼합 전문가 모델, Q4_K_M, 18.6GB |
| 컨텍스트 | OpenClaw contextWindow은 세 모델 모두 32,768로 설정되었고, Ollama는 gemma4와 gpt-oss를 131,072로, qwen3-coder를 262,144로 로드했습니다 |
| 도구 실행 | OpenClaw의 Docker 샌드박스, 읽기-쓰기 방식으로 마운트된 작업 공간 |
| 실행 횟수 | 작업 4개 × 반복 3회 × 모델 3개 = 36회. 각 실행은 새 작업 공간과 새 OpenClaw 상태에서 진행 |
네 가지 작업
| 작업 | 에이전트가 해야 했던 일 | 통과 조건 |
|---|---|---|
| 읽기 | 301줄의 서비스 로그를 읽고 유일한 ERROR 줄에 있는 서비스 이름을 말하세요 | 응답에 올바른 서비스 이름이 포함됨 |
| 해결 방법 | 단위 테스트 파일을 실행하고, 테스트하는 모듈의 버그를 수정한 뒤 다시 실행하세요 — 테스트는 건드리지 마세요 | 테스트가 0으로 종료되고 테스트 파일이 바이트 단위로 동일함 |
| 개수 세기 | 5개의 CSV 파일에서 데이터 행 수를 세고 그 수를 counts.json에 기록하세요 | counts.json이 예상 객체와 같음 |
| 두 파일 수정 | 세 개의 실패한 테스트 뒤에 두 모듈에 서로 독립적인 버그가 두 개 있습니다. 테스트를 건드리지 않고 두 버그를 모두 수정하세요. | 모든 테스트가 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회가 통과했으며, 여러 모듈을 읽고 두 모듈을 편집한 뒤 테스트를 다시 실행해야 하는 두 파일 수정 작업도 포함됩니다.
- 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로 작성하며, 인수에 코드가 들어 있을 때
<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토큰으로 로드했으며, qwen3-coder의 상주 메모리는 45.3GB였습니다. 메모리 사용량을 결정하는 것은 OpenClaw의 예산이 아니라 Ollama의 컨텍스트 크기입니다.
- 셸을 샌드박스에 넣으세요. 로컬 모델이 컴퓨터에서 셸 명령을 실행하는 것이 여기서 실제 위험입니다.
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" } },
}로컬 비용
로컬 모델은 토큰당 청구서를 시간, 디스크 및 전력 비용으로 바꿉니다. 실행당 OpenClaw은 gemma4에 대해 캐시되지 않은 입력 토큰 약 16,415, 다시 전송된 캐시 컨텍스트 토큰 78,469, 출력 토큰 1,142를 기록했고, gpt-oss에 대해서는 각각 13,761, 88,688, 1,192를 기록했습니다. 대략 계산하면 모델마다 토크나이저가 다르지만, 동일한 수치를 Claude Haiku 4.5의 Kunavo 요금(백만 토큰당 입력 $0.70, 캐시 $0.07, 출력 $3.50)에 적용할 때 실행당 약 $0.021 및 $0.020입니다. 전력은 측정하지 않았습니다. 실행당 전력 비용은 와트 × 초 ÷ 3,600,000 × kWh당 가격입니다.
실용적인 패턴은 로컬 모델을 기본으로 사용하고, 로컬 모델이 실패한 턴에는 호스팅 모델을 폴백으로 사용하는 것입니다. OpenClaw은 에이전트당 fallbacks 목록을 지원합니다. Kunavo 키는 Ollama와 함께 OpenAI 호환 프로바이더로 사용할 수 있으며, 선불 잔액에서 토큰 단위로 청구됩니다. Kunavo에서는 OpenClaw을 해당 엔드포인트에 연결해 실행한 사람이 없습니다. 이번 실행은 전부 로컬에서 진행되었습니다.
자주 묻는 질문
OpenClaw에 가장 적합한 로컬 모델은 무엇인가요?
측정한 세 모델 중에서는 OpenClaw 자체가 권장하는 Ollama 모델인 gemma4입니다. 128GB 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개를 통과했고, 실패한 도구 호출은 gemma4의 7회보다 많은 19회였습니다. qwen3-coder:30b는 도구 호출이 Ollama 파서에서 계속 실패하여 12개 중 2개만 통과했습니다. 이는 짧은 작업에 대한 세 모델의 결과이며, 모든 로컬 모델의 순위가 아닙니다.
OpenClaw을 Ollama와 함께 완전히 오프라인으로 실행할 수 있나요?
모델 호출은 가능합니다. 로컬 Ollama 호스트를 가리키도록 프로바이더를 설정하면 이 실행에서 모든 모델 요청은 127.0.0.1로 전송되었습니다. /v1 OpenAI 호환 URL이 아니라 기본 URL인 http://127.0.0.1:11434를 사용하세요. OpenClaw의 Ollama 문서에 따르면 /v1은 도구 호출을 깨뜨리고 모델이 원시 도구 호출 JSON을 텍스트로 출력하게 만들 수 있습니다. 인터넷에 연결하는 스킬이나 도구에는 여전히 인터넷이 필요하며, OpenClaw의 Docker 샌드박스 이미지는 한 번 직접 빌드해야 합니다(자동으로 가져오지 않습니다).
로컬 OpenClaw 모델에는 메모리가 얼마나 필요한가요?
디스크에서 gemma4는 6.6GB, gpt-oss:20b는 13.8GB, qwen3-coder:30b는 18.6GB입니다. 로드 후 Ollama는 gpt-oss에 13.7GB, qwen3-coder에 45.3GB를 보고했습니다. Ollama 0.35.0이 OpenClaw에서 지정한 32,768과 관계없이 컨텍스트 자체를 gemma4와 gpt-oss에는 131,072토큰, qwen3-coder에는 262,144토큰으로 설정했기 때문입니다. 128GB Mac에서는 모두 적재할 수 있지만, 16GB 또는 32GB 컴퓨터에서는 더 작은 컨텍스트 없이는 불가능합니다. 더 작은 컴퓨터에서는 테스트하지 않았습니다.
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.
OpenClaw에서 Ollama와 함께 qwen3-coder가 실패하는 이유는 무엇인가요?
실행 결과 원인은 코드가 아니라 도구 호출 형식이었습니다. qwen3-coder는 도구 호출을 XML로 작성하며, Ollama 0.35.0에서는 12회 중 5회가 Ollama의 서버 로그에 "qwen tool call parsing failed"가 기록되며 종료되었습니다. XML 구문 오류로, <parameter> 요소가 </function>으로 닫힌 경우였습니다. 그 후 OpenClaw는 "Agent run failed"로 중지되었습니다. 추가로 네 번의 실행에서는 단독 </tool_call>을 텍스트로 출력했으며, Ollama가 호출로 파싱할 수 있는 내용이 없어 아무것도 실행되지 않았습니다. 모델을 탓하기 전에 서버 로그에서 이 경고를 확인하고 더 새로운 버전의 Ollama에서 다시 테스트하세요. 파서는 Ollama의 것이며 이 결과는 0.35.0에 한정됩니다.
OpenClaw에 Ollama 모델을 수동으로 추가할 때 contextWindow를 설정하는 이유는 무엇인가요?
명시적인 모델 항목에 contextWindow가 없으면 스모크 테스트에서 200,000토큰 컨텍스트로 확인되었습니다. 이는 대부분의 로컬 모델이 처리할 수 있는 범위를 훨씬 넘습니다. 반면 OpenClaw 자체의 Ollama 설정은 로컬 모델에 32,768을 지정합니다. contextWindow(및 maxTokens)를 고정하면 OpenClaw의 압축 예산을 현실적으로 유지할 수 있습니다. Ollama 자체의 num_ctx는 변경되지 않습니다. 여기서도 Ollama는 모델을 131,072로 로드했습니다.
2026년 10월 1일 Apple M3 Max(128GB)에서 실행: 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 출력입니다. 작업 픽스처, 평가기 및 어댑터 스크립트는 이 페이지의 증거 자료와 함께 공개되어 있습니다. 측정하지 않은 항목: 전력 소비, 긴 작업, 다른 양자화 및 더 작은 컴퓨터.