Integrar Ollama con Python: ejemplos de API REST y cliente en Python

+ Ejemplos Específicos Utilizando LLMs de Pensamiento

Índice

En este post, exploraremos dos formas de conectar tu aplicación Python a Ollama: 1. A través de HTTP REST API; 2. A través de la biblioteca oficial de Python de Ollama.

Cubriremos tanto las llamadas chat como generate, y luego discutiremos cómo usar eficazmente los “modelos de pensamiento”.

ollama y python

Ollama ha llegado rápidamente a ser una de las formas más convenientes de ejecutar modelos de lenguaje grandes (LLMs) localmente. Para ver cómo Ollama se compara con vLLM, Docker Model Runner, LocalAI y proveedores en la nube — incluyendo cuándo elegir cada uno — consulta LLM Hosting: Local, Self-Hosted & Cloud Infrastructure Compared. Con su interfaz simple y soporte para modelos populares de código abierto como Llama 3, Mistral, Qwen2.5, e incluso variantes de “pensamiento” como qwen3, es fácil integrar capacidades de IA directamente en tus proyectos de Python — sin depender de APIs en la nube externas.


🧩 Requisitos previos

Antes de sumergirte, asegúrate de tener:

  • Ollama instalado y en ejecución localmente (ollama serve)
  • Python 3.9+
  • Dependencias necesarias:
pip install requests ollama

Confirma que Ollama está en ejecución ejecutando:

ollama list

Deberías ver modelos disponibles como llama3, mistral o qwen3.


⚙️ Opción 1: Usando la API REST de Ollama

La API REST es ideal cuando deseas el máximo control o al integrar con marcos que ya manejan solicitudes HTTP.

Ejemplo 1: API de chat

import requests
import json

url = "http://localhost:11434/api/chat"

payload = {
    "model": "llama3.1",
    "messages": [
        {"role": "system", "content": "Eres un asistente de Python."},
        {"role": "user", "content": "Escribe una función que invierta una cadena."}
    ]
}

response = requests.post(url, json=payload, stream=True)

for line in response.iter_lines():
    if line:
        data = json.loads(line)
        print(data.get("message", {}).get("content", ""), end="")

👉 La API REST de Ollama transmite las respuestas línea por línea (similar a la API de transmisión de OpenAI). Puedes acumular contenido o mostrarlo en tiempo real para chatbots o herramientas CLI.


Ejemplo 2: API de generación

Si no necesitas contexto de chat ni roles, usa el punto final más simple /api/generate:

import requests

url = "http://localhost:11434/api/generate"
payload = {
    "model": "llama3.1",
    "prompt": "Explica la recursión en una oración."
}

response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
    if line:
        print(line.decode("utf-8"))

Este punto final es ideal para tareas de generación de texto de un solo disparo — resúmenes, fragmentos de código, etc.


🐍 Opción 2: Usando la biblioteca de Python de Ollama

El cliente de Python de Ollama proporciona una interfaz más limpia para desarrolladores que prefieren permanecer completamente en Python.

Ejemplo 1: API de chat

import ollama

response = ollama.chat(
    model="llama3.1",
    messages=[
        {"role": "system", "content": "Eres un asistente de código."},
        {"role": "user", "content": "Genera un script de Python que liste todos los archivos en un directorio."}
    ]
)

print(response['message']['content'])

Esto devuelve el mensaje final como un diccionario. Si deseas transmisión, puedes iterar sobre el flujo de chat:

stream = ollama.chat(
    model="llama3.1",
    messages=[
        {"role": "user", "content": "Escribe un haiku sobre la recursión."}
    ],
    stream=True
)

for chunk in stream:
    print(chunk['message']['content'], end='', flush=True)

Ejemplo 2: API de generación

import ollama

output = ollama.generate(
    model="llama3.1",
    prompt="Resuma el concepto de decoradores en Python."
)

print(output['response'])

O transmite el resultado:

stream = ollama.generate(
    model="llama3.1",
    prompt="Lista tres ventajas de usar Python para proyectos de IA.",
    stream=True
)

for chunk in stream:
    print(chunk['response'], end='', flush=True)

🧠 Trabajando con modelos de “pensamiento”

Ollama admite modelos de “pensamiento” como qwen3, diseñados para mostrar sus pasos de razonamiento intermedio. Estos modelos producen una salida estructurada, a menudo en un formato como:

</think>

Paso de razonamiento aquí...

Esto los hace útiles para:

  • Depurar el razonamiento del modelo
  • Investigación sobre interpretabilidad
  • Construir herramientas que separen pensamiento de salida

Ejemplo: Usando un modelo de pensamiento

import ollama

response = ollama.chat(
    model="qwen3",
    messages=[
        {"role": "user", "content": "¿Cuál es la capital de Australia?"}
    ]
)

content = response['message']['content']

# Opcionalmente extrae la parte de “pensamiento”
import re
thinking = re.findall(r"</think>

(.*?)`", content, re.DOTALL)
answer = re.sub(r"