Saltar al contenido principal

Modelos locales

Lo local es viable, pero OpenClaw espera un contexto amplio y defensas sólidas contra la inyección de prompts. Las tarjetas pequeñas truncan el contexto y debilitan la seguridad. Apunta alto: ≥2 Mac Studios al máximo o un equipo GPU equivalente (~$30k+). Una sola GPU de 24 GB solo funciona para prompts más ligeros con mayor latencia. Usa la variante de modelo más grande o de tamaño completo que puedas ejecutar; los checkpoints cuantizados agresivamente o “small” aumentan el riesgo de inyección de prompts (consulta Security). Si quieres la configuración local con menos fricción, empieza con LM Studio o Ollama y openclaw onboard. Esta página es la guía con criterio para stacks locales de gama más alta y servidores locales personalizados compatibles con OpenAI.

Recomendado: LM Studio + modelo local grande (API de Responses)

La mejor stack local actual. Carga un modelo grande en LM Studio (por ejemplo, una compilación de tamaño completo de Qwen, DeepSeek o Llama), habilita el servidor local (por defecto http://127.0.0.1:1234) y usa la API de Responses para mantener el razonamiento separado del texto final.
{
  agents: {
    defaults: {
      model: { primary: “lmstudio/my-local-model” },
      models: {
anthropic/claude-opus-4-6: { alias: “Opus” },
lmstudio/my-local-model: { alias: “Local” },
      },
    },
  },
  models: {
    mode: “merge”,
    providers: {
      lmstudio: {
        baseUrl: “http://127.0.0.1:1234/v1”,
        apiKey: “lmstudio”,
        api: “openai-responses”,
        models: [
          {
            id: “my-local-model”,
            name: “Local Model”,
            reasoning: false,
            input: [“text”],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 196608,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
}
Lista de verificación de configuración
  • Instala LM Studio: https://lmstudio.ai
  • En LM Studio, descarga la compilación de modelo más grande disponible (evita variantes “small” o muy cuantizadas), inicia el servidor y confirma que http://127.0.0.1:1234/v1/models lo lista.
  • Sustituye my-local-model por el ID real del modelo que muestra LM Studio.
  • Mantén el modelo cargado; la carga en frío añade latencia de inicio.
  • Ajusta contextWindow/maxTokens si tu compilación de LM Studio es distinta.
  • Para WhatsApp, usa la API de Responses para que solo se envíe el texto final.
Mantén también configurados los modelos alojados incluso cuando ejecutes en local; usa models.mode: "merge" para que las alternativas sigan disponibles.

Configuración híbrida: primario alojado, alternativa local

{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-6",
        fallbacks: ["lmstudio/my-local-model", "anthropic/claude-opus-4-6"],
      },
      models: {
        "anthropic/claude-sonnet-4-6": { alias: "Sonnet" },
        "lmstudio/my-local-model": { alias: "Local" },
        "anthropic/claude-opus-4-6": { alias: "Opus" },
      },
    },
  },
  models: {
    mode: "merge",
    providers: {
      lmstudio: {
        baseUrl: "http://127.0.0.1:1234/v1",
        apiKey: "lmstudio",
        api: "openai-responses",
        models: [
          {
            id: "my-local-model",
            name: "Local Model",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 196608,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
}

Prioridad a local con red de seguridad alojada

Intercambia el orden del primario y la alternativa; mantén el mismo bloque providers y models.mode: "merge" para poder recurrir a Sonnet u Opus cuando el equipo local no esté disponible.

Alojamiento regional / enrutamiento de datos

  • Las variantes alojadas de MiniMax/Kimi/GLM también existen en OpenRouter con endpoints fijados por región (por ejemplo, alojados en EE. UU.). Elige allí la variante regional para mantener el tráfico dentro de tu jurisdicción elegida mientras sigues usando models.mode: "merge" para alternativas de Anthropic/OpenAI.
  • Solo local sigue siendo la vía más sólida para la privacidad; el enrutamiento regional alojado es el punto intermedio cuando necesitas funciones del proveedor pero quieres controlar el flujo de datos.

Otros proxies locales compatibles con OpenAI

vLLM, LiteLLM, OAI-proxy o gateways personalizados funcionan si exponen un endpoint /v1 de estilo OpenAI. Sustituye el bloque de proveedor anterior por tu endpoint y tu ID de modelo:
{
  models: {
    mode: "merge",
    providers: {
      local: {
        baseUrl: "http://127.0.0.1:8000/v1",
        apiKey: "sk-local",
        api: "openai-responses",
        models: [
          {
            id: "my-local-model",
            name: "Local Model",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 120000,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
}
Mantén models.mode: "merge" para que los modelos alojados sigan disponibles como alternativas. Nota de comportamiento para backends locales o con proxy /v1:
  • OpenClaw los trata como rutas proxy compatibles con OpenAI, no como endpoints nativos de OpenAI
  • el formateo de solicitudes exclusivo de OpenAI nativo no se aplica aquí: sin service_tier, sin Responses store, sin formateo de payload de compatibilidad de razonamiento de OpenAI y sin sugerencias de caché de prompts
  • los encabezados ocultos de atribución de OpenClaw (originator, version, User-Agent) no se inyectan en estas URL de proxy personalizadas
Notas de compatibilidad para backends compatibles con OpenAI más estrictos:
  • Algunos servidores solo aceptan messages[].content como cadena en Chat Completions, no arreglos estructurados de partes de contenido. Establece models.providers.<provider>.models[].compat.requiresStringContent: true para esos endpoints.
  • Algunos backends locales más pequeños o estrictos son inestables con la forma completa del prompt del runtime de agente de OpenClaw, especialmente cuando se incluyen esquemas de herramientas. Si el backend funciona para llamadas directas pequeñas a /v1/chat/completions pero falla en turnos normales del agente de OpenClaw, primero prueba agents.defaults.experimental.localModelLean: true para quitar herramientas predeterminadas pesadas como browser, cron y message; esta es una bandera experimental, no una configuración estable del modo predeterminado. Consulta Experimental Features. Si eso sigue fallando, prueba models.providers.<provider>.models[].compat.supportsTools: false.
  • Si el backend sigue fallando solo en ejecuciones más grandes de OpenClaw, el problema restante suele ser la capacidad del modelo/servidor upstream o un error del backend, no la capa de transporte de OpenClaw.

Solución de problemas

  • ¿Gateway puede alcanzar el proxy? curl http://127.0.0.1:1234/v1/models.
  • ¿El modelo de LM Studio se descargó de memoria? Vuelve a cargarlo; el arranque en frío es una causa común de “bloqueo”.
  • OpenClaw advierte cuando la ventana de contexto detectada está por debajo de 32k y bloquea por debajo de 16k. Si llegas a esa verificación previa, aumenta el límite de contexto del servidor/modelo o elige un modelo más grande.
  • ¿Errores de contexto? Reduce contextWindow o aumenta el límite de tu servidor.
  • ¿El servidor compatible con OpenAI devuelve messages[].content ... expected a string? Añade compat.requiresStringContent: true en esa entrada del modelo.
  • ¿Las llamadas directas pequeñas a /v1/chat/completions funcionan, pero openclaw infer model run falla con Gemma u otro modelo local? Primero desactiva los esquemas de herramientas con compat.supportsTools: false, y luego vuelve a probar. Si el servidor sigue fallando solo con prompts más grandes de OpenClaw, trátalo como una limitación del servidor/modelo upstream.
  • Seguridad: los modelos locales omiten los filtros del proveedor; mantén los agentes limitados y Compaction activado para limitar el radio de impacto de la inyección de prompts.