Worum es geht
Die Klassifikation ist der Schritt einer Überwachungs-Pipeline, an dem Inhalte an ein Sprachmodell gehen. Bei einer Cloud-API verlassen dabei alle Texte deinen Rechner. Das stört, sobald die Feeds vertrauliche Inhalte enthalten oder die Kosten mit der Menge wachsen. Die Alternative ist ein selbst gehostetes Modell, das auf eigener Hardware läuft.
Ollama ist ein Werkzeug, das quantisierte Modelle lokal bereitstellt und eine einfache HTTP-Schnittstelle bietet. Daneben gibt es offene Agenten-Projekte, die Modelle ohne fremde API-Schlüssel betreiben. Welche Funktionen ein bestimmtes Projekt hat, steht in dessen eigener Dokumentation, hier geht es um das Prinzip.
Warum lokal?
- Datenschutz: Texte bleiben auf deinem Rechner. Das ist der wichtigste Grund, wenn Feeds interne oder vertrauliche Inhalte enthalten.
- Kosten: Es fallen keine Gebühren pro Aufruf an, sondern nur Strom und Hardware. Bei großen Mengen wird das planbar.
- Unabhängigkeit: Kein API-Schlüssel, der ablaufen kann, keine Preisänderung, kein Anbieter, der ein Modell abschaltet.
Dem stehen Nachteile gegenüber: Kleinere Modelle sind bei schwierigen Aufgaben schwächer als große Cloud-Modelle, die Antwortzeit hängt von deiner Hardware ab, und du kümmerst dich selbst um Betrieb und Updates.
Modellgröße und Arbeitsspeicher
Quantisierte Modelle brauchen deutlich weniger Speicher als ihre Originale. Als grobe Faustregel gilt: Ein Modell mit wenigen Milliarden Parametern in stark quantisierter Form passt in einige Gigabyte Arbeitsspeicher, größere Modelle brauchen entsprechend mehr und laufen ohne Grafikkarte spürbar langsam. Prüfe die konkrete Größe in der Modellbeschreibung und teste mit deinen echten Texten.
Für Klassifikation mit wenigen Labels genügt oft ein kleines Modell. Für Zusammenfassungen oder schwierige Abgrenzungen lohnt sich ein größeres.
Der Aufruf per HTTP
Ollama lauscht standardmäßig lokal und nimmt Anfragen per HTTP entgegen. Ein Aufruf mit Timeout und klarer Fehlerbehandlung sieht so aus:
import logging
import requests
log = logging.getLogger("llm")
OLLAMA_URL = "http://localhost:11434/api/generate"
def ask_local(prompt: str, model: str, timeout: int = 120) -> str | None:
try:
r = requests.post(OLLAMA_URL, timeout=timeout, json={
"model": model, "prompt": prompt, "stream": False})
r.raise_for_status()
return r.json().get("response", "").strip()
except requests.RequestException as exc:
log.warning("Lokales Modell nicht erreichbar: %s", exc)
return None
Die Rückgabe None signalisiert dem Aufrufer, dass die Klassifikation nicht möglich war.
Fallback-Strategie
Ein lokales Modell kann ausfallen, etwa wenn der Rechner neu startet oder das Modell noch lädt. Plane deshalb bewusst, was dann passiert:
- Erneut versuchen, mit kurzer Wartezeit.
- Den Eintrag zurückstellen und beim nächsten Lauf erneut versuchen. Das ist für unkritische Meldungen die einfachste Lösung.
- Bei unkritischen Feeds auf eine Cloud-API ausweichen, bei sensiblen nie.
def classify(text: str, sensitive: bool) -> str | None:
answer = ask_local(text, model="klein")
if answer is None and not sensitive:
answer = ask_cloud(text)
return answer
Die Funktion ask_cloud steht hier für deinen eigenen Cloud-Aufruf. Wichtig ist die Regel, dass sensible Feeds niemals den lokalen Pfad verlassen.
Betrieb und Heartbeat
Ein lokales Modell ist ein weiterer Dienst, der laufen muss. Der tägliche Heartbeat sollte deshalb auch melden, wie viele Klassifikationen lokal gelungen sind, wie viele zurückgestellt wurden und ob der Fallback genutzt wurde. Bleibt die Meldung aus oder steigt die Zahl der Rückstellungen, ist der Modelldienst der erste Verdächtige.
Wann sich das lohnt (und wann nicht)
Ein lokales Modell lohnt sich, wenn Datenschutz wichtig ist, große Mengen anfallen oder du unabhängig von einem Anbieter bleiben willst. Es braucht Hardware mit genug Speicher und die Bereitschaft, einen weiteren Dienst zu pflegen.
Bleib bei der Cloud, wenn die Feeds öffentlich sind, das Volumen klein ist und die Qualität eines großen Modells den Ausschlag gibt. Ein Hybrid aus beidem, wie oben gezeigt, deckt oft beide Bedürfnisse ab.