Skip to content

CH 16 · Despliegue local y libertad de tokens

Word count~3,650 wordsTime~25 minPrereqCH 06 (Custom Provider)LevelReproducible

Objetivo del capítulo

En todos los capítulos anteriores has estado llamando a la API oficial de DeepSeek — útil, pero con cobro por token, y las sesiones de Agent se cepillan tokens especialmente (cada resultado de herramienta hay que devolverlo al contexto). Y esto no es solo cosa de DeepSeek: en cuanto pases por una API en la nube, sea oficial o de terceros, no escapas del cobro por token.

Este capítulo te da un camino completamente distinto: despliegue local. Descarga un modelo open source en tu propio ordenador y ejecútalo; toda la inferencia no pasa por ningún servidor de terceros — sin factura de tokens, verdadera "libertad de tokens".

El método ya lo aprendiste en CH 06: dsh solo reconoce "endpoints compatibles con OpenAI", y el modelo es una configuración, no un atadura. Este capítulo aplica esa capacidad a un escenario real — deja que dsh corra con tu propio modelo.

En qué se diferencia el despliegue local de la nube

Primero aclara "por qué el despliegue local es gratis". Cuando usas la API oficial de DeepSeek, los prompts, los resultados de herramientas y el contenido de archivos van todos a su servidor, que usa su propia GPU para la inferencia y luego cobra por token. Toda API en la nube es así: el compute es de otro, y la factura va atada a los tokens.

El despliegue local es justo lo contrario: el modelo se descarga en tu ordenador, la inferencia corre en tu propia GPU/CPU, no interviene ningún servidor de terceros. El compute es tuyo, la luz es tuya, así que naturalmente no hay factura por token — eso es lo que significa de verdad "libertad de tokens".

DimensiónAPI en la nube (p. ej. oficial de DeepSeek)Despliegue local (LM Studio corriendo modelo open source)
CobroPor tokenGratis (solo el coste de la luz)
RedTiene que conectar a internetPuede ser totalmente offline
DatosSe envían al servidor del proveedorSe quedan en tu máquina
CapacidadModelo flagship, la más fuerteDepende de lo grande que sea el modelo que pueda correr tu GPU
Coste de entradaCero, te registras y tienes una KeyInstalar software, descargar modelo (varios GB)

La seña del despliegue local en una línea: gratis, offline, privado, pero la capacidad está limitada por tu hardware — cuanto más potente tu GPU, más grande el modelo que puedes correr y mejor el resultado.

Principio: el modelo es configuración

Por qué dsh puede cambiar de modelo a voluntad es por el plugin de enrutamiento de modelos llm-pi-ai: trata al "proveedor de modelo" como un trozo de configuración YAML; cualquier endpoint que exponga el protocolo OpenAI Chat Completions (es decir, /v1/chat/completions) se puede enchufar como proveedor. Cambiar de modelo = cambiar un trozo de configuración, sin tocar dsh.

dsh solo reconoce endpoints compatibles con OpenAI

Así que despliegue local y conectar a la API oficial, el método es el mismo que en CH 06, solo cambia la dirección del endpoint:

DirecciónBase URLKeyModelo típico
DeepSeek oficial (nube)https://api.deepseek.comKey oficialdeepseek-v4-flash etc.
LM Studio localhttp://localhost:1234/v1Cualquier cosa (local ignora)Qwen3 8B etc.

Conecta un modelo local: onboarding con LM Studio

Paso 1: instala LM Studio, descarga un modelo

Los runners de modelos locales no son solo uno: si te suena Ollama, también puedes usar Ollama directamente (onboarding por línea de comandos, el método de configuración es idéntico al de abajo). Este capítulo usa LM Studio de forma unificada para la demo — con interfaz gráfica, el más amigable para principiantes.

LM Studio soporta Windows / macOS / Linux; entra en el sitio de LM Studio para descargar el instalador. Tras la instalación, no intentes adivinar qué modelo descargar, deja eso a dsh — él revisará el entorno de tu ordenador y luego te recomendará. Envía esto en el cuadro de entrada de la Web UI:

text
Check my computer's GPU and VRAM, estimate in Q4 quantization how large a local model can run comfortably; recommend 2~3 models suitable for local Agent (must support tool calling), give model names that can be searched directly in the LM Studio search box, each with a one-sentence reason. Only query and recommend, no other operations.

dsh leerá tu GPU y listará unos cuantos nombres concretos de modelo. Lleva los nombres a LM Studio y búscalos.

Abre LM Studio: abajo a la izquierda Settings → Explorer, en el buscador busca el nombre de modelo que dsh recomendó. Los marcados con etiqueta verde (que indica compatible con tu hardware, carga total de GPU) en los resultados de búsqueda son los que tu máquina puede correr, solo clica para descargar.

Página Explorer de LM Studio: búsqueda de Gemma 4 E2B, marcado con full GPU offload y características vision / tools / thinking

Un recordatorio fijo: para modelos locales que corren un Agent, la capacidad de tool calling es más importante que las puntuaciones de benchmark — el modelo tiene que poder seguir instrucciones para llamar a herramientas, si no el Agent no puede girar.

Paso 2: enciende el servidor local, confirma que el endpoint está vivo

Tras descargar el modelo, en LM Studio abajo a la izquierda Settings → Local Models → Local Model API (Local Server), enciende el interruptor Local API server. Por defecto escucha en http://localhost:1234, y el endpoint compatible con OpenAI está en /v1 — la página mostrará directamente el base URL http://localhost:1234/v1; cuando veas "running" el servidor está arriba.

Servidor API de modelos locales de LM Studio: running, base URL es localhost:1234/v1

Abre en el navegador:

http://localhost:1234/v1/models

Si ves un JSON listando tu modelo descargado, el endpoint está bien. Este paso también te deja ver el ID exacto de cada modelo (usa lo que devuelva aquí; p. ej., el Gemma 4 E2B que yo descargué aparece como gemma-4-e2b-it-qat), que tendrás que rellenar luego en la configuración.

JSON de lista de modelos devuelto por localhost:1234/v1/models

Parámetros del modelo en la Resource Library

¿Quieres ver con qué parámetros corre el modelo? Abajo a la izquierda Settings → Local Models → Resource Library, busca tu modelo, clica el botón Settings a la derecha y se abrirá la página "Model Default Settings":

Resource Library de LM Studio: mi lista de modelos, Gemma 4 E2B Instruct QAT 4.34GB

Model Default Settings de LM Studio: Automatic Optimize Based on Hardware etc., todo por defecto

Se divide en tres secciones: Prompt, Context & Performance, Generation. Automatic Optimize Based on Hardware (RECOMMENDED) está activado por defecto; longitud de contexto, GPU offload etc. están todos en AUTO — LM Studio los ajusta según tu ordenador. La demo de este capítulo va toda con los valores por defecto, ni uno solo hace falta tocarlo; vuelve aquí más adelante si quieres ajustar.

Paso 3: añade un "Custom Provider" en dsh

Siguiendo el método 2 de CH 06: Settings → Models → Add Custom Provider, rellena:

CampoQué rellenar
Provider IDlm-studio-local (minúsculas)
API addresshttp://localhost:1234/v1
API protocolCompatible con OpenAI Chat Completions
KeyRellena cualquier cosa (local no valida, lm-studio sirve de placeholder)
ModelEl ID completo de /v1/models del paso anterior

Settings → Models → Add Custom Provider de dsh: Provider ID lm-studio-local, API address http://localhost:1234/v1, protocolo openai-completions, modelo gemma-4-e2b-it-qat

Efecto y gestión de expectativas

  • Beneficios: totalmente offline, cero gastos de API, código y docs se quedan en tu máquina — para escenarios sensibles a privacidad, el modelo local es la única opción.
  • Realidad: un modelo local pequeño sirve para "cerrar el bucle", no para tareas pesadas. Los Agents se cepillan especialmente tool calling y contexto largo; los modelos pequeños fallan más llamadas a herramientas y planean peor que los flagship. Va muy bien para probar durante el desarrollo de plugins; para trabajo real, vuelve a un modelo en la nube.

El Gemma 4 E2B desplegado en esta demo es un modelo de visión (Google oficial: E2B tiene un encoder de visión, soporta entrada de imagen) — pero para que realmente reciba imágenes y haga OCR en dsh hace falta una declaración más: el custom provider de dsh lo trata como solo texto por defecto; sin la declaración las imágenes se rechazan como entrada inválida (cubierto en CH 06). Cómo hacerlo: en la ventana de ajustes de dsh clica arriba a la derecha Open config file, busca llm-pi-ai.providers.lm-studio-local.models y el modelo correspondiente, añade una línea input: [text, image]:

yaml
llm-pi-ai:
  providers:
    lm-studio-local:
      apiKeyEnv: LM_STUDIO_API_KEY
      api: openai-completions
      baseURL: http://localhost:1234/v1
      models:
        - id: gemma-4-e2b-it-qat
          input: [text, image]

Tras guardar, reinicia la sesión, mándale una imagen y ya puede hacer OCR.

En dsh, selecciona gemma-4-e2b-it-qat para una sesión nueva, hazle una tarea simple y responde con normalidad

Tool calling también funciona: en la demo mandé "create a txt file telling me who you are", y el modelo realmente llamó a la herramienta write — falló y reintentó unas cuantas veces y al final escribió con éxito identity.txt. Esto prueba que el modelo local de verdad puede correr el tool loop de dsh, no solo chatear; solo que no es tan estable como el flagship, con más errores.

Modelo local llama a la herramienta write para crear un archivo txt: reintento por error y luego éxito

Local o nube: cómo elegir

EscenarioElige
Trabajo diario, quieres el mejor resultadoAPI en la nube (por token, fácil)
Tareas diarias simples, p. ej. el briefing programado de hot topics con aihot de antesModelo local con LM Studio (offline, gratis)

No son excluyentes: dsh puede tener varios providers montados a la vez y puedes cambiar en una sesión nueva como quieras. Cuando el coste sea sensible, enruta las sesiones diarias a flash y deja el trabajo pesado a pro — la postura ahorradora más simple; el modelo local sostiene los escenarios de testing y privacidad.

Errores comunes

TrampaCómo evitarla
Base URL mal escritaLos endpoints compatibles con OpenAI suelen terminar en /v1; primero abre GET {baseURL}/models en el navegador para verificar
Variable de entorno de la Key no definidaapiKeyEnv solo referencia, no crea; confirma que el entorno en el que arranca dsh puede leer realmente esa variable
El Model ID no coincideLos modelos locales tienen que usar el ID completo devuelto por /v1/models (vendor/model-name), no rellenes de memoria
Error con imagen, dice que no soporta OCREl modelo del custom provider se trata como solo texto por defecto — aunque el modelo en sí soporte OCR, tienes que añadir input: [text, image] en la config del provider
El modelo local falla llamadas a herramientas constantementeNo es un problema de config, es el límite de capacidad del modelo pequeño — vuelve a modelos en la nube o cambia a un modelo local más grande

Qué aprendiste en este capítulo

  • [ ] Enunciar "el modelo es configuración": dsh solo reconoce endpoints compatibles con OpenAI, cambiar de modelo = cambiar un trozo de config de provider
  • [ ] Enunciar la diferencia esencial entre despliegue local y API en la nube: por qué es gratis (el compute es tuyo), offline, los datos se quedan en tu máquina
  • [ ] Saber cómo usar LM Studio para descargar un modelo, encender el servidor local y confirmar que localhost:1234/v1/models está vivo
  • [ ] Saber cómo añadir el custom provider lm-studio-local en dsh y correr con éxito una sesión local
  • [ ] Saber que los modelos de visión necesitan input: [text, image], saber que los modelos locales pequeños sirven para probar, no para tareas pesadas

Open Source · MIT · Community Driven