Modelos locais são viáveis. Eles também elevam a exigência de hardware, tamanho de contexto e defesa contra injeção de prompt — placas pequenas ou agressivamente quantizadas truncam o contexto e vazam segurança. Esta página é o guia opinativo para stacks locais de alto desempenho e servidores locais personalizados compatíveis com OpenAI. Para onboarding com o menor atrito, comece com LM Studio ou Ollama eDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw onboard.
Para servidores locais que devem iniciar somente quando um modelo selecionado precisar deles, consulte
serviços de modelo local.
Piso de hardware
Mire alto: ≥2 Mac Studios no máximo de configuração ou um rig de GPU equivalente (~US$ 30 mil+) para um ciclo de agente confortável. Uma única GPU de 24 GB funciona apenas para prompts mais leves com latência maior. Sempre execute a maior variante / variante em tamanho completo que você conseguir hospedar; checkpoints pequenos ou fortemente quantizados aumentam o risco de injeção de prompt (veja Segurança).Escolha um backend
| Backend | Use quando |
|---|---|
| LM Studio | Primeira configuração local, carregador com GUI, API Responses nativa |
| Ollama | Fluxo de trabalho via CLI, biblioteca de modelos, serviço systemd autônomo |
| MLX / vLLM / SGLang | Servir self-hosted de alta vazão com endpoint HTTP compatível com OpenAI |
| LiteLLM / OAI-proxy / proxy personalizado compatível com OpenAI | Você coloca outra API de modelo na frente e precisa que o OpenClaw a trate como OpenAI |
api: "openai-responses") quando o backend oferecer suporte a ela (LM Studio oferece). Caso contrário, mantenha Chat Completions (api: "openai-completions").
Recomendado: LM Studio + modelo local grande (API Responses)
Melhor stack local atual. Carregue um modelo grande no LM Studio (por exemplo, uma build Qwen, DeepSeek ou Llama em tamanho completo), habilite o servidor local (padrãohttp://127.0.0.1:1234) e use a API Responses para manter o raciocínio separado do texto final.
- Instale o LM Studio: https://lmstudio.ai
- No LM Studio, baixe a maior build de modelo disponível (evite variantes “small”/fortemente quantizadas), inicie o servidor e confirme que
http://127.0.0.1:1234/v1/modelsa lista. - Substitua
my-local-modelpelo ID real do modelo mostrado no LM Studio. - Mantenha o modelo carregado; carregamento a frio adiciona latência de inicialização.
- Ajuste
contextWindow/maxTokensse a sua build do LM Studio for diferente. - Para WhatsApp, mantenha a API Responses para que somente o texto final seja enviado.
models.mode: "merge" para que fallbacks permaneçam disponíveis.
Configuração híbrida: primário hospedado, fallback local
Local primeiro com rede de segurança hospedada
Troque a ordem do primário e do fallback; mantenha o mesmo bloco de provedores emodels.mode: "merge" para que você possa recorrer ao Sonnet ou Opus quando a máquina local estiver fora do ar.
Hospedagem regional / roteamento de dados
- Variantes MiniMax/Kimi/GLM hospedadas também existem no OpenRouter com endpoints fixados por região (por exemplo, hospedados nos EUA). Escolha a variante regional lá para manter o tráfego na jurisdição escolhida, ainda usando
models.mode: "merge"para fallbacks da Anthropic/OpenAI. - Somente local continua sendo o caminho mais forte de privacidade; roteamento regional hospedado é o meio-termo quando você precisa de recursos do provedor, mas quer controle sobre o fluxo de dados.
Outros proxies locais compatíveis com OpenAI
MLX (mlx_lm.server), vLLM, SGLang, LiteLLM, OAI-proxy ou gateways
personalizados funcionam se expuserem um endpoint /v1/chat/completions
no estilo OpenAI. Use o adaptador Chat Completions, a menos que o backend
documente explicitamente suporte a /v1/responses. Substitua o bloco de provedor acima pelo seu
endpoint e ID de modelo:
api for omitido em um provedor personalizado com um baseUrl, o OpenClaw usa
openai-completions como padrão. Endpoints de loopback como 127.0.0.1 são confiáveis
automaticamente; endpoints de LAN, tailnet e DNS privado ainda precisam de
request.allowPrivateNetwork: true.
O valor models.providers.<id>.models[].id é local ao provedor. Não
inclua o prefixo do provedor nele. Por exemplo, um servidor MLX iniciado com
mlx_lm.server --model mlx-community/Qwen3-30B-A3B-6bit deve usar este
ID de catálogo e ref de modelo:
models.providers.mlx.models[].id: "mlx-community/Qwen3-30B-A3B-6bit"agents.defaults.model.primary: "mlx/mlx-community/Qwen3-30B-A3B-6bit"
input: ["text", "image"] em modelos locais ou proxied de visão para que anexos de imagem
sejam injetados nas rodadas do agente. O onboarding interativo de provedor personalizado
infere IDs comuns de modelos de visão e pergunta apenas sobre nomes desconhecidos.
O onboarding não interativo usa a mesma inferência; use --custom-image-input
para IDs de visão desconhecidos ou --custom-text-input quando um modelo com aparência conhecida for
somente texto por trás do seu endpoint.
Mantenha models.mode: "merge" para que modelos hospedados permaneçam disponíveis como fallbacks.
Use models.providers.<id>.timeoutSeconds para servidores de modelo locais ou remotos lentos
antes de aumentar agents.defaults.timeoutSeconds. O timeout do provedor
se aplica apenas a requisições HTTP de modelo, incluindo conexão, cabeçalhos, streaming de corpo
e o abort total de guarded-fetch.
Para provedores personalizados compatíveis com OpenAI, persistir um marcador local não secreto como
apiKey: "ollama-local" é aceito quando baseUrl resolve para loopback, uma LAN privada, .local ou um hostname simples. O OpenClaw o trata como uma credencial local válida em vez de relatar uma chave ausente. Use um valor real para qualquer provedor que aceite um hostname público./v1 locais/proxied:
- O OpenClaw trata esses backends como rotas compatíveis com OpenAI no estilo proxy, não como endpoints nativos da OpenAI
- a formatação de requisições exclusiva da OpenAI nativa não se aplica aqui: sem
service_tier, semstorede Responses, sem formatação de payload de compatibilidade de raciocínio da OpenAI e sem dicas de cache de prompt - cabeçalhos ocultos de atribuição do OpenClaw (
originator,version,User-Agent) não são injetados nesses URLs de proxy personalizados
-
Alguns servidores aceitam apenas
messages[].contentem string em Chat Completions, não arrays estruturados de partes de conteúdo. Definamodels.providers.<provider>.models[].compat.requiresStringContent: truepara esses endpoints. -
Alguns modelos locais emitem solicitações de ferramenta entre colchetes independentes como texto, como
[tool_name]seguido por JSON e[END_TOOL_REQUEST]. O OpenClaw promove isso para chamadas de ferramenta reais somente quando o nome corresponde exatamente a uma ferramenta registrada para a rodada; caso contrário, o bloco é tratado como texto sem suporte e fica oculto das respostas visíveis ao usuário. - Se um modelo emitir JSON, XML ou texto no estilo ReAct que pareça uma chamada de ferramenta, mas o provedor não tiver emitido uma invocação estruturada, o OpenClaw o mantém como texto e registra um aviso com o ID da execução, provedor/modelo, padrão detectado e nome da ferramenta quando disponível. Trate isso como incompatibilidade de chamada de ferramenta do provedor/modelo, não como uma execução de ferramenta concluída.
-
Se ferramentas aparecerem como texto do assistente em vez de executarem, por exemplo JSON bruto,
XML, sintaxe ReAct ou um array
tool_callsvazio na resposta do provedor, primeiro verifique se o servidor está usando um template/parser de chat compatível com chamada de ferramenta. Para backends Chat Completions compatíveis com OpenAI cujo parser funciona apenas quando o uso de ferramenta é forçado, defina uma substituição de requisição por modelo em vez de depender de parsing de texto:Use isso apenas para modelos/sessões em que toda rodada normal deve chamar uma ferramenta. Isso substitui o valor padrão de proxy do OpenClaw detool_choice: "auto". Substitualocal/my-local-modelpela ref exata de provedor/modelo mostrada poropenclaw models list. -
Se um modelo personalizado compatível com OpenAI aceitar esforços de raciocínio da OpenAI além
do perfil integrado, declare-os no bloco de compatibilidade do modelo. Adicionar
"xhigh"aqui faz com que/think xhigh, seletores de sessão, validação do Gateway e validação dellm-taskexponham o nível para essa ref de provedor/modelo configurada:
Backends menores ou mais estritos
Se o modelo carregar sem problemas, mas os turnos completos do agente se comportarem mal, trabalhe de cima para baixo — confirme o transporte primeiro e depois restrinja a superfície.-
Confirme que o próprio modelo local responde. Sem ferramentas, sem contexto de agente:
-
Confirme o roteamento do Gateway. Envia apenas o prompt fornecido — ignora transcrição, bootstrap de AGENTS, montagem do mecanismo de contexto, ferramentas e servidores MCP incluídos, mas ainda exercita o roteamento do Gateway, autenticação e seleção de provedor:
-
Experimente o modo enxuto. Se ambas as sondagens passarem, mas turnos reais do agente falharem com chamadas de ferramenta malformadas ou prompts grandes demais, habilite
agents.defaults.experimental.localModelLean: true. Ele remove as três ferramentas padrão mais pesadas (browser,cron,message) para que o formato do prompt seja menor e menos frágil. Consulte Recursos experimentais → Modo enxuto para modelo local para a explicação completa, quando usá-lo e como confirmar que ele está ativado. -
Desabilite completamente as ferramentas como último recurso. Se o modo enxuto não for suficiente, defina
models.providers.<provider>.models[].compat.supportsTools: falsepara essa entrada de modelo. O agente então operará sem chamadas de ferramenta nesse modelo. -
Além disso, o gargalo está no upstream. Se o backend ainda falhar apenas em execuções maiores do OpenClaw depois do modo enxuto e de
supportsTools: false, o problema restante geralmente é capacidade do modelo ou servidor upstream — janela de contexto, memória da GPU, remoção de kv-cache ou um bug no backend. Nesse ponto, não é a camada de transporte do OpenClaw.
Solução de problemas
- O Gateway consegue alcançar o proxy?
curl http://127.0.0.1:1234/v1/models. - Modelo do LM Studio descarregado? Recarregue; inicialização fria é uma causa comum de “travamento”.
- O servidor local diz
terminated,ECONNRESETou fecha o stream no meio do turno? O OpenClaw registra ummodel.call.error.failureKindde baixa cardinalidade, além do snapshot de RSS/heap do processo do OpenClaw nos diagnósticos. Para pressão de memória no LM Studio/Ollama, compare esse timestamp com o log do servidor ou o log de crash / jetsam do macOS para confirmar se o servidor do modelo foi encerrado. - O OpenClaw deriva os limites de preflight da janela de contexto a partir da janela detectada do modelo, ou da janela do modelo sem limite quando
agents.defaults.contextTokensreduz a janela efetiva. Ele avisa abaixo de 20% com um piso de 8k. Bloqueios rígidos usam o limite de 10% com um piso de 4k, limitado à janela de contexto efetiva para que metadados de modelo grandes demais não rejeitem um limite de usuário que seria válido. Se você atingir esse preflight, aumente o limite de contexto do servidor/modelo ou escolha um modelo maior. - Erros de contexto? Reduza
contextWindowou aumente o limite do seu servidor. - Servidor compatível com OpenAI retorna
messages[].content ... expected a string? Adicionecompat.requiresStringContent: truenessa entrada de modelo. - Servidor compatível com OpenAI retorna
validation.keysou diz que entradas de mensagem só permitemroleecontent? Adicionecompat.strictMessageKeys: truenessa entrada de modelo. - Chamadas diretas pequenas para
/v1/chat/completionsfuncionam, masopenclaw infer model run --localfalha no Gemma ou em outro modelo local? Verifique primeiro a URL do provedor, a referência do modelo, o marcador de autenticação e os logs do servidor;model runlocal não inclui ferramentas de agente. Semodel runlocal tiver sucesso, mas turnos maiores do agente falharem, reduza a superfície de ferramentas do agente comlocalModelLeanoucompat.supportsTools: false. - Chamadas de ferramenta aparecem como texto JSON/XML/ReAct bruto, ou o provedor retorna um
array
tool_callsvazio? Não adicione um proxy que converta cegamente texto do assistente em execução de ferramenta. Corrija primeiro o template/parser de chat do servidor. Se o modelo só funcionar quando o uso de ferramentas for forçado, adicione a substituição por modeloparams.extra_body.tool_choice: "required"acima e use essa entrada de modelo apenas para sessões em que uma chamada de ferramenta é esperada em todos os turnos. - Segurança: modelos locais ignoram filtros do lado do provedor; mantenha agentes restritos e Compaction ativada para limitar o raio de impacto de injeções de prompt.