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:
- LLMs mit Ollama lokal auf dem Mac nutzen
- Ollama auf dem Mac verwenden
- Ollamas API auf dem Mac mit curl nutzen
- Ollamas API mit Python nutzen
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/generateEin 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 ollamaIhr 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 chatDer 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 try–except-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.