CH 16 · Despliegue local y libertad de tokens
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ón | API en la nube (p. ej. oficial de DeepSeek) | Despliegue local (LM Studio corriendo modelo open source) |
|---|---|---|
| Cobro | Por token | Gratis (solo el coste de la luz) |
| Red | Tiene que conectar a internet | Puede ser totalmente offline |
| Datos | Se envían al servidor del proveedor | Se quedan en tu máquina |
| Capacidad | Modelo flagship, la más fuerte | Depende de lo grande que sea el modelo que pueda correr tu GPU |
| Coste de entrada | Cero, te registras y tienes una Key | Instalar 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.
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ón | Base URL | Key | Modelo típico |
|---|---|---|---|
| DeepSeek oficial (nube) | https://api.deepseek.com | Key oficial | deepseek-v4-flash etc. |
| LM Studio local | http://localhost:1234/v1 | Cualquier 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:
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.

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.

Abre en el navegador:
http://localhost:1234/v1/modelsSi 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.

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":


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:
| Campo | Qué rellenar |
|---|---|
| Provider ID | lm-studio-local (minúsculas) |
| API address | http://localhost:1234/v1 |
| API protocol | Compatible con OpenAI Chat Completions |
| Key | Rellena cualquier cosa (local no valida, lm-studio sirve de placeholder) |
| Model | El ID completo de /v1/models del paso anterior |

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]:
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.

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.

Local o nube: cómo elegir
| Escenario | Elige |
|---|---|
| Trabajo diario, quieres el mejor resultado | API en la nube (por token, fácil) |
| Tareas diarias simples, p. ej. el briefing programado de hot topics con aihot de antes | Modelo 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
| Trampa | Cómo evitarla |
|---|---|
| Base URL mal escrita | Los 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 definida | apiKeyEnv solo referencia, no crea; confirma que el entorno en el que arranca dsh puede leer realmente esa variable |
| El Model ID no coincide | Los 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 OCR | El 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 constantemente | No 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/modelsestá vivo - [ ] Saber cómo añadir el custom provider
lm-studio-localen 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
