Die Ollama-Bibliothek für Python

Dies ist der fünfte Artikel, in dem es um Ollama geht, das Programm für die Verwaltung lokaler Sprachmodelle. Bisher wurden folgende Beiträge veröffentlicht:

Neben Ollama geht es in diesem Artikel auch um Python, denn ich möchte zeigen, wie man mit Python auf Ollama — genauer gesagt die Ollama-API — zugreifen kann. Das klingt wie eine Wiederholung des vierten Beitrags dieser Artikelserie. Denn dort wurde mit requests auf einen von der Ollama-API bereitgestellten Endpunkt zugegriffen:

http://localhost:11434/api/generate

Ein Endpunkt, der auch im Tutorial zur Nutzung von Ollama über den Befehl curl verwendet wurde. Im Gegensatz zu jenen Tutorials wird nun allerdings die Bibliothek ollama verwendet. Durch sie haben wir eine weitere Möglichkeit, lokale Sprachmodelle zusammen mit Python zu verwenden.

Um die gezeigten Beispiele nachvollziehen zu können, müssen auf eurem System Python und Ollama vorhanden sein. Außerdem müßt ihr mit pip die Bibliothek ollama installieren:

pip install ollama

Ihr solltet zumindest ein Sprachmodell für die lokale Verwendung heruntergeladen haben. Im folgenden Beispiel wird gemma4 verwendet. Der hier gezeigt Code funktioniert auf Linux, macOS und Windows.

Den Anfang machen — wie so häufig — die Importanweisungen:

#!/usr/bin/env python3

from ollama import ResponseError
from ollama import ChatResponse
from ollama import chat

Der Code für die Anfrage an das Sprachmodell sieht wie folgt aus:

response: ChatResponse = chat(
    model="gemma4:e2b",
    messages=[
        {
            "role": "user",
            "content": "Wer war Charles de Gaulle?",
        },
    ],
)
print(response["message"]["content"])

Es ist selbstverständlich erforderlich, dass zu verwendende Modell anzugeben (model="gemma4:e2b"). Dann folgt die Nachricht an das Modell (messages=[...]). Die Liste enthält ein Dictionary mit den Schlüsseln role und content. Mit user wird angegeben, dass die Anfrage direkt vom Nutzer kommt. Die konkrete Frage ist der Wert zum Schlüssel content, in diesem Fall also: „Wer war Charles de Gaulle?“ Über die Funktion print() wird das Ergebnis im Terminal ausgegeben.

Da Fehler auftreten können, sollte der Code in einem tryexcept-Block eingebettet werden:

try:
    response: ChatResponse = chat(
        model="gemma4:e2b",
        messages=[
            {
                "role": "user",
                "content": "Wer war Charles de Gaulle?",
            },
        ],
    )
    print(response["message"]["content"])
except ResponseError as e:
    msg = getattr(e, "error", str(e))
    print(f"\033[31mError: {msg}\033[0m")

Und das ist auch schon der komplette Code. Zum Schluss aber noch eine Anmerkung zu \033 und 31m. Dies dient dazu, dass die Fehlerausgabe rot dargestellt wird. Bei \033 handelt es sich um den Start einer ANSI-Escape-Sequenz, 31m setzt die Farbe auf rot und \033[0m setzt die Formatierung wieder zurück. Dies ist eine Möglichkeit, um Text im Terminal in einer anderen Farbe darzustellen.