Providers
Ollama
OpenClaw comunica con l'API nativa di Ollama (/api/chat), non con l'endpoint
compatibile con OpenAI /v1. Sono supportate tre modalità:
| Modalità | Cosa utilizza |
|---|---|
| Cloud + locale | Un host Ollama raggiungibile, che serve modelli locali e, se è stato effettuato l'accesso, modelli :cloud |
| Solo cloud | Direttamente https://ollama.com, senza daemon locale |
| Solo locale | Un host Ollama raggiungibile, esclusivamente con modelli locali |
Per la configurazione solo cloud con l'id provider dedicato ollama-cloud, consulta
Ollama Cloud. Usa riferimenti ollama-cloud/<model> quando
vuoi mantenere l'instradamento cloud separato da un provider ollama locale.
La chiave di configurazione canonica è baseUrl. È accettata anche baseURL per
gli esempi nello stile dell'SDK OpenAI, ma le nuove configurazioni devono usare baseUrl.
Regole di autenticazione
Host locali e LAN
Gli URL Ollama di local loopback, rete privata, .local e con semplice nome host non richiedono un vero token bearer. OpenClaw usa il marcatore ollama-local per questi casi.
Host remoti e Ollama Cloud
Gli host remoti pubblici e https://ollama.com richiedono una credenziale reale: OLLAMA_API_KEY, un profilo di autenticazione o la proprietà apiKey del provider. Per l'uso diretto del servizio ospitato, preferisci il provider ollama-cloud.
Id provider personalizzati
Un provider personalizzato con api: "ollama" segue le stesse regole. Ad esempio, un provider ollama-remote indirizzato a un host LAN privato può usare apiKey: "ollama-local"; i sotto-agenti risolvono tale marcatore tramite l'hook del provider Ollama anziché considerarlo una credenziale mancante. Anche agents.defaults.memorySearch.provider può fare riferimento a un id provider personalizzato affinché gli embedding usino quell'endpoint Ollama.
Profili di autenticazione
auth-profiles.json archivia la credenziale per un id provider; inserisci le impostazioni dell'endpoint (baseUrl, api, modelli, intestazioni, timeout) in models.providers.<id>. I vecchi file piatti come { "ollama-windows": { "apiKey": "ollama-local" } } non costituiscono un formato di runtime; openclaw doctor --fix li riscrive come profilo canonico con chiave API ollama-windows:default, creando un backup. Un valore baseUrl in tale file precedente è superfluo e deve essere spostato nella configurazione del provider.
Ambito degli embedding di memoria
L'autenticazione bearer per gli embedding di memoria Ollama è limitata all'host per cui è stata dichiarata:
- Una chiave a livello di provider viene inviata esclusivamente all'host di quel provider.
agents.*.memorySearch.remote.apiKeyviene inviata esclusivamente al relativo host remoto per gli embedding.- Un semplice valore della variabile d'ambiente
OLLAMA_API_KEYviene considerato conforme alla convenzione di Ollama Cloud e, per impostazione predefinita, non viene inviato agli host locali o auto-ospitati.
Per iniziare
Configurazione iniziale (consigliata)
Avvia la configurazione iniziale
openclaw onboardSeleziona Ollama, quindi scegli una modalità: Cloud + locale, Solo cloud o Solo locale.
Seleziona un modello
Solo cloud richiede OLLAMA_API_KEY e suggerisce valori predefiniti per i modelli cloud ospitati. Cloud + locale e Solo locale richiedono un URL di base Ollama, rilevano i modelli disponibili e scaricano automaticamente il modello locale selezionato se manca. Un tag :latest installato, come gemma4:latest, viene mostrato una sola volta anziché duplicare gemma4. Cloud + locale verifica inoltre se sull'host è stato effettuato l'accesso per usare il cloud.
Verifica
openclaw models list --provider ollamaModalità non interattiva:
openclaw onboard --non-interactive \ --auth-choice ollama \ --custom-base-url "http://ollama-host:11434" \ --custom-model-id "qwen3.5:27b" \ --accept-risk--custom-base-url e --custom-model-id sono facoltativi; se vengono omessi, vengono usati l'host locale predefinito e il modello suggerito gemma4.
Configurazione manuale
Installa e avvia Ollama
Scaricalo da ollama.com/download, quindi scarica un modello:
ollama pull gemma4Per l'accesso cloud ibrido, esegui ollama signin sullo stesso host.
Imposta una credenziale
export OLLAMA_API_KEY="ollama-local" # host locale/LAN, qualsiasi valore è validoexport OLLAMA_API_KEY="your-real-key" # solo https://ollama.comOppure nella configurazione: openclaw config set models.providers.ollama.apiKey "OLLAMA_API_KEY".
Seleziona il modello
openclaw models listopenclaw models set ollama/gemma4Oppure nella configurazione:
{ agents: { defaults: { model: { primary: "ollama/gemma4" }, }, },}Modelli cloud tramite un host locale
Cloud + locale instrada sia i modelli locali sia quelli :cloud tramite un unico
host Ollama raggiungibile: questo è il flusso ibrido di Ollama e la modalità da
scegliere durante la configurazione quando vuoi entrambi.
OpenClaw richiede l'URL di base, rileva i modelli locali e verifica lo stato di
ollama signin. Quando l'accesso è stato effettuato, suggerisce i valori predefiniti
ospitati (kimi-k2.5:cloud, minimax-m2.7:cloud, glm-5.1:cloud, glm-5.2:cloud). Se
l'accesso non è stato effettuato, la configurazione rimane solo locale finché non esegui ollama signin.
Per l'accesso solo cloud senza un daemon locale, usa openclaw onboard --auth-choice ollama-cloud e consulta Ollama Cloud: questo percorso non richiede ollama signin né un server in esecuzione:
openclaw onboard --auth-choice ollama-cloudopenclaw models set ollama-cloud/kimi-k2.5:cloudL'elenco dei modelli cloud mostrato durante openclaw onboard viene popolato in tempo reale da
https://ollama.com/api/tags, con un limite di 500 voci, in modo che il selettore rifletta
il catalogo ospitato corrente. Se ollama.com non è raggiungibile o non restituisce
modelli durante la configurazione, OpenClaw usa come ripiego il proprio elenco di suggerimenti
predefinito, affinché la configurazione iniziale possa comunque essere completata.
Rilevamento dei modelli (provider implicito)
Quando OLLAMA_API_KEY (o un profilo di autenticazione) è impostato e non è definito né
models.providers.ollama né un altro provider personalizzato con api: "ollama",
OpenClaw rileva i modelli da http://127.0.0.1:11434:
| Comportamento | Dettaglio |
|---|---|
| Interrogazione del catalogo | /api/tags |
| Rilevamento delle funzionalità | La lettura non garantita di /api/show rileva contextWindow, i parametri num_ctx del Modelfile e le funzionalità (visione/strumenti/ragionamento) |
| Modelli con visione | Una funzionalità vision restituita da /api/show indica che il modello supporta le immagini (input: ["text", "image"]) |
| Rilevamento del ragionamento | Usa la funzionalità thinking di /api/show quando disponibile; se Ollama omette le funzionalità, ricorre a un'euristica basata sul nome (r1, reason, reasoning, think). glm-5.2:cloud e deepseek-v4-flash|pro:cloud vengono sempre considerati modelli di ragionamento, indipendentemente dalle funzionalità dichiarate. |
| Limiti dei token | maxTokens usa per impostazione predefinita il limite massimo di token Ollama di OpenClaw |
| Costi | Tutti i costi sono 0 |
ollama listopenclaw models listL'impostazione di models.providers.ollama con un array models esplicito, oppure di un
provider personalizzato con api: "ollama" e un baseUrl che non sia di local loopback, disabilita
il rilevamento automatico; i modelli devono quindi essere definiti manualmente (consulta
Configurazione). Anche una voce models.providers.ollama indirizzata al
servizio ospitato https://ollama.com ignora il rilevamento, poiché i modelli Ollama Cloud
sono gestiti dal provider. I provider personalizzati di local loopback, come
http://127.0.0.2:11434, sono comunque considerati locali e mantengono attivo il rilevamento automatico.
Puoi usare un riferimento completo come ollama/<pulled-model>:latest senza una
voce models.json scritta manualmente; OpenClaw lo risolve in tempo reale. Per gli
host su cui è stato effettuato l'accesso, la selezione di un riferimento non elencato
ollama/<model>:cloud convalida quel modello esatto tramite /api/show e lo aggiunge
al catalogo di runtime soltanto se Ollama ne conferma i metadati; gli errori di battitura
continuano a generare un errore di modello sconosciuto.
Test rapidi
Per una verifica testuale mirata che ignori l'intera superficie degli strumenti dell'agente:
OLLAMA_API_KEY=ollama-local \ openclaw infer model run \ --local \ --model ollama/llama3.2:latest \ --prompt "Reply with exactly: pong" \ --jsonAggiungi --file con un'immagine per una verifica essenziale di un modello con visione (accetta PNG/JPEG/WebP;
i file che non sono immagini vengono rifiutati prima che Ollama venga chiamato; usa
openclaw infer audio transcribe per l'audio):
OLLAMA_API_KEY=ollama-local \ openclaw infer model run \ --local \ --model ollama/qwen2.5vl:7b \ --prompt "Describe this image in one sentence." \ --file ./photo.jpg \ --jsonNessuno dei due percorsi carica gli strumenti di chat, la memoria o il contesto della sessione. Se la verifica riesce mentre le normali risposte dell'agente non riescono, è probabile che il problema riguardi la capacità del modello di gestire strumenti o agenti, non l'endpoint.
La selezione di un modello con /model ollama/<model> è una scelta esplicita dell'utente: se il
baseUrl configurato non è raggiungibile, la risposta successiva non riesce e restituisce l'errore
del provider, anziché passare silenziosamente a un altro modello configurato.
I processi Cron isolati aggiungono un controllo di sicurezza locale prima di avviare il turno dell'agente:
se il modello selezionato viene risolto in un provider Ollama locale, di rete privata o .local
e /api/tags non è raggiungibile, OpenClaw registra l'esecuzione come
skipped, includendo il modello nel testo dell'errore. Questo controllo dell'endpoint viene memorizzato
nella cache per 5 minuti per ogni host, così i processi Cron ripetuti diretti a un daemon arrestato non
avviano tutti richieste destinate a non riuscire.
Verifica in tempo reale:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA=1 OPENCLAW_LIVE_OLLAMA_WEB_SEARCH=0 \ pnpm test:live -- extensions/ollama/ollama.live.test.tsPer Ollama Cloud, indirizza lo stesso test live all'endpoint ospitato (per impostazione predefinita ignora gli embedding; forzali con OPENCLAW_LIVE_OLLAMA_EMBEDDINGS=1, poiché una chiave cloud potrebbe non autorizzare /api/embed):
export OLLAMA_API_KEY='<your-ollama-cloud-api-key>'OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA=1 \OPENCLAW_LIVE_OLLAMA_BASE_URL=https://ollama.com \OPENCLAW_LIVE_OLLAMA_MODEL=glm-5.1:cloud \OPENCLAW_LIVE_OLLAMA_WEB_SEARCH=1 \pnpm test:live -- extensions/ollama/ollama.live.test.tsPer aggiungere un modello, scaricalo: verrà rilevato automaticamente.
ollama pull mistralInferenza locale sul Node
Gli agenti possono delegare una breve attività a un modello Ollama su un desktop associato o su un Node server. Il prompt e la risposta transitano sulla connessione autenticata esistente tra Gateway e Node; la richiesta viene eseguita sull'endpoint Ollama di loopback del Node (http://127.0.0.1:11434).
Avvia Ollama sul Node
ollama pull qwen3:0.6bollama listConnetti l'host del Node
openclaw node run \ --host <gateway-host> \ --port 18789 \ --display-name "Local inference"Approva il dispositivo e i relativi comandi del Node sull'host del Gateway, quindi verifica:
openclaw devices listopenclaw devices approve <deviceRequestId>openclaw nodes pendingopenclaw nodes approve <nodeRequestId>openclaw nodes status --connectedUna prima connessione, o un aggiornamento che aggiunge comandi Ollama, può richiedere l'approvazione dei comandi del Node. Se il Node si connette senza dichiarare ollama.models e ollama.chat, controlla nuovamente openclaw nodes pending.
Usalo da un agente
Il plugin Ollama incluso espone lo strumento node_inference. Gli agenti chiamano prima action: "discover", quindi action: "run" con un Node e un modello restituiti dal risultato (run può omettere il Node quando è connesso esattamente un solo Node compatibile). Ad esempio: "Individua i modelli Ollama sui miei Node, quindi usa il modello caricato più veloce per riassumere questo testo."
Il rilevamento legge /api/tags, controlla le funzionalità tramite /api/show e, quando disponibile, usa /api/ps per assegnare la priorità ai modelli già caricati. Restituisce soltanto i modelli locali che Ollama segnala come compatibili con la chat (funzionalità completion): le voci di Ollama Cloud e i modelli destinati esclusivamente agli embedding vengono esclusi. Ogni esecuzione disabilita il ragionamento del modello e limita per impostazione predefinita l'output a 512 token (limite massimo assoluto di 8192), a meno che la chiamata allo strumento non richieda un valore maxTokens diverso; alcuni modelli, ad esempio GPT-OSS, non supportano la disabilitazione del ragionamento e potrebbero comunque emettere token di ragionamento.
Per mantenere Ollama in esecuzione su un Node senza renderlo accessibile agli agenti:
openclaw config set plugins.entries.ollama.config.nodeInference.enabled falseRiavvia il Node (openclaw node restart, oppure arresta e riesegui openclaw node run per una sessione in primo piano). Il Node smette di dichiarare ollama.models e ollama.chat; Ollama stesso e il provider Ollama del Gateway non subiscono modifiche. Reimposta il valore su true e riavvia per riabilitare la funzionalità; dopo la riconnessione, una modifica alla superficie dei comandi potrebbe richiedere nuovamente l'approvazione tramite openclaw nodes pending.
Verifica direttamente i comandi del Node, senza un turno dell'agente:
openclaw nodes invoke \ --node "Local inference" \ --command ollama.models \ --params '{}' \ --invoke-timeout 90000 \ --timeout 100000 openclaw nodes invoke \ --node "Local inference" \ --command ollama.chat \ --params '{"model":"qwen3:0.6b","prompt":"Reply with exactly: pong","maxTokens":32,"timeoutMs":120000}' \ --invoke-timeout 130000 \ --timeout 140000--invoke-timeout limita il tempo a disposizione del Node per eseguire il comando; --timeout limita la durata complessiva della chiamata al Gateway e deve essere maggiore.
L'inferenza locale sul Node usa sempre l'endpoint di loopback del Node stesso: non riutilizza un models.providers.ollama.baseUrl remoto o cloud configurato. I comandi del Node sono disponibili per impostazione predefinita sugli host Node macOS, Linux e Windows e rimangono soggetti alle normali regole di associazione e autorizzazione dei comandi del Node.
Visione e descrizione delle immagini
Il plugin Ollama incluso registra Ollama come provider di comprensione dei contenuti multimediali compatibile con le immagini, consentendo a OpenClaw di instradare le richieste esplicite di descrizione delle immagini e le impostazioni predefinite configurate per i modelli di immagini attraverso modelli di visione Ollama locali o ospitati.
ollama pull qwen2.5vl:7bexport OLLAMA_API_KEY="ollama-local"openclaw infer image describe --file ./photo.jpg --model ollama/qwen2.5vl:7b --json--model deve essere un riferimento completo <provider/model>; quando è impostato, infer image describe prova prima quel modello, anziché ignorare la descrizione per i modelli che supportano già la visione nativa. Se la chiamata non riesce, OpenClaw può proseguire con agents.defaults.imageModel.fallbacks; gli errori di preparazione di file o URL causano un errore prima che venga tentato il fallback. Usa infer image describe per il flusso di comprensione delle immagini di OpenClaw e per l'imageModel configurato; usa infer model run --file per una verifica multimodale diretta con un prompt personalizzato.
Per rendere Ollama il provider predefinito di comprensione delle immagini per i contenuti multimediali in ingresso:
{ agents: { defaults: { imageModel: { primary: "ollama/qwen2.5vl:7b", }, }, },}Preferisci il riferimento completo ollama/<model>. Un riferimento imageModel senza provider, come qwen2.5vl:7b, viene normalizzato in ollama/qwen2.5vl:7b soltanto quando quel modello esatto è elencato in models.providers.ollama.models con input: ["text", "image"] e nessun altro provider di immagini configurato espone lo stesso ID senza provider; in caso contrario, usa esplicitamente il prefisso del provider.
I modelli di visione locali più lenti possono richiedere un timeout per la comprensione delle immagini più lungo rispetto ai modelli cloud e, su hardware con risorse limitate, possono arrestarsi in modo anomalo se Ollama tenta di allocare l'intero contesto di visione dichiarato dal modello. Imposta un timeout per la funzionalità e limita num_ctx:
{ models: { providers: { ollama: { models: [ { id: "qwen2.5vl:7b", name: "qwen2.5vl:7b", input: ["text", "image"], params: { num_ctx: 2048, keep_alive: "1m" }, }, ], }, }, }, tools: { media: { image: { timeoutSeconds: 180, models: [{ provider: "ollama", model: "qwen2.5vl:7b", timeoutSeconds: 300 }], }, }, },}Questo timeout si applica alla comprensione delle immagini in ingresso e allo strumento esplicito image. models.providers.ollama.timeoutSeconds continua a controllare il limite della richiesta HTTP Ollama sottostante per le normali chiamate ai modelli.
Verifica live:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA_IMAGE=1 \ pnpm test:live -- src/agents/tools/image-tool.ollama.live.test.tsSe definisci manualmente models.providers.ollama.models, contrassegna esplicitamente i modelli di visione:
{ id: "qwen2.5vl:7b", name: "qwen2.5vl:7b", input: ["text", "image"], contextWindow: 128000, maxTokens: 8192,}OpenClaw rifiuta le richieste di descrizione delle immagini per i modelli non contrassegnati come compatibili con le immagini. Con il rilevamento implicito, questa informazione deriva dalla funzionalità di visione restituita da /api/show.
Configurazione
Di base (rilevamento implicito)
export OLLAMA_API_KEY="ollama-local"Esplicita (modelli manuali)
Usa una configurazione esplicita per una distribuzione cloud ospitata, un host o una porta non predefiniti, finestre di contesto forzate oppure elenchi di modelli completamente manuali:
{ models: { providers: { ollama: { baseUrl: "https://ollama.com", apiKey: "OLLAMA_API_KEY", api: "ollama", models: [ { id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128000, maxTokens: 8192 } ] } } }}URL di base personalizzato
La configurazione esplicita disabilita il rilevamento automatico, quindi i modelli devono essere elencati:
{ models: { providers: { ollama: { apiKey: "ollama-local", baseUrl: "http://ollama-host:11434", // No /v1 - native Ollama API URL api: "ollama", // Explicit: guarantees native tool-calling behavior timeoutSeconds: 300, // Optional: longer connect/stream budget for cold local models models: [ { id: "qwen3:32b", name: "qwen3:32b", params: { keep_alive: "15m", // Optional: keep the model loaded between turns }, }, ], }, }, },}Ricette comuni
Sostituisci gli ID dei modelli con i nomi esatti restituiti da ollama list o openclaw models list --provider ollama.
Modello locale con rilevamento automatico
Ollama sulla stessa macchina del Gateway, rilevato automaticamente:
ollama serveollama pull gemma4export OLLAMA_API_KEY="ollama-local"openclaw models list --provider ollamaopenclaw models set ollama/gemma4Non aggiungere un blocco models.providers.ollama a meno che non siano necessari modelli manuali.
Host Ollama nella LAN con modelli manuali
{ models: { providers: { ollama: { baseUrl: "http://gpu-box.local:11434", apiKey: "ollama-local", api: "ollama", timeoutSeconds: 300, contextWindow: 32768, maxTokens: 8192, models: [ { id: "qwen3.5:9b", name: "qwen3.5:9b", reasoning: true, input: ["text"], params: { num_ctx: 32768, thinking: false, keep_alive: "15m", }, }, ], }, }, }, agents: { defaults: { model: { primary: "ollama/qwen3.5:9b" }, }, },}contextWindow rappresenta il budget di contesto di OpenClaw; params.num_ctx viene inviato a Ollama. Mantienili allineati quando l'hardware non è in grado di eseguire il modello con l'intero contesto dichiarato.
Solo Ollama Cloud
Nessun demone locale, modelli ospitati direttamente:
export OLLAMA_API_KEY="your-ollama-api-key"{ models: { providers: { ollama: { baseUrl: "https://ollama.com", apiKey: "OLLAMA_API_KEY", api: "ollama", models: [ { id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", reasoning: false, input: ["text", "image"], contextWindow: 128000, maxTokens: 8192, }, ], }, }, }, agents: { defaults: { model: { primary: "ollama/kimi-k2.5:cloud" }, }, },}Per usare l'ID provider dedicato ollama-cloud al posto di questa struttura, consulta Ollama Cloud.
Cloud e locale tramite un demone autenticato
ollama signinollama pull gemma4{ models: { providers: { ollama: { baseUrl: "http://127.0.0.1:11434", apiKey: "ollama-local", api: "ollama", timeoutSeconds: 300, models: [ { id: "gemma4", name: "gemma4", input: ["text"] }, { id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", input: ["text", "image"] }, ], }, }, }, agents: { defaults: { model: { primary: "ollama/gemma4", fallbacks: ["ollama/kimi-k2.5:cloud"], }, }, },}Più host Ollama
ID provider personalizzati quando si esegue più di un server Ollama; ciascuno dispone di host, modelli, autenticazione e timeout propri.
{ models: { providers: { "ollama-fast": { baseUrl: "http://mini.local:11434", apiKey: "ollama-local", api: "ollama", contextWindow: 32768, models: [{ id: "gemma4", name: "gemma4", input: ["text"] }], }, "ollama-large": { baseUrl: "http://gpu-box.local:11434", apiKey: "ollama-local", api: "ollama", timeoutSeconds: 420, contextWindow: 131072, maxTokens: 16384, models: [{ id: "qwen3.5:27b", name: "qwen3.5:27b", input: ["text"] }], }, }, }, agents: { defaults: { model: { primary: "ollama-fast/gemma4", fallbacks: ["ollama-large/qwen3.5:27b"], }, }, },}OpenClaw rimuove il prefisso del provider attivo (usando come ripiego un prefisso
semplice ollama/) prima di chiamare Ollama, quindi ollama-large/qwen3.5:27b
raggiunge Ollama come qwen3.5:27b.
Profilo locale leggero del modello
Alcuni modelli locali gestiscono prompt semplici, ma hanno difficoltà con l'intera superficie degli strumenti dell'agente. Limita gli strumenti e il contesto prima di modificare le impostazioni globali di runtime:
{ agents: { list: [ { id: "local", experimental: { localModelLean: true, }, model: { primary: "ollama/gemma4" }, }, ], }, models: { providers: { ollama: { baseUrl: "http://127.0.0.1:11434", apiKey: "ollama-local", api: "ollama", contextWindow: 32768, models: [ { id: "gemma4", name: "gemma4", input: ["text"], params: { num_ctx: 32768 }, compat: { supportsTools: false }, }, ], }, }, },}Usa compat.supportsTools: false solo quando il modello o il server
presenta sistematicamente errori con gli schemi degli strumenti: questa opzione sacrifica le capacità dell'agente in favore della stabilità.
localModelLean rimuove dalla superficie diretta dell'agente gli strumenti più pesanti per browser, cron, messaggi, generazione di contenuti multimediali,
voce e PDF, salvo quando siano richiesti esplicitamente,
e colloca i cataloghi più grandi dietro la ricerca degli strumenti. Non modifica
il contesto di runtime né la modalità di ragionamento di Ollama. Abbinalo a params.num_ctx e
params.thinking: false per i piccoli modelli di ragionamento in stile Qwen che entrano in ciclo o
consumano il proprio budget nel ragionamento nascosto.
Selezione del modello
{ agents: { defaults: { model: { primary: "ollama/gpt-oss:20b", fallbacks: ["ollama/llama3.3", "ollama/qwen2.5-coder:32b"], }, }, },}Gli ID provider personalizzati funzionano allo stesso modo: per un riferimento che usa il prefisso del provider
attivo, come ollama-spark/qwen3:32b, OpenClaw rimuove tale prefisso prima di
chiamare Ollama, inviando qwen3:32b.
Per i modelli locali lenti, preferisci una regolazione specifica del provider prima di aumentare il timeout dell'intero runtime dell'agente:
{ models: { providers: { ollama: { timeoutSeconds: 300, models: [ { id: "gemma4:26b", name: "gemma4:26b", params: { keep_alive: "15m" }, }, ], }, }, },}timeoutSeconds copre la richiesta HTTP al modello: configurazione della connessione, intestazioni,
streaming del corpo e interruzione totale protetta del recupero. params.keep_alive viene
inoltrato come keep_alive di livello superiore nelle richieste native /api/chat; impostalo per
ciascun modello quando il tempo di caricamento del primo turno è il collo di bottiglia.
Verifica rapida
# Demone Ollama visibile a questa macchinacurl http://127.0.0.1:11434/api/tags # Catalogo OpenClaw e modello selezionatoopenclaw models list --provider ollamaopenclaw models status # Verifica rapida diretta del modelloopenclaw infer model run \ --model ollama/gemma4 \ --prompt "Reply with exactly: ok"Per gli host remoti, sostituisci 127.0.0.1 con l'host di baseUrl. Se curl
funziona ma OpenClaw no, verifica se il Gateway viene eseguito su una
macchina, un contenitore o un account di servizio diverso.
Ricerca web di Ollama
OpenClaw include Ricerca web di Ollama come provider web_search.
| Proprietà | Dettaglio |
|---|---|
| Host | models.providers.ollama.baseUrl quando impostato, altrimenti http://127.0.0.1:11434; https://ollama.com usa direttamente l'API ospitata |
| Autenticazione | Senza chiave per un host locale autenticato; OLLAMA_API_KEY o autenticazione del provider configurata per la ricerca diretta su https://ollama.com o per host protetti da autenticazione |
| Requisito | Gli host locali o self-hosted devono essere in esecuzione e autenticati con ollama signin; la ricerca ospitata diretta richiede baseUrl: "https://ollama.com" più una vera chiave API |
Sceglilo durante openclaw onboard o openclaw configure --section web, oppure imposta:
{ tools: { web: { search: { provider: "ollama", }, }, },}Per la ricerca ospitata diretta tramite Ollama Cloud:
{ models: { providers: { ollama: { baseUrl: "https://ollama.com", apiKey: "OLLAMA_API_KEY", api: "ollama", models: [{ id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", input: ["text"] }], }, }, }, tools: { web: { search: { provider: "ollama" }, }, },}Per un host self-hosted, OpenClaw prova prima il proxy locale /api/experimental/web_search,
quindi usa come ripiego il percorso ospitato /api/web_search sullo stesso host; un
demone locale autenticato normalmente risponde tramite il proxy locale. Le chiamate dirette a
https://ollama.com usano sempre l'endpoint ospitato /api/web_search.
Configurazione avanzata
Modalità legacy compatibile con OpenAI
Imposta esplicitamente api: "openai-completions" per un proxy dietro
/v1/chat/completions:
{ models: { providers: { ollama: { baseUrl: "http://ollama-host:11434/v1", api: "openai-completions", injectNumCtxForOpenAICompat: true, // valore predefinito: true apiKey: "ollama-local", models: [...] } } }}Questa modalità potrebbe non supportare contemporaneamente lo streaming e la chiamata degli strumenti;
potrebbe essere necessario impostare params: { streaming: false } sul modello.
OpenClaw inserisce options.num_ctx per impostazione predefinita in questa modalità, affinché Ollama non
ripieghi silenziosamente su un contesto di 4096 token. Se il proxy rifiuta
campi options sconosciuti, disabilitalo:
{ models: { providers: { ollama: { baseUrl: "http://ollama-host:11434/v1", api: "openai-completions", injectNumCtxForOpenAICompat: false, apiKey: "ollama-local", models: [...] } } }}Finestre di contesto
Per i modelli rilevati automaticamente, OpenClaw usa la finestra di contesto indicata da
/api/show, inclusi i valori PARAMETER num_ctx più grandi provenienti da
Modelfile personalizzati; altrimenti usa come ripiego la finestra di contesto Ollama
predefinita di OpenClaw.
contextWindow, contextTokens e maxTokens a livello di provider impostano
i valori predefiniti per ogni modello di quel provider e possono essere sovrascritti per
ciascun modello. contextWindow è il budget di prompt/compaction proprio di OpenClaw. Le richieste native
/api/chat lasciano options.num_ctx non impostato, a meno che non si imposti
esplicitamente params.num_ctx, quindi Ollama applica il proprio valore predefinito basato sul modello,
su OLLAMA_CONTEXT_LENGTH o sulla VRAM; i valori params.num_ctx non validi, pari a zero, negativi
o non finiti vengono ignorati. Se una configurazione precedente usava
solo contextWindow/maxTokens per forzare il contesto della richiesta nativa, esegui
openclaw doctor --fix per copiarli in params.num_ctx. L'adattatore
compatibile con OpenAI continua a inserire options.num_ctx per impostazione predefinita in base a
params.num_ctx o contextWindow configurato; disabilitalo con
injectNumCtxForOpenAICompat: false se il servizio a monte rifiuta options.
Le voci dei modelli nativi accettano inoltre le comuni opzioni di runtime Ollama in
params, inoltrate come options native di /api/chat: num_keep, seed,
num_predict, top_k, top_p, min_p, typical_p, repeat_last_n,
temperature, repeat_penalty, presence_penalty, frequency_penalty,
stop, num_batch, num_gpu, main_gpu, use_mmap e num_thread.
Alcune chiavi (format, keep_alive, truncate, shift) vengono inoltrate come
campi della richiesta di livello superiore anziché come options annidate. OpenClaw inoltra
solo queste chiavi di richiesta Ollama, quindi i parametri esclusivamente di runtime, come
streaming, non vengono mai inviati a Ollama. Usa params.think (o
params.thinking) per impostare think al livello superiore; false disabilita il
ragionamento a livello API per i modelli di ragionamento in stile Qwen.
{ models: { providers: { ollama: { contextWindow: 32768, models: [ { id: "llama3.3", contextWindow: 131072, maxTokens: 65536, params: { num_ctx: 32768, temperature: 0.7, top_p: 0.9, thinking: false, }, } ] } } }}Anche agents.defaults.models["ollama/<model>"].params.num_ctx per modello
funziona; la voce esplicita del modello nel provider ha la precedenza se sono impostate entrambe.
Controllo del ragionamento
OpenClaw inoltra il ragionamento come previsto da Ollama: think al livello superiore, non
options.think. I modelli rilevati automaticamente per i quali /api/show segnala una
capacità thinking espongono /think low, /think medium, /think high
e /think max; i modelli senza ragionamento espongono solo /think off.
openclaw agent --model ollama/gemma4 --thinking offopenclaw agent --model ollama/gemma4 --thinking lowOppure imposta un valore predefinito per il modello:
{ agents: { defaults: { models: { "ollama/gemma4": { thinking: "low", }, }, }, },}params.think/params.thinking per modello può disabilitare o forzare il ragionamento
dell'API per un modello specifico. OpenClaw conserva questa configurazione esplicita
quando l'esecuzione attiva ha soltanto il valore predefinito implicito off; un comando
di runtime diverso da off, come /think medium, continua ad avere la precedenza. Una richiesta
di ragionamento con valore true non viene mai inviata a un modello contrassegnato esplicitamente
con reasoning: false; una richiesta think: false viene sempre inviata.
Modelli di ragionamento
I modelli denominati deepseek-r1, reasoning, reason o think sono considerati
per impostazione predefinita capaci di ragionamento, senza necessità di configurazione aggiuntiva:
ollama pull deepseek-r1:32bCosti dei modelli
Ollama viene eseguito localmente ed è gratuito, quindi tutti i costi dei modelli sono 0 sia per
i modelli rilevati automaticamente sia per quelli definiti manualmente.
Embedding della memoria
Il plugin Ollama incluso registra un provider di embedding della memoria per la
ricerca nella memoria. Usa l'URL di base e la chiave API di Ollama
configurati, chiama /api/embed e, quando possibile, raggruppa più segmenti di memoria
in un'unica richiesta input.
Quando proxy.enabled=true, le richieste di embedding all'origine local loopback
esatta dell'host, derivata dal baseUrl configurato, usano il percorso diretto protetto
di OpenClaw anziché il proxy di inoltro gestito. Il nome host configurato deve essere
esso stesso localhost o un indirizzo IP di loopback letterale: i nomi DNS che si
risolvono semplicemente in loopback continuano a usare il percorso del proxy gestito. Gli host
Ollama su LAN, tailnet, rete privata e rete pubblica restano sempre sul percorso del
proxy gestito e i reindirizzamenti verso un altro host o un'altra porta non ereditano
l'attendibilità. proxy.loopbackMode: "proxy" instrada comunque il traffico di loopback attraverso il
proxy; proxy.loopbackMode: "block" lo nega prima della connessione:
consulta Proxy gestito.
| Proprietà | Valore |
|---|---|
| Modello predefinito | nomic-embed-text |
| Download automatico | Sì, se non è presente localmente |
| Concorrenza inline predefinita | 1 (gli altri provider hanno valori predefiniti più elevati; aumentala con nonBatchConcurrency se l'host può sostenerla) |
Gli embedding in fase di query usano prefissi di recupero per i modelli che li richiedono o
li consigliano: nomic-embed-text, qwen3-embedding e
mxbai-embed-large. I batch di documenti rimangono invariati, quindi gli indici esistenti non
richiedono alcuna migrazione del formato.
{ agents: { defaults: { memorySearch: { provider: "ollama", remote: { // Valore predefinito per Ollama. Aumentalo sugli host più potenti se la reindicizzazione è troppo lenta. nonBatchConcurrency: 1, }, }, }, },}Per un host di embedding remoto, limita l'autenticazione a tale host:
{ agents: { defaults: { memorySearch: { provider: "ollama", model: "nomic-embed-text", remote: { baseUrl: "http://gpu-box.local:11434", apiKey: "ollama-local", nonBatchConcurrency: 2, }, }, }, },}Configurazione dello streaming
Ollama usa per impostazione predefinita l'API nativa (/api/chat), che supporta
contemporaneamente lo streaming e la chiamata degli strumenti, senza necessità di configurazione speciale.
Per le richieste native, il controllo del ragionamento viene inoltrato direttamente: /think off
e openclaw agent --thinking off inviano think: false al livello principale, a meno che
non sia configurato un valore esplicito per params.think/params.thinking; /think low|medium|high invia la stringa corrispondente al livello di intensità; /think max corrisponde
al livello massimo di Ollama, think: "high".
Risoluzione dei problemi
Ciclo di arresti anomali di WSL2 (riavvii ripetuti)
Su WSL2 con NVIDIA/CUDA, il programma di installazione Linux ufficiale di Ollama crea un'unità
systemd ollama.service con Restart=always. Se tale servizio
si avvia automaticamente e carica un modello basato su GPU durante l'avvio di WSL2, Ollama può bloccare
la memoria dell'host durante il caricamento; il recupero della memoria di Hyper-V non riesce sempre a recuperare
tali pagine, quindi Windows può terminare la VM WSL2, systemd riavvia
Ollama e il ciclo si ripete.
Indizi: riavvii o terminazioni ripetuti di WSL2, utilizzo elevato della CPU in app.slice o
ollama.service subito dopo l'avvio di WSL2 e SIGTERM da systemd anziché
dal terminatore OOM di Linux.
OpenClaw registra un avviso all'avvio quando rileva WSL2, ollama.service
abilitato con Restart=always e indicatori CUDA visibili.
Mitigazione:
sudo systemctl disable ollamaSul lato Windows, aggiungi quanto segue a %USERPROFILE%\.wslconfig, quindi esegui
wsl --shutdown:
[experimental]autoMemoryReclaim=disabledIn alternativa, riduci il tempo di mantenimento attivo oppure avvia Ollama manualmente solo quando necessario:
export OLLAMA_KEEP_ALIVE=5mollama serveConsulta ollama/ollama#11317.
Ollama non rilevato
Verifica che Ollama sia in esecuzione, che OLLAMA_API_KEY (o un profilo di autenticazione) sia impostato
e che models.providers.ollama non sia definito esplicitamente:
ollama servecurl http://localhost:11434/api/tagsNessun modello disponibile
Scarica il modello localmente oppure definiscilo esplicitamente in
models.providers.ollama:
ollama list # Mostra ciò che è installatoollama pull gemma4ollama pull gpt-oss:20bollama pull llama3.3 # Oppure un altro modelloConnessione rifiutata
# Verifica se Ollama è in esecuzioneps aux | grep ollama # Oppure riavvia Ollamaollama serveL'host remoto funziona con curl ma non con OpenClaw
Esegui la verifica dalla stessa macchina e dallo stesso runtime che eseguono il Gateway:
openclaw gateway status --deepcurl http://ollama-host:11434/api/tagsCause comuni:
baseUrlpunta alocalhost, ma il Gateway viene eseguito in Docker o su un altro host.- L'URL usa
/v1, selezionando il comportamento compatibile con OpenAI anziché quello nativo di Ollama. - L'host remoto richiede modifiche al firewall o al binding LAN.
- Il modello è presente nel daemon del portatile, ma non in quello remoto.
Il modello restituisce il JSON degli strumenti come testo
In genere il provider è in modalità compatibile con OpenAI oppure il modello non è in grado di gestire gli schemi degli strumenti. Preferisci la modalità nativa:
{ models: { providers: { ollama: { baseUrl: "http://ollama-host:11434", api: "ollama", }, }, },}Se un piccolo modello locale continua a non gestire correttamente gli schemi degli strumenti, imposta
compat.supportsTools: false nella voce del modello e ripeti il test.
Kimi o GLM restituisce simboli illeggibili
Le risposte di Kimi/GLM in hosting costituite da lunghe sequenze di simboli non linguistici vengono considerate una chiamata al provider non riuscita anziché una risposta valida, in modo che intervenga la normale gestione dei nuovi tentativi, del fallback o degli errori, invece di salvare testo danneggiato nella sessione.
Se il problema si ripresenta, acquisisci il nome del modello, il file della sessione corrente e
indica se l'esecuzione ha usato Cloud + Local o Cloud only, quindi prova una nuova
sessione e un modello di fallback:
openclaw infer model run --model ollama/kimi-k2.5:cloud --prompt "Reply with exactly: ok" --jsonopenclaw models set ollama/gemma4Il modello locale a freddo va in timeout
I modelli locali di grandi dimensioni possono richiedere molto tempo al primo caricamento. Limita il timeout al provider Ollama e, facoltativamente, mantieni il modello caricato tra un turno e l'altro:
{ models: { providers: { ollama: { timeoutSeconds: 300, models: [ { id: "gemma4:26b", name: "gemma4:26b", params: { keep_alive: "15m" }, }, ], }, }, },}Se l'host stesso è lento ad accettare le connessioni, timeoutSeconds estende anche
il timeout di connessione protetto per questo provider.
Il modello con contesto ampio è troppo lento o esaurisce la memoria
Molti modelli dichiarano contesti più grandi di quelli che l'hardware può gestire
agevolmente. Ollama nativo usa il proprio valore predefinito di runtime, a meno che
non sia impostato params.num_ctx. Limita sia il budget di OpenClaw sia il contesto
della richiesta Ollama per ottenere una latenza prevedibile del primo token:
{ models: { providers: { ollama: { contextWindow: 32768, maxTokens: 8192, models: [ { id: "qwen3.5:9b", name: "qwen3.5:9b", params: { num_ctx: 32768, thinking: false }, }, ], }, }, },}Riduci contextWindow se OpenClaw invia un prompt troppo lungo. Riduci
params.num_ctx se il contesto di runtime di Ollama è troppo grande per la macchina.
Riduci maxTokens se la generazione dura troppo a lungo.
Contenuti correlati
Configurazione esclusivamente cloud con il provider dedicato ollama-cloud.
Panoramica di tutti i provider, dei riferimenti ai modelli e del comportamento di failover.
Come scegliere e configurare i modelli.
Dettagli completi sulla configurazione e sul comportamento della ricerca web basata su Ollama.
Riferimento completo della configurazione.