Ollama über die API in eine Python-Anwendung integrieren REST
Ollama stellt auf Port 11434 zwei HTTP-APIs bereit: eine native API (/api/generate, /api/chat) und eine OpenAI-kompatible API (/v1/chat/completions). Letztere ist der Königsweg zur Integration der Ollama-API in Python: Ihr Code verwendet genau dasselbe SDK wie mit GPT-4, läuft aber auf Ihrem Rechner. Dieser Leitfaden behandelt konkrete Implementierungsmuster – Streaming, strukturiertes JSON, Function Calling – mit FastAPI- und Flask-Beispielen, die Sie direkt in ein Projekt kopieren können.
#Warum die REST-API verwenden
Die CLI ollama run est ist praktisch zum Testen, aber sie wurde nicht für Aufrufe aus einer Anwendung konzipiert. Die REST-API hingegen wurde dafür entwickelt: Standard-HTTP-Anfragen, JSON-Eingabe und Ausgabe, Streaming über Server-Sent Events. Das nutzen alle Interfaces (Open WebUI, Cline, LangChain) im Hintergrund.
- Kompatibilität mit OpenAI
- Der Endpoint /v1/chat/completions akzeptiert genau den gleichen Payload wie api.openai.com/v1/chat/completions. Sie ändern die URL und den Schlüssel, und Ihr bestehender Code funktioniert.
- Keine Neuerfindung
- Das offizielle openai-SDK für Python (oder jeder beliebige HTTP-Client) kommuniziert direkt mit Ollama. Sie müssen sich nicht in einen speziellen Client einarbeiten.
- Entkopplung der Laufzeitumgebung
- Ihre Python-Anwendung läuft in ihrem Container, Ollama in seinem. Wenn Sie zu vLLM oder LM Studio wechseln, ändern Sie nur die base_url.
- Mehrere Clients gleichzeitig
- Mehrere Python-Skripte, ein Jupyter-Notebook und Open WebUI können auf dieselbe Ollama-Instanz zugreifen. Der Daemon verwaltet die Warteschlange selbstständig.
#Voraussetzungen
Dieser Guide führt Sie zum Modell. Das Kit führt Sie zum Copiloten, der in Ihrem Editor Code schreibt.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
- Ollama installiert und gestartet
- Der Daemon muss auf http://localhost:11434 lauschen. Prüfen Sie dies mit curl http://localhost:11434 – Sie müssen "Ollama is running" sehen.
- Python 3.10+
- Neuere SDKs (openai 1.x) erfordern mindestens Python 3.8, für moderne Annotationen jedoch Python 3.10+.
- Ein chatkompatibles Modell
- ollama pull qwen3.5:9b ou gemma4:12b. Pour le function calling, choisissez un modèle qui le supporte : Qwen 3.5, Granite 4.2, Mistral Small 24B, Devstral.
- Ausreichend VRAM
- Ein 9B-Modell in Q4 (wie Qwen 3.5 9B) benötigt etwa 6–7 GB VRAM, ein 12B-Modell (Gemma 4 12B) etwa 8 GB. Ohne GPU läuft es ebenfalls, allerdings mit 5–10 Tokens pro Sekunde.
#1. Die beiden APIs von Ollama
Bevor wir Python-Code schreiben, werfen wir im Terminal einen Blick auf die Endpunkte, um genau zu sehen, was passiert. Mit curl kommunizieren wir direkt mit dem Daemon, ohne jegliche Abstraktion.
Der zweite gibt einen Payload zurück, der exakt mit dem von OpenAI identisch ist: die Felder choices[0].message.content, id, model, usage. Das ermöglicht den direkten Austausch ohne Anpassungen.
#2. Das OpenAI-SDK auf Ollama ausrichten
Das Grundmuster einer Integration der Ollama-API in Python passt in fünf Zeilen: Man installiert das OpenAI-SDK, instanziiert es mit der lokalen base_url und ruft chat.completions.create wie gewohnt auf.
Starten Sie das Skript. Wenn Ollama läuft und das Modell heruntergeladen wurde, erhalten Sie einen Satz. Falls Sie eine ConnectionRefusedError sehen, überprüfen Sie mit ollama ps, ob der Daemon aktiv ist.
- model
- Der genaue Name, wie von ollama list angegeben (qwen3.5:9b, gemma4:12b, mistral-small usw.).
- messages
- Die Liste der Konversationsrunden. Unterstützte Rollen: system, user, assistant, tool.
- temperature
- 0 für deterministisch, 0,7 für kreativ. Bei Datenextraktion bleiben Sie bei 0 oder 0,1.
- max_tokens
- Obergrenze für die Antwort. Optional – Ollama verwendet einen sinnvollen Standardwert für num_predict.
#3. Streaming Token für Token mit SSE
Für eine gute Benutzererfahrung (Chatbot, längere Textgenerierung) sollten Sie die Tokens nach und nach anzeigen, statt bis zum Ende zu warten. Ollama unterstützt Streaming über Server-Sent Events, und mit dem OpenAI-SDK lässt sich das mit einer einfachen Python-Schleife umsetzen.
Jeder Chunk enthält ein Delta (den hinzugefügten Textabschnitt). Im letzten Chunk ist delta.content auf None gesetzt und finish_reason ausgefüllt – das ist das Stoppsignal.
#4. JSON-Modus für strukturierte Ausgaben
Wenn Sie die Antwort parsen möchten (Extraktion, Klassifizierung, Payload-Generierung), reicht die Aufforderung „Gib JSON zurück“ im Prompt nicht aus – das Modell fügt oft zusätzlichen Text davor oder danach ein. Der JSON-Modus zwingt den Decoder, ausschließlich gültiges JSON zu erzeugen.
response_format={"type": "json_object"} aktiviert den JSON-Modus. Bei Ollama bedeutet das eine Beschränkung auf Ebene des Samplers: Jedes Token, das ungültiges JSON erzeugen würde, wird verworfen. Das ist zuverlässiger, als per Prompt „Antworte in JSON“ vorzugeben und zu beten.
#5. Funktionen aufrufen (Toolverwendung)
Function Calling ermöglicht es dem Modell, zu signalisieren, dass es eine Python-Funktion aufrufen möchte, statt direkt zu antworten. Nicht alle Modelle unterstützen dies – prüfen Sie auf ollama.com/library, ob unter den Fähigkeiten die Angabe „tools“ erscheint. Qwen 3.5, Granite 4.2, Mistral Small 24B und Devstral unterstützen dies nativ.
Die Schleife hat zwei Durchläufe: Der erste gibt tool_calls zurück (das Modell sagt „Rufe meteo mit ville=Bordeaux auf“), der zweite liefert die Antwort in natürlicher Sprache, nachdem Sie die Funktion ausgeführt und ihr Ergebnis eingespeist haben. Im Produktionsbetrieb wiederholen Sie die Schleife, solange tool_calls nicht leer ist.
#6. Ollama über FastAPI verfügbar machen
Typischer Fall: Ihr Frontend ruft Ihr Python-Backend auf, das wiederum Ollama aufruft. FastAPI handhabt asynchrone Abläufe sauber, und die Streaming-Ausgabe gelangt über eine StreamingResponse bis zum Browser.
Die Option -N (--no-buffer) von curl deaktiviert die clientseitige Pufferung, damit Sie den Stream in Echtzeit sehen können. Im JavaScript-Frontend lesen Sie den ReadableStream der fetch-Antwort – genauso wie bei der OpenAI-API.
#7. Flask-Chatbot mit Historie
Für einen vollständigen Chatbot muss der Nachrichtenverlauf zwischen den Gesprächsrunden erhalten bleiben. Hier ist eine minimalistische Flask-Version, die die Unterhaltung im Arbeitsspeicher hält (im Produktivbetrieb durch eine echte Session/DB ersetzen).
#Für die Produktion
- Ollama über das Netzwerk verfügbar machen
- Standardmäßig lauscht der Daemon nur auf 127.0.0.1. Um den Zugriff von anderen Rechnern zu erlauben, starten Sie ihn mit OLLAMA_HOST=0.0.0.0 – und schalten Sie einen Reverse-Proxy mit Authentifizierung davor, sonst kann jeder im Netzwerk Ihre Modelle nutzen.
- Nebenläufigkeit und Warteschlange
- Ollama serialisiert die Anfragen pro Modell. Um mehrere Benutzer parallel zu bedienen, starten Sie mehrere Instanzen oder wechseln Sie zu vLLM, das dynamisches Batching nativ unterstützt.
- Clientseitige Timeouts
- Eine Anfrage an ein noch nicht geladenes Modell kann 10–30 s dauern (Laden in den VRAM). Stellen Sie das Timeout des OpenAI-Clients mit OpenAI(..., timeout=120) ein, statt den Standardwert der Bibliothek von 10 Minuten beizubehalten; beim Reverse Proxy ist das Timeout jedoch oft kurz.
- Modell geladen halten
- Standardmäßig entlädt Ollama ein Modell nach 5 Minuten Inaktivität aus dem Speicher. Übergeben Sie bei API-Aufrufen keep_alive="30m" über die native API /api/chat oder lassen Sie regelmäßig einen Ping senden, um einen Kaltstart bei der ersten Benutzeranfrage zu vermeiden.
- Beobachtbarkeit
- Protokollieren Sie systematisch model, prompt_tokens und completion_tokens (in reponse.usage enthalten). Das sind Ihre Inferenzmetriken – hilfreich, um zu erkennen, wenn ein Modell langsamer wird oder die Tokenzahl eines Prompts stark ansteigt.
#Weiterführende Informationen
Sie verfügen über die Grundbausteine. Je nach Anwendungsfall bieten sich drei Möglichkeiten zur Vertiefung an:
- Einen Agenten bauen, der selbstständig entscheidet
- Der Leitfaden zu lokalen KI-Agenten in Python mit LangChain erweitert Function Calling zu einer vollständigen Agentenschleife mit der Verwaltung mehrerer Werkzeuge und mehrstufigem Schlussfolgern.
- RAG für Ihre Dokumente hinzufügen
- Damit Ihre App auf Grundlage eines internen Korpus (PDFs, Notizen, Code) antwortet, binden Sie eine Vektordatenbank an. Der Einführungsleitfaden zu lokalem RAG vermittelt die Grundlagen.
- Das Verhalten des Modells anpassen
- Statt den System-Prompt bei jedem Aufruf zu wiederholen, erstellen Sie mithilfe eines Modelfile eine Variante. Der Leitfaden zur Anpassung mit Ollama Modelfile zeigt, wie Sie einen französischsprachigen Assistenten oder einen Programmiermodus unter einem wiederverwendbaren Modellnamen festlegen.
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.