Contenido

Tutorial de Python con Ollama: conecta modelos con el paquete ollama y OpenAI SDK

Instalación

pip install ollama

Asegúrate primero de que el servicio de Ollama esté en ejecución y de haber descargado el modelo que quieras usar (por ejemplo, ollama pull qwen3:8b).

Conversación básica

from ollama import chat

response = chat(
    model="qwen3:8b",
    messages=[
        {"role": "system", "content": "Responde en español."},
        {"role": "user", "content": "Explica qué es el aprendizaje automático en tres puntos."},
    ],
)

print(response.message.content)

También puedes acceder al objeto de respuesta como si fuera un diccionario: response["message"]["content"].

Salida en streaming

Muestra el texto a medida que se genera:

from ollama import chat

stream = chat(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "Escribe un ejemplo de presentación personal de 100 palabras"}],
    stream=True,
)

for chunk in stream:
    print(chunk.message.content, end="", flush=True)
print()

Conversación con varios turnos: crea un chat en la terminal

El modelo no recuerda el historial por sí solo; debes guardar todos los mensajes de cada turno en una lista:

from ollama import chat

messages = [{"role": "system", "content": "Eres un asistente amable. Responde en español."}]

while True:
    user_input = input("Tú:").strip()
    if user_input in {"exit", "quit", "salir"}:
        break
    messages.append({"role": "user", "content": user_input})

    reply = ""
    print("AI:", end="", flush=True)
    for chunk in chat(model="qwen3:8b", messages=messages, stream=True):
        piece = chunk.message.content
        reply += piece
        print(piece, end="", flush=True)
    print()

    messages.append({"role": "assistant", "content": reply})

Cuanto más larga sea la conversación, más contenido se enviará y puede que se supere la longitud del contexto. En la práctica, puedes conservar solo los turnos más recientes o resumir la conversación anterior.

Parámetros y modo de razonamiento

response = chat(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "¿Cuál es la suma de los números del 1 al 100?"}],
    options={"temperature": 0.2, "num_ctx": 8192},
    think=True,
    keep_alive="30m",
)

print("Razonamiento:", response.message.thinking)
print("Respuesta:", response.message.content)

Leer imágenes

response = chat(
    model="gemma3",
    messages=[{
        "role": "user",
        "content": "¿Qué hay en esta imagen?",
        "images": ["./photo.jpg"],   # También puedes pasar bytes o una cadena base64
    }],
)
print(response.message.content)

Otras funciones

import ollama

ollama.generate(model="qwen3:8b", prompt="Presenta Taipéi en una frase")  # Generación única
ollama.list()                                               # Modelos descargados
ollama.ps()                                                 # Modelos cargados
ollama.pull("nomic-embed-text")                             # Descargar un modelo
ollama.show("qwen3:8b")                                     # Información del modelo
ollama.embed(model="nomic-embed-text", input="Hola")       # Embeddings de texto

Conectarse a otro host

from ollama import Client

client = Client(host="http://192.168.1.50:11434")
response = client.chat(model="qwen3:8b", messages=[{"role": "user", "content": "Hola"}])
print(response.message.content)

También puedes configurar la variable de entorno OLLAMA_HOST; la función chat() predeterminada la usará.

Modo asíncrono

Úsalo en frameworks asíncronos como FastAPI:

import asyncio
from ollama import AsyncClient


async def main():
    client = AsyncClient()
    response = await client.chat(
        model="qwen3:8b",
        messages=[{"role": "user", "content": "Hola"}],
    )
    print(response.message.content)


asyncio.run(main())

Manejo de errores

import ollama

try:
    ollama.chat(model="not-exist", messages=[{"role": "user", "content": "hi"}])
except ollama.ResponseError as e:
    print("Error:", e.error, e.status_code)
    if e.status_code == 404:
        print("El modelo no existe; ejecuta primero ollama pull")
except ConnectionError:
    print("No se puede conectar con Ollama; comprueba que el servicio esté en ejecución")

Usar OpenAI Python SDK

Si tu programa ya usa OpenAI SDK, solo tienes que cambiar base_url:

pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",  # Es obligatorio, pero Ollama no lo comprueba
)

completion = client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "Hola, preséntate"}],
)
print(completion.choices[0].message.content)

Así puedes cambiar el mismo programa entre modelos locales y API en la nube. Frameworks como LangChain y LlamaIndex también pueden conectarse a Ollama de la misma manera.

En la siguiente sección se explica cómo usar JavaScript / Node.js.

Actualizado 12 de octubre de 2026