Strukturierte Ausgaben mit Ollama
(ollama.com)Strukturierte Ausgaben
6. Dezember 2024
Ollama unterstützt jetzt strukturierte Ausgaben, mit denen sich die Modellausgabe auf ein bestimmtes, durch ein JSON-Schema definiertes Format beschränken lässt. Die Ollama-Bibliotheken für Python und JavaScript wurden aktualisiert, um strukturierte Ausgaben zu unterstützen.
- Anwendungsfälle für strukturierte Ausgaben:
- Parsen von Daten aus Dokumenten
- Extrahieren von Daten aus Bildern
- Strukturierung aller Antworten von Sprachmodellen
- Höhere Zuverlässigkeit und Konsistenz als im JSON-Modus
Erste Schritte
- Neueste Version von Ollama herunterladen
- Ollama-Python- oder JavaScript-Bibliothek auf die neueste Version aktualisieren
cURL
- Mit dem Parameter
formatlassen sich strukturierte Ausgaben an das Modell übergeben
Ausgabe
- Die Antwort wird in einem Format zurückgegeben, das durch das JSON-Schema der Anfrage definiert ist
Python
- Mit der Ollama-Python-Bibliothek das Schema als JSON-Objekt an den Parameter
formatübergeben - Es wird empfohlen, das Schema mit Pydantic zu serialisieren
Ausgabe
name='Canada' capital='Ottawa' languages=['English', 'French']
JavaScript
- Mit der Ollama-JavaScript-Bibliothek das Schema als JSON-Objekt an den Parameter
formatübergeben - Es wird empfohlen, das Schema mit Zod zu serialisieren
Ausgabe
{ name: "Canada", capital: "Ottawa", languages: [ "English", "French" ] }
Beispiele
Datenextraktion
- Ein Schema definieren, das die Informationen beschreibt, um strukturierte Daten aus Text zu extrahieren
- Das Modell extrahiert die Informationen und gibt die Daten im definierten Schema als JSON zurück
Beispielausgabe
pets=[ Pet(name='Luna', animal='cat', age=5, color='grey', favorite_toy='yarn'), Pet(name='Loki', animal='cat', age=2, color='black', favorite_toy='tennis balls') ]
Bildbeschreibung
- Strukturierte Ausgaben können zusammen mit Vision-Modellen verwendet werden
- Mit
llama3.2-visionein Bild beschreiben und strukturierte Ausgaben zurückgeben
Beispielausgabe
summary='A palm tree on a sandy beach with blue water and sky.'objects=[ Object(name='tree', confidence=0.9, attributes='palm tree'), Object(name='beach', confidence=1.0, attributes='sand') ]scene='beach', colors=['blue', 'green', 'white'], time_of_day='Afternoon', setting='Outdoor', text_content=None
OpenAI-Kompatibilität
- Kompatibel mit strukturierten Ausgaben bei Verwendung des OpenAI-Clients
Tipps
- Für eine zuverlässige Nutzung strukturierter Ausgaben:
- Antwortschema mit Pydantic (Python) oder Zod (JavaScript) definieren
- Im Prompt "als JSON zurückgeben" ergänzen, damit das Modell die Anfrage versteht
- Die Temperatur auf 0 setzen, um deterministischere Ausgaben zu erhalten
Nächste Schritte
- Logit Exposure für kontrollierte Generierung
- Verbesserung von Leistung und Genauigkeit strukturierter Ausgaben
- GPU-Beschleunigung für Sampling
- Unterstützung zusätzlicher Formate über JSON-Schema hinaus
1 Kommentare
Hacker-News-Kommentar
Über die gbnf-Funktion von llama.cpp lassen sich stärkere Ausgabebeschränkungen festlegen
Nützlich, weil sich beim Strukturieren normaler Prompts und ihrer Umwandlung in CSV-Daten unnötiger Text entfernen lässt
Mit gemma2:2b kann man Text eingeben und erhält eine strukturierte Ausgabe im JSON-Format
{"amount": 190, "balance": 5098, "category": "Shopping", "place": "Fresh Mart"}Es gibt die Meinung, dass interessant ist, wie sich Beschränkungen auf die Ausgabequalität von LLMs auswirken
Es wird gefragt, ob sich das mit unterstützten Modellen verwenden lässt
Es gibt Neugier, ob llama.cpp und ollama die Funktion für strukturierte Ausgaben von Llama nutzen oder ob das anders implementiert ist
Es wird gefragt, welchen Mehrwert es im Vergleich zu
outlinesgibtDer Grund, weiterhin oobabooga zu verwenden, ist die exlv2-Unterstützung, die auf Dual-3090s effizientere Inferenz bietet
Ein curl-Beispiel sollte besser zuerst kommen
Es wird gefragt, was die beste Methode ist, LLMs strukturierte Eingaben zu geben