Integrare Ollama con Python: esempi di API REST e client Python

+ Esempi Specifici Utilizzando LLM Pensanti

Indice

In questo post, esploreremo due modi per connettere la tua applicazione Python a Ollama: 1. Attraverso l’HTTP REST API; 2. Attraverso la libreria ufficiale Python di Ollama.

Copriremo entrambi i chat e i generate calls, e poi discuteremo come utilizzare efficacemente i “modelli di pensiero”.

ollama e python

Ollama ha rapidamente diventato uno dei modi più convenienti per eseguire modelli linguistici di grandi dimensioni (LLMs) localmente. Per vedere come Ollama si confronta con vLLM, Docker Model Runner, LocalAI e fornitori di cloud — incluso quando scegliere ciascuno — vedi LLM Hosting: Local, Self-Hosted & Cloud Infrastructure Compared.

Con la sua interfaccia semplice e il supporto per popolari modelli open come Llama 3, Mistral, Qwen2.5, e anche varianti “pensiero” come qwen3, è facile integrare le capacità AI direttamente nei tuoi progetti Python — senza dover fare affidamento su API cloud esterne.


🧩 Prerequisiti

Prima di immergerti, assicurati di avere:

  • Ollama installato e in esecuzione localmente (ollama serve)
  • Python 3.9+
  • Dipendenze necessarie:
pip install requests ollama

Conferma che Ollama è in esecuzione eseguendo:

ollama list

Dovresti vedere modelli disponibili come llama3, mistral o qwen3.


⚙️ Opzione 1: Utilizzo dell’API REST di Ollama

L’API REST è ideale quando si desidera il massimo controllo o quando si integra con framework che gestiscono già le richieste HTTP.

Esempio 1: API Chat

import requests
import json

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

payload = {
    "model": "llama3.1",
    "messages": [
        {"role": "system", "content": "Sei un assistente Python."},
        {"role": "user", "content": "Scrivi una funzione che inverte una stringa."}
    ]
}

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="")

👉 L’API REST di Ollama streama le risposte riga per riga (simile all’API di streaming di OpenAI). Puoi accumulare il contenuto o visualizzarlo in tempo reale per chatbot o strumenti CLI.


Esempio 2: API Generate

Se non hai bisogno di contesto o ruoli di chat, utilizza l’endpoint più semplice /api/generate:

import requests

url = "http://localhost:11434/api/generate"
payload = {
    "model": "llama3.1",
    "prompt": "Spiega la ricorsione in una frase."
}

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

Questo endpoint è perfetto per compiti di generazione di testo in un’unica volta — riassunti, frammenti di codice, ecc.


🐍 Opzione 2: Utilizzo della Libreria Python di Ollama

Il client Python di Ollama fornisce un’interfaccia più pulita per gli sviluppatori che preferiscono rimanere completamente in Python.

Esempio 1: API Chat

import ollama

response = ollama.chat(
    model="llama3.1",
    messages=[
        {"role": "system", "content": "Sei un assistente per il codice."},
        {"role": "user", "content": "Genera uno script Python che elenca tutti i file in una directory."}
    ]
)

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

Questo restituisce l’ultimo messaggio come un dizionario. Se desideri lo streaming, puoi iterare sullo stream della chat:

stream = ollama.chat(
    model="llama3.1",
    messages=[
        {"role": "user", "content": "Scrivi un haiku sulla ricorsione."}
    ],
    stream=True
)

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

Esempio 2: API Generate

import ollama

output = ollama.generate(
    model="llama3.1",
    prompt="Riassumi il concetto di decoratori in Python."
)

print(output['response'])

O streama il risultato:

stream = ollama.generate(
    model="llama3.1",
    prompt="Elenca tre vantaggi nell'utilizzo di Python per progetti AI.",
    stream=True
)

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

🧠 Lavorare con i “Modelli di Pensiero”

Ollama supporta i “modelli di pensiero” come qwen3, progettati per mostrare i loro passaggi di ragionamento intermedio. Questi modelli producono un output strutturato, spesso in un formato come:

</think>

Passaggi di ragionamento qui...

Questo li rende utili per:

  • Debug del ragionamento del modello
  • Ricerca sull’interpretabilità
  • Costruzione di strumenti che separano pensiero da output

Esempio: Utilizzo di un Modello di Pensiero

import ollama

response = ollama.chat(
    model="qwen3",
    messages=[
        {"role": "user", "content": "Qual è la capitale dell'Australia?"}
    ]
)

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

# Opzionalmente estrai la parte "pensiero"
import re
thinking = re.findall(r"</think>

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