OLLAMA LOCAL: LLMs SIN INTERNET, SIN COSTO, SIN LÍMITE DE CONTEXTO
Groq es rápido. Gemini es capaz. Claude es brillante. Pero todos tienen algo en común: requieren internet, tienen límites de uso, y tus conversaciones pasan por servidores de terceros. Ollama es diferente — es un runtime que corre modelos de lenguaje directamente en tu máquina. Sin internet. Sin API key. Sin costo por token. Tus datos nunca salen de tu disco.
Stack: Ollama · Python · cualquier OS
Proyecto de referencia: FocOs — proveedor LLM local
Objetivo: Independencia tecnológica total — el LLM corre en tu máquina, los datos nunca salen de tu disco
01. EL PROBLEMA QUE RESUELVE
Las APIs de LLMs tienen tres limitaciones que afectan el flujo de trabajo real: requieren internet estable — sin conexión, sin LLM; tienen límites de rate y contexto que interrumpen sesiones largas; y el código y las ideas que compartes van a servidores externos. Para un desarrollador independiente construyendo su ecosistema propio, estas limitaciones no son teóricas — son obstáculos reales.
Para proyectos largos, para trabajo nocturno, para código sensible, o simplemente para quien valora la independencia — Ollama es el grial.
🎓 Explicación no técnica
Imagina que cada vez que quieres hacerle una pregunta a un experto, tienes que llamarlo por teléfono, esperar que esté disponible, y pagarle por minuto. Eso son las APIs de LLMs. Ollama es como tener ese experto viviendo en tu casa. Siempre disponible. Sin teléfono. Sin cuenta. Sin que nadie más escuche la conversación.
02. INSTALACIÓN — 3 MINUTOS EN CUALQUIER OS
Ollama se instala con un solo comando en Linux, un instalador en Windows, y Homebrew en macOS. Una vez instalado, corre como servicio en background y expone una API REST en localhost:11434.
curl -fsSL https://ollama.com/install.sh | sh
# WINDOWS:
# Descargar instalador desde: https://ollama.com/download
# Ejecutar OllamaSetup.exe
# Ollama corre como servicio en background automáticamente
# MACOS:
brew install ollama
# Verificar instalación:
ollama --version
ollama version 0.5.x
# Verificar que el servidor está corriendo:
curl http://localhost:11434/api/tags
# Responde con lista de modelos instalados (vacía al inicio)
03. MODELOS RECOMENDADOS — CUÁL USAR PARA QUÉ
La elección del modelo depende de la RAM disponible y del tipo de tarea. No tiene sentido correr un modelo de 40GB en una máquina de 16GB — la regla es: el modelo más grande que tu hardware corra sin swap.
| Modelo | RAM mínima | Disco | Ideal para |
|---|---|---|---|
| llama3.2:3b | 8 GB | ~2 GB | Tareas simples, completar código corto, preguntas rápidas. |
| llama3.2 | 8 GB | ~5 GB | Desarrollo general, debugging, explicaciones técnicas. El equilibrio perfecto. |
| llama3.3:70b | 32 GB | ~40 GB | Arquitectura compleja, razonamiento profundo, análisis. |
| gemma2:9b | 16 GB | ~6 GB | Código. Excelente relación capacidad/tamaño. De Google. |
| codellama | 8 GB | ~4 GB | Completar funciones, debugging técnico, refactoring. Especializado en código. |
| mistral | 8 GB | ~4 GB | Escritura y síntesis. Rápido y eficiente. |
| deepseek-r1:8b | 8 GB | ~5 GB | Razonamiento paso a paso. Excelente para problemas lógicos complejos. |
04. DESCARGAR Y CORRER UN MODELO
La descarga ocurre una sola vez — el modelo queda guardado localmente y disponible sin conexión de forma permanente. Los comandos de gestión son simples e intuitivos.
ollama pull llama3.2
# Descarga ~5GB — solo una vez, queda guardado localmente
# Correr en modo chat interactivo:
ollama run llama3.2
# >>> Escribe tu mensaje aquí
# Ctrl+D o /bye para salir
# Correr con prompt directo:
ollama run llama3.2 "explica qué hace este código: def fib(n): return n if n<=1 else fib(n-1)+fib(n-2)"
# Gestión de modelos:
ollama list # ver modelos instalados
ollama ps # ver modelos corriendo
ollama rm llama3.2 # eliminar un modelo
ollama pull llama3.2 # actualizar un modelo
05. INTEGRACIÓN CON PYTHON — LA API REST
Ollama expone una API REST en localhost:11434 compatible con el formato OpenAI. Se integra en FocOs exactamente igual que Groq o Gemini — la capa AAL no distingue si el modelo corre en la nube o en tu disco.
import urllib.request, json
def call_ollama(model, messages, base_url='http://localhost:11434'):
url = f'{base_url}/api/chat'
payload = json.dumps({
'model': model,
'messages': messages,
'stream': False,
'options': {
'temperature': 0.7,
'num_ctx': 4096, # Contexto — ajustar según RAM
}
}).encode('utf-8')
req = urllib.request.Request(
url, data=payload,
headers={'Content-Type': 'application/json'},
method='POST'
)
res = urllib.request.urlopen(req, timeout=120)
data = json.loads(res.read())
return data.get('message', {}).get('content', '')
# Verificar disponibilidad antes de llamar:
def ollama_available(base_url='http://localhost:11434'):
try:
urllib.request.urlopen(f'{base_url}/api/tags', timeout=2)
return True
except Exception:
return False
# Uso:
response = call_ollama(
model = 'llama3.2',
messages = [
{'role': 'system', 'content': 'Eres un asistente técnico experto.'},
{'role': 'user', 'content': '¿Cómo implemento un singleton en Python?'}
]
)
06. STREAMING — RESPUESTAS EN TIEMPO REAL
Para respuestas largas, el streaming mejora radicalmente la experiencia — el usuario ve el texto aparecer mientras el modelo genera, en lugar de esperar a que termine todo el procesamiento.
'''
on_token: función que recibe cada fragmento de texto
Ejemplo: on_token = lambda t: print(t, end='', flush=True)
'''
import json, urllib.request
url = 'http://localhost:11434/api/chat'
payload = json.dumps({
'model': model,
'messages': messages,
'stream': True, # Activar streaming
}).encode('utf-8')
req = urllib.request.Request(
url, data=payload,
headers={'Content-Type': 'application/json'},
method='POST'
)
full_response = ''
with urllib.request.urlopen(req, timeout=120) as res:
for line in res:
if line.strip():
chunk = json.loads(line.decode('utf-8'))
token = chunk.get('message', {}).get('content', '')
if token:
on_token(token)
full_response += token
if chunk.get('done', False):
break
return full_response
# Uso:
call_ollama_stream(
'llama3.2',
[{'role': 'user', 'content': 'escribe una función de sorting en Python'}],
on_token = lambda t: print(t, end='', flush=True)
)
07. MODELOS PERSONALIZADOS — MODELFILE
Ollama permite crear modelos personalizados con un system prompt fijo mediante un Modelfile. Útil para crear el asistente Chronos de FocOs como modelo propio — una vez creado, el contexto del ecosistema está disponible sin inyección manual en cada llamada.
FROM llama3.2
SYSTEM """
Eres Chronos — asistente de desarrollo de Frank.
Trabajas dentro de FocOs, el window manager del ser que construye.
Conoces el ecosistema: FocOs, TeliOs, KayrOs, ChronOs, OruX.
Metodología: AAL — Arquitectura Agnóstica de LLM.
Stack preferido: Python + HTML/CSS/JS vanilla. Cero dependencias.
Principio: el contrato es la verdad. El código se regenera.
Responde siempre en el idioma del usuario.
Prioriza soluciones prácticas sobre teoría.
Máximo 3 opciones cuando hay alternativas.
"""
PARAMETER temperature 0.7
PARAMETER num_ctx 4096
# Crear el modelo personalizado:
ollama create chronos -f Modelfile
# Usar desde terminal:
ollama run chronos
# Usar desde Python:
response = call_ollama('chronos', [{'role': 'user', 'content': 'hola'}])
✅ CONCLUSIÓN
Ollama convierte la independencia tecnológica de un principio en una realidad práctica. Un desarrollador con Ollama instalado puede construir software con LLMs a las 3 de la madrugada, sin internet, sin gastar un centavo, sin que ningún servidor externo vea su código. La combinación Ollama + FocOs + AAL es el stack más soberano que existe hoy para desarrollo asistido por IA: el LLM corre en tu máquina, el entorno de trabajo es tuyo, la metodología es tuya, y los datos nunca salen de tu disco.
> SYSTEM_READY > NODE_ONLINE