Módulo 4: Ollama - Introducción
API REST de Ollama
Descripción
Ollama incluye servidor API REST compatible con OpenAI. Aprenderás a usarlo para integrar con Python/JavaScript.
Tiempo: 25 minutos
Dificultad: Media
🎯 Objetivos
- ✅ Iniciar servidor Ollama
- ✅ Test con curl
- ✅ Integrar con OpenAI SDK
- ✅ Entender diferencias API
🚀 Iniciar Servidor
Background daemon (automático):
Ollama inicia servidor automáticamente al usar ollama run.
Verificar:
curl http://localhost:11434/api/tags
Manual start:
ollama serve
Output:
Ollama server running on http://localhost:11434
Puerto default: 11434 (vs 1234 de LM Studio)
✅ Test con Curl
List models:
curl http://localhost:11434/api/tags
Output:
{
"models": [
{
"name": "mistral:latest",
"size": 4108916224
}
]
}
Generate (completion):
curl http://localhost:11434/api/generate -d '{
"model": "mistral",
"prompt": "¿Qué es Python?"
}'
Output (streaming):
{"model":"mistral","response":"Python"}
{"model":"mistral","response":" es"}
{"model":"mistral","response":" un"}
...
{"done":true}
Chat (conversational):
curl http://localhost:11434/api/chat -d '{
"model": "mistral",
"messages": [
{"role": "user", "content": "Hola"}
]
}'
💻 Integración con Python (OpenAI SDK)
Código (compatible OpenAI):
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Required pero no valida
)
response = client.chat.completions.create(
model="mistral",
messages=[
{"role": "user", "content": "Hola"}
]
)
print(response.choices[0].message.content)
Mismo código del Módulo 2, solo cambia base_url!
🔄 Migrar de LM Studio a Ollama
LM Studio:
client = OpenAI(
base_url="http://localhost:1234/v1",
api_key="not-needed"
)
Ollama:
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama"
)
Único cambio: Puerto (1234 → 11434)
📊 Ollama API vs OpenAI API
| Feature | Ollama | OpenAI |
|---|---|---|
| Endpoint | localhost:11434 | api.openai.com |
| Auth | No required | API key required |
| Streaming | ✅ Default | ✅ Opcional |
| Models | Local (mistral, llama2) | Cloud (gpt-3.5, gpt-4) |
| Cost | $0 | $$$ |
⚙️ API Endpoints
1. Generate (completion):
POST /api/generate
Body: {"model": "mistral", "prompt": "..."}
2. Chat (conversational):
POST /api/chat
Body: {"model": "mistral", "messages": [...]}
3. List models:
GET /api/tags
4. Pull model:
POST /api/pull
Body: {"name": "mistral"}
5. Delete model:
DELETE /api/delete
Body: {"name": "mistral"}
🧪 Test Script Completo
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama"
)
# Test 1: Simple chat
print("Test 1: Simple chat")
response = client.chat.completions.create(
model="mistral",
messages=[{"role": "user", "content": "Hola"}]
)
print(response.choices[0].message.content)
# Test 2: Conversación con contexto
print("\nTest 2: Con contexto")
messages = [
{"role": "system", "content": "Eres un asistente útil."},
{"role": "user", "content": "Me llamo Juan"},
{"role": "assistant", "content": "Hola Juan"},
{"role": "user", "content": "¿Cuál es mi nombre?"}
]
response = client.chat.completions.create(
model="mistral",
messages=messages
)
print(response.choices[0].message.content) # "Tu nombre es Juan"
🐛 Troubleshooting
Error: Connection refused
Causa: Servidor no corriendo
Solución:
ollama serve
# O
ollama run mistral # Auto-start server
Error: Model not found
Causa: Modelo no descargado
Solución:
ollama pull mistral
ollama list # Verifica
✅ Resumen
- Servidor API en
localhost:11434 - Compatible con OpenAI SDK (cambio mínimo)
- Streaming por default
- Sin API key necesaria
- Reutiliza código Módulos 2-3
Siguiente: 05-integracion-python.md
Crearás chatbot completo con Ollama + Python.
Tiempo: 30 min