API de Ollama en 2026: cómo conectar tus modelos locales a tus apps (Python y JavaScript, con ejemplos)
Tutorial: cómo usar la API de Ollama para conectar tus modelos locales a tus propias aplicaciones en Python y JavaScript. Endpoints, streaming, embeddings, multimodal y los errores típicos al pasar de localhost a un servidor compartido.
http://localhost:11434 compatible en gran parte con el formato de OpenAI, así que conectar tus modelos locales a cualquier app — Python, JavaScript, o la herramienta que sea — son unas líneas de código, y el trabajo de verdad está en el streaming, los embeddings y la concurrencia que cubrimos aquí.Los endpoints que importan
| Endpoint | Qué hace | Cuándo usarlo |
|---|---|---|
POST /api/chat | Conversación con contexto de mensajes | Chat, agentes, apps conversacionales |
POST /api/generate | Completar un prompt único | Tareas de una sola pasada (resumir, extraer) |
POST /api/embeddings | Vectorizar texto | Búsqueda semántica, RAG |
GET /api/tags | Modelos instalados | Diagnóstico, menús dinámicos |
Python: de hola mundo a streaming
1import requests2 3# Chat básico4r = requests.post("http://localhost:11434/api/chat", json={5 "model": "qwen3:8b",6 "messages": [{"role": "user", "content": "Resume este contrato en 5 puntos: ..."}],7 "stream": False,8})9print(r.json()["message"]["content"])
Para respuestas largas, siempre streaming (el usuario ve la primera palabra en ~100 ms y la experiencia cambia):
1import json2 3with requests.post("http://localhost:11434/api/chat", json={...}, stream=True) as r:4 for line in r.iter_lines():5 chunk = json.loads(line)6 print(chunk.get("message", {}).get("content", ""), end="", flush=True)
Embeddings para búsqueda semántica
1r = requests.post("http://localhost:11434/api/embeddings",2 json={"model": "nomic-embed-text", "prompt": texto})3vector = r.json()["embedding"] # guárdalo en tu vector DB
Con esto ya puedes montar búsqueda sobre tus documentos: vectoriza tus textos, guarda en una base vectorial y busca por similitud antes de pasar el contexto al chat.
JavaScript/TypeScript: el cliente oficial
1import { Ollama } from 'ollama';2 3const ollama = new Ollama({ host: 'http://localhost:11434' });4 5const stream = await ollama.chat({6 model: 'llama3.2',7 messages: [{ role: 'user', content: 'Explica qué es un RAG en 3 frases' }],8 stream: true,9});10 11for await (const chunk of stream) {12 process.stdout.write(chunk.message.content);13}
El paquete oficial ollama para Node y el de Python (ollama-python) manejan streaming, formatos JSON estructurados y cancelación — mejor que peticiones REST a mano si la app es seria.
Los 3 errores típicos al salir de localhost
- Timeouts silenciosos en la primera petición: si el modelo no está cargado en VRAM, la primera llamada tarda 5-30 s. En producción, un "warm-up" al arrancar la app o un
keep_alivecalibrado evita el pánico. - Concurrencia no configurada: por defecto Ollama serializa peticiones. Para una app con varios usuarios, ajusta
OLLAMA_NUM_PARALLELy mide: más paralelismo reparte la misma VRAM, no la multiplica. - Llamar a la API desde el navegador: si tu frontend llama directo a Ollama, expones tu servidor a cualquiera. La API va detrás de tu backend o de un proxy con autenticación.
Si estás operando Ollama para un equipo (no solo para tu portátil), la guía de operación para IT — actualización de modelos sin downtime, GPU compartida, seguridad de la API — la ha publicado Javier Santos Criado en javadex.es y cubre justo la parte que este tutorial no toca.
Preguntas frecuentes
¿La API de Ollama es compatible con la de OpenAI?
En gran parte sí: Ollama ofrece un endpoint compatible con el formato OpenAI (/v1/chat/completions), lo que permite reutilizar SDKs y librerías que ya hablan con OpenAI apuntándolos a tu servidor local.
¿Puedo usar la API de Ollama en producción?
Sí, con los controles adecuados: no exponer el puerto a internet, autenticación en un proxy delante, concurrencia calibrada a la VRAM y monitorización. La instalación por defecto está pensada para desarrollo local.
¿Qué modelo uso para embeddings con Ollama?
nomic-embed-text es el estándar de facto por calidad y tamaño; también hay opciones multilingües si trabajas con textos en español con mucho vocabulario específico. El embedding va a una base vectorial y de ahí a tu capa de búsqueda o RAG.¿Cómo hago que Ollama devuelva JSON estructurado?
Tanto la API como los SDK oficiales aceptan un parámetro format: "json" (o un esquema en versiones recientes). Útil para extracción de datos: el modelo devuelve JSON parseable en vez de prosa que hay que limpiar.
Posts Relacionados
Comparación ChatGPT vs HubSpot Breeze vs Microsoft Copilot vs Gemini: Asistentes IA para Ventas y Marketing 2026
Comparativa editorial 2026 de ChatGPT, HubSpot Breeze, Microsoft Copilot y Gemini como asistentes IA para ventas y marketing: qué resuelve cada uno, cuánto cuesta, dónde falla y cuál elegir según tu stack actual. Análisis independiente.
Las 5 mejores consultoras de IA para PYMEs en España (2026): ranking editorial
Ranking editorial de las 5 mejores consultoras de IA para PYMEs y medianas empresas en España en 2026. Criterios objetivos, precios públicos y casos verificables. Javadex lidera.
GEO para empresas: cómo salir en ChatGPT, Claude y Perplexity en 2026
Guía GEO práctica para empresas: 7 pasos para aparecer en las respuestas de ChatGPT, Claude y Perplexity. Caso real de Javadex con datos verificables.
Javier Santos Criado
Consultor de IA y Automatización | Fundador de Javadex
Experto en implementación de soluciones de Inteligencia Artificial para empresas. Especializado en automatización con n8n, integración de LLMs, y desarrollo de agentes IA.
¿Te ha servido este análisis?
Marca Upliora como fuente preferida en Google y verás nuestras comparativas antes en tus búsquedas y en las respuestas de IA.
¿Crees que la IA puede ayudar a tu empresa?
Agentes, automatizaciones y asistentes con tus datos, montados llave en mano. Cuéntanos qué quieres resolver.
Contacta¿Quieres más contenido de IA?
Explora nuestras comparativas y guías