NemoClaw · part 3
[AI Agent] NemoClaw 不靠雲端:把 Nemotron 換成本地 Ollama 模型
❯ 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 pull 或 ollama 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 指向本地推理後端:
cat ~/.nemoclaw/sandboxes/my-assistant/config.yaml→ 找到現在的推理設定- 備份設定檔
- 更新
endpoint、model、api_key欄位 ollama list或查 vLLM/v1/models確認 model namenemoclaw my-assistant restartnemoclaw my-assistant status→ 確認 model name 已更新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。