~/blog/nemoclaw-local-inference-ollama

NemoClaw · part 3

[AI Agent] NemoClaw 不靠雲端:把 Nemotron 換成本地 Ollama 模型

2026-03-24更新於 2026-04-073 分鐘閱讀#nemoclaw#openclaw#openshell#ollamaEnglish
cat --toc

TL;DR

NemoClaw 的推理後端是 OpenAI-compatible,可以在每個 sandbox 的 ~/.nemoclaw/sandboxes/<name>/config.yaml 裡設定。換成本地 Ollama endpoint(http://localhost:11434/v1)需要改三個欄位:endpoint URL、model name、api_key(設成 "ollama")。OpenShell 的 filesystem 和工具政策跟推理後端無關——不管跑哪個模型都照樣執行。

白話版:為什麼要在自己電腦跑 AI?

現在大部分人用 AI 的方式是打開瀏覽器、連上 ChatGPT 或 Claude 的網站。你打字,文字傳到遠端伺服器,AI 處理完再傳回來。這叫「雲端推理」——方便,但你的每一句話都離開了你的電腦。

還有另一種方式:把 AI 模型下載到自己的機器上跑。這叫「本地推理」。Ollama 是目前最簡單的工具之一——一行指令就能在你的電腦上跑各種開源 AI 模型,不需要連網、不需要付月費、對話內容完全不離開你的硬碟。

這篇文章講的是怎麼把 NemoClaw(NVIDIA 的 AI agent 框架)從雲端模式切換成本地模式。原本它預設用 NVIDIA 自家的雲端 API,免費試用 30 天。過期之後呢?與其付費,不如指向桌上那台已經有 128GB 記憶體的 DGX Spark。

改三個設定值,agent 就從雲端搬回本地了。而且安全機制(OpenShell 沙箱)跟用哪個模型無關——不管你跑雲端還是本地、用哪個模型,Sandbox 限制照樣在。


為什麼要換後端

三個原因,按常見度排序:

費用。 NVIDIA API 免費 30 天,到期就要付費。GX10 有 128GB unified memory 和 273 GB/s 記憶體頻寬——只拿來幫你接雲端 API 很浪費。

隱私。 每個傳給 Nemotron 雲端的 prompt 都會離開機器。一個有 filesystem 存取和記憶功能的個人 agent,外洩風險不小。

模型選擇。 預設的 nvidia/nemotron-3-super-120b-a12b 能力很強,但行為有自己的偏向——針對「幫助性」和內容安全做過調整,某些情境會卡手。本地模型沒有這層限制。但這裡有個問題要先說清楚。

Uncensored 模型的問題

這次載的模型是 HauhauCS/Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive——Qwen3.5-35B-A3B 的 fine-tune,拿掉了標準安全過濾器。

自然會問:如果模型沒有內容限制,是什麼在阻止 agent 做任何被要求的事?

OpenShell。這就是 NemoClaw 常被忽略的架構重點。

OpenShell 擋的是工具這一層,不是模型那一層。agent 要呼叫工具前——讀檔案、跑指令、發網路請求——OpenShell 都會先攔下來對規則。模型自己想說什麼這時候不重要。Sandbox 只允許 /sandbox/tmp 的存取、只放 allowlist 裡的工具,其他東西在 gateway 那層就被擋掉,工具根本跑不到。

雲端推理加了第二層(模型自己的內容拒絕)。本地 uncensored 推理拿掉了這層。但 OpenShell 那層——真正控制 agent 能對 filesystem 和網路做什麼的那層——不管換什麼模型都在。

也就是說:uncensored 模型 + OpenShell sandbox 兩個搭起來是合理的。模型可以不受內容限制地推理跟回應;agent 的行為照樣被 sandbox 政策框住。這兩件事不衝突,也不互相影響。

找 Config

nemoclaw onboard 完成後,sandbox 設定在:

~/.nemoclaw/sandboxes/<sandbox-name>/config.yaml

非互動式 onboard 的預設 sandbox 名稱:

cat ~/.nemoclaw/sandboxes/my-assistant/config.yaml

相關的段落:

inference:
  endpoint: "https://integrate.api.nvidia.com/v1"
  model: "nvidia/nemotron-3-super-120b-a12b"
  api_key: "nvapi-..."

只有這裡參照了 NVIDIA 雲端。OpenShell gateway config(~/.openshell/gateways/nemoclaw/)和 sandbox policy 檔案都不碰推理路由。

換成 Ollama

Ollama 在 http://localhost:11434/v1 提供 OpenAI-compatible API。Model name 用 ollama pullollama run 完成後 Ollama 顯示的名稱。

先確認已載入的模型:

ollama list

然後更新 sandbox config:

# 先備份
cp ~/.nemoclaw/sandboxes/my-assistant/config.yaml \
   ~/.nemoclaw/sandboxes/my-assistant/config.yaml.nemotron-backup

編輯 ~/.nemoclaw/sandboxes/my-assistant/config.yaml

inference:
  endpoint: "http://localhost:11434/v1"
  model: "hauhaucs/qwen3.5-35b-a3b-uncensored-hauhaucs-aggressive:latest"
  api_key: "ollama"

api_key 欄位 schema 規定一定要有,但 Ollama 根本不看它的值。填 "ollama" 就好,schema 過得了,看了也不會搞混。

重啟 sandbox 讓設定生效:

nemoclaw my-assistant restart

確認新後端已啟用:

nemoclaw my-assistant status
# Phase: Ready
# Model: hauhaucs/qwen3.5-35b-a3b-uncensored-hauhaucs-aggressive:latest

測試切換結果

連進 sandbox 發一個測試訊息:

nemoclaw connect my-assistant

第一次回應的延遲會比 Nemotron 雲端高——Ollama 如果模型還沒在記憶體裡,需要先載入。之後的回應都從記憶體跑。

有一個差異要先講:Qwen3.5-35B-A3B 是 thinking model。Ollama 預設會開 thinking,也就是 agent 回應前會先吐推理 token,體感就是先安靜很久才一起冒出輸出。如果這個延遲受不了,Ollama 可以用 system prompt 或 think: false 關掉 thinking——只是 NemoClaw 目前沒有把這個參數開出來。走 vLLM 會乾脆一點。

vLLM 的替代路徑

如果 Ollama 的延遲不夠好,已經在 port 8000 跑的 vLLM container 可以直接換上:

inference:
  endpoint: "http://localhost:8000/v1"
  model: "qwen3.5-35b"
  api_key: "none"

Model name qwen3.5-35b 是啟動 container 時設的 --served-model-name。剩下就交給 vLLM 的 OpenAI-compatible server,接法完全一樣。

vLLM 對 thinking mode 的處理也更乾淨——container 啟動時帶的 --reasoning-parser qwen3 flag 讓 vLLM 在把回應傳給 client 之前就把推理 token 剝掉。Agent 看到的是乾淨輸出,不帶內部獨白。

兩邊各有取捨:Ollama 設定快、換模型容易、同時支援多個模型在記憶體裡。vLLM 熱請求 TTFT 更低(約 0.12s vs Ollama 的約 0.4s),structured output 和 tool call 的處理也更穩。

這個情境——GX10、個人用、一次跑一個模型——兩個都能用。想省事選 Ollama;要拿去穩定上線就選 vLLM。

這次學到了什麼

花最多時間的地方: 找 config 檔案。NemoClaw 的文件沒提到 per-sandbox 推理設定在哪。~/.nemoclaw/sandboxes/ 這個目錄結構不在任何 nemoclaw CLI 指令的輸出裡——v0.1.0 沒有 nemoclaw config show 之類的東西。找到它要在 onboard 後直接 list 目錄。

下次遇到類似問題先想到: 工具的 config 路徑沒有文件時,先看 ~/.toolname/。如果工具遵循 XDG convention,也查一下 ~/.config/toolname/ls -la ~/.nemoclaw/ 在 onboard 後就能看到完整結構。

記住這一件事: 模型會不會拒答,跟 sandbox 讓不讓 agent 動 filesystem / 網路,是兩回事,可以分開設。把這兩個混在一起看,結果不是把模型鎖太死,就是把 agent 放太鬆,兩種都不是對的取捨。

切換 Checklist

把 NemoClaw 指向本地推理後端:

  1. cat ~/.nemoclaw/sandboxes/my-assistant/config.yaml → 找到現在的推理設定
  2. 備份設定檔
  3. 更新 endpointmodelapi_key 欄位
  4. ollama list 或查 vLLM /v1/models 確認 model name
  5. nemoclaw my-assistant restart
  6. nemoclaw my-assistant status → 確認 model name 已更新
  7. nemoclaw connect my-assistant → 發測試訊息

本系列其他文章:Part 1 — NemoClaw 是什麼、為什麼存在、怎麼運作的 · Part 2 — 在 GX10 上從零安裝 NemoClaw

常見問題

怎麼把 NemoClaw 從 NVIDIA 雲端切換到本地 Ollama 模型?
編輯 ~/.nemoclaw/sandboxes/<name>/config.yaml,改三個欄位:endpoint 改成 'http://localhost:11434/v1'、model 改成你的 Ollama 模型名稱(用 'ollama list' 查)、api_key 設成 'ollama'。然後跑 'nemoclaw <name> restart' 套用。
NemoClaw 每個 sandbox 的推理設定檔在哪?
在 ~/.nemoclaw/sandboxes/<sandbox-name>/config.yaml。這個路徑在 NemoClaw v0.1.0 的文件裡沒有記載,也沒有 'nemoclaw config show' 指令。需要在 onboard 後直接 list 目錄才能找到。
在 NemoClaw 裡用 uncensored 模型安全嗎?
安全,因為 NemoClaw 的安全機制分成兩層。OpenShell 在工具這一層套規則——檔案系統存取、工具 allowlist——跟用哪個模型無關。Uncensored 模型只是拿掉了模型自己的拒答,但 OpenShell 還是會限制 agent 的行為(agent 能做什麼)。這兩件事不衝突,也不互相影響。
NemoClaw 的本地推理後端用 Ollama 跟 vLLM 有什麼差別?
Ollama 設定簡單、支援多模型同時在記憶體、換模型快。vLLM 的 TTFT 更低(約 0.12s vs 約 0.4s)、structured output 和 tool call 處理更穩、thinking mode 支援更好(透過 --reasoning-parser)。個人使用跑單一模型的話兩個都行;要拿去穩定上線就選 vLLM。