Cómo usar Ollama con una interfaz gráfica (y un respaldo alojado)
Ollama se ejecuta en una terminal, pero cualquier interfaz de chat que utilice el formato OpenAI puede colocarse encima. Aquí te explicamos cómo configurar una y cómo apuntar la misma ventana a un endpoint alojado.

Sin tarjeta. Tras registrarte, reclama $0,50 de crédito de prueba gratuito con un clic (una vez por persona).
Obtener clave de APIPuntos clave
- Ollama no tiene una ventana de chat integrada; añades una interfaz como Open WebUI.
- Las interfaces se comunican con Ollama o con cualquier URL compatible con OpenAI, por lo que una interfaz puede mantener ambas conexiones.
- Para la conexión alojada usa la URL base https://api.ollamansfw.com/v1 y el ID del modelo uncensored.
- El streaming, las llamadas a funciones y el modo JSON funcionan a través del endpoint alojado con la configuración estándar del cliente.
Por qué Ollama necesita una interfaz gráfica separada
Si quieres saber cómo usar ollama con una interfaz gráfica, el primer hecho es que Ollama es un servidor y una herramienta CLI. Descarga modelos y responde en un puerto local. La ventana de chat es tarea de otros; hay varias buenas.
Esta separación es útil. Porque Ollama expone una API estilo OpenAI en tu propia máquina (por defecto en el puerto 11434 bajo /v1), cualquier interfaz que te permita configurar una URL base de OpenAI personalizada puede usarla. La misma propiedad significa que luego puedes apuntar esa interfaz a otro lugar. Este artículo explica primero la configuración local y luego añade un endpoint alojado como una segunda conexión.
Elige un interfaz
Tres familias de herramientas cubren la mayoría de los casos. Consulta la documentación propia de cada proyecto para los pasos de instalación actuales, ya que cambian con frecuencia.
- Open WebUI. Interfaz web autoalojada. Soporta Ollama directamente y acepta cualquier conexión compatible con OpenAI. Se instala con Docker o pip.
- Clientes de escritorio. Apps nativas como Chatbox o Msty permiten añadir un servidor Ollama o un proveedor compatible con OpenAI desde la configuración. Sin servidor que ejecutar.
- Interfaces de roleplay y escritura. SillyTavern permite añadir un endpoint compatible con OpenAI; hay herramientas similares para ficción larga y personajes adultos.
Si no quieres un contenedor Docker, un cliente de escritorio es el camino más corto. Si quieres una interfaz compartida para varias personas en una misma red, Open WebUI es la opción habitual.
Paso a paso con Open WebUI
- Instala e inicia Ollama, luego descarga un modelo con
ollama pull. Confirma que responde desde la terminal antes de continuar. - Inicia Open WebUI. Con Docker, el patrón habitual es publicar un puerto y montar un volumen para sus datos.
- Abre la página web, crea la primera cuenta local (se convertirá en el administrador) y busca el área de conexiones en la configuración de administración.
- Verifica que la URL de Ollama apunte a la máquina donde se ejecuta. Si están en el mismo host, es la dirección local en el puerto 11434. Si Open WebUI está en un contenedor,
localhostes el contenedor, razón común de lista vacía. - Recarga, elige un modelo del menú desplegable y envía un mensaje.
Esa es una interfaz local completa. Nada sale de tu computadora y la velocidad depende de tu GPU o CPU.
Añadiendo una conexión compatible con OpenAI alojada
Ahora el punto de respaldo. Supongamos que el modelo que puedes ejecutar localmente es demasiado pequeño para una escena larga, o que tu GPU está ocupada renderizando. Puedes agregar una segunda conexión a la misma interfaz. Para esto necesitas una clave de API, que puedes obtener en la página de claves de API después de registrarte con Google o con correo electrónico y contraseña. Hay un crédito de prueba de $0,50 por una sola vez disponible con un solo clic, no requiere pago y dura 7 días.
En Open WebUI, añade una conexión de OpenAI con estos valores:
- URL base:
https://api.ollamansfw.com/v1 - Clave de API: tu clave, enviada como
Authorization: Bearer - Modelo:
uncensored
Si prefieres variables de entorno al lanzar el contenedor, Open WebUI documenta OPENAI_API_BASE_URL y OPENAI_API_KEY para esto:
docker run -d -p 3000:8080 \
-e OPENAI_API_BASE_URL=https://api.ollamansfw.com/v1 \
-e OPENAI_API_KEY=YOUR_KEY \
-v open-webui:/app/backend/data \
--name open-webui ghcr.io/open-webui/open-webui:main
# model to pick in the UI: uncensored
Tras recargar, uncensored debería aparecer en el menú desplegable junto a tus modelos locales. La interfaz lo encuentra vía GET /v1/models. Ahora puedes alternar entre un modelo local y el alojado en la misma lista de chats.
Prueba el endpoint fuera de la interfaz primero
Cuando una interfaz muestra un error vago, la forma más rápida de saber si el problema es la clave o la interfaz es una llamada directa. Aquí tienes una petición de streaming con curl:
curl -N https://api.ollamansfw.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"stream": true,
"messages": [{"role": "user", "content": "Write two sentences about a lighthouse keeper."}]
}'
Verás líneas data: con información de uso. Si funciona, la clave y URL son correctas; el problema es la interfaz. La página de solución de problemas cubre errores comunes como falta de /v1 o espacio final en la clave.
La misma configuración de cliente que usas para modelos locales se aplica en su mayoría. Temperatura, top_p, secuencias de parada, semilla y penalizaciones se pasan al modelo.
Usando el endpoint alojado desde tu propio código
Una interfaz es un cliente. Los scripts y aplicaciones pequeñas son otro, y el endpoint alojado funciona con los SDK estándar de OpenAI. Las llamadas a funciones y el modo JSON son compatibles, lo cual es importante si tu interfaz o agente los usa.
from openai import OpenAI
client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": "Reply with a JSON object with keys title and summary."},
{"role": "user", "content": "A short story about a lighthouse keeper."},
],
)
print(resp.choices[0].message.content)
En Node el patrón es idéntico:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.ollamansfw.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [{ role: "user", content: "Name three sailing knots." }],
});
for await (const part of stream) {
process.stdout.write(part.choices[0]?.delta?.content ?? "");
}
La guía de inicio rápido tiene más ejemplos, incluyendo llamadas a herramientas con tool_choice.
Problemas comunes y soluciones
La mayoría de los fallos en una configuración de interfaz provienen de una lista corta de causas.
- Lista de modelos vacía para la conexión local. La interfaz no alcanza Ollama. Verifica la dirección; recuerda que una GUI en contenedor no ve tu host como
localhost. - 401 en el endpoint alojado. Falta la clave o es incorrecta. Pégala de nuevo sin espacios y asegúrate de que la GUI la envíe como token bearer.
- 404 en todas las peticiones. La URL base probablemente le falta
/v1o lo tiene dos veces. - Las respuestas se detienen o la interfaz se cuelga. Algunas interfaces almacenan salida en streaming a través de un proxy. Prueba la prueba curl directa; si transmite, revisa la configuración del proxy delante de tu GUI.
- Respuestas locales lentas. El modelo es muy grande para tu VRAM y usa memoria del sistema. Elige una cuantización menor o cambia ese chat a la conexión alojada.
Ten en cuenta una regla para la ficción y las aplicaciones de compañía para adultos: el modelo alojado responde sin rechazos de contenido para uso adulto lícito, pero el contenido sexual que involucre a menores de edad nunca está permitido, y el servicio lo aplica como un límite estricto.
Límites y costos que debes conocer en una interfaz
Los frontends pueden enviar varias solicitudes a la vez, por ejemplo, al generar un título de chat en segundo plano mientras la respuesta principal se transmite. Una clave completa permite 8 solicitudes concurrentes y 300 por minuto. Una clave de prueba permite 2 concurrentes y 60 por minuto. Una solicitud en streaming mantiene su espacio hasta que finaliza. Si excedes un límite, obtienes HTTP 429 con el código rate_limited o concurrency, y ante una sobrecarga temporal, un 429 con Retry-After: 5. Desactivar la generación de títulos en segundo plano en la interfaz gráfica es una solución sencilla para las claves de prueba.
El costo es por token: $0.15 por 1M de entrada y $0.50 por 1M de salida. Un turno de chat con 2.000 tokens de historial y una respuesta de 500 tokens cuesta $0.0003 más $0.00025, total $0.00055. Los encabezados de respuesta incluyen X-Balance-USD, así que puedes ver cómo disminuye tu crédito. Los detalles sobre recargas están en la página de precios. Este sitio es solo cripto: USDT en TRC20 o USDC en Base, cualquier monto entero de $20 a $500.
La ventana de contexto es de 100,000 tokens, por lo que chats muy largos costarán más por turno a medida que crezca el historial, porque todo el historial se envía cada vez. La mayoría de las interfaces tienen una configuración para recortar o resumir mensajes antiguos.
Más guías
Preguntas y respuestas
¿Ollama tiene su propia interfaz gráfica?
Ollama es principalmente un servidor y una herramienta de línea de comandos. Las ventanas de chat provienen de proyectos separados como Open WebUI o clientes de escritorio a los que te conectas.
¿Puede una GUI usar un modelo local y uno alojado?
Sí, si el front-end admite varias conexiones. Añade Ollama como una conexión y una URL compatible con OpenAI como la otra, y luego selecciona el modelo por chat.
¿Por qué mi GUI no muestra modelos para el endpoint alojado?
Comprueba que la base URL termina en /v1, que la clave no tenga espacios extraños y que la interfaz gráfica pueda llamar a GET /v1/models. Si sigue fallando, escribe manualmente el ID del modelo uncensored.
¿Qué hago si obtengo HTTP 429?
Has alcanzado el límite de peticiones o concurrencia. Reduce las peticiones simultáneas, espera el número de segundos que indica Retry-After y reintenta.