Handbuch für strukturierte LLM-Ausgaben
(nanonets.com)- Praxisleitfaden für Entwickler, der die Instabilität beheben soll, die auftritt, wenn Large Language Models (LLMs) strukturierte Formate wie JSON, XML oder Code erzeugen
- Behandelt deterministische Techniken für strukturierte Ausgaben, um zu kompensieren, dass Ergebnisse aufgrund ihrer probabilistischen Eigenschaften nicht deterministisch beschädigt sein können
- Umfasst den gesamten Prozess, darunter interne Funktionsweise, Auswahl von Tools und Techniken, Deployment, Skalierung und Kostenoptimierung sowie Verbesserung der Ausgabequalität
- Stellt die neuesten Informationen im sich schnell wandelnden Bereich der strukturierten Generierung in Form eines fortlaufend aktualisierten Dokuments gebündelt bereit
- Unverzichtbare Referenz für Entwickler, die LLMs programmatisch für Datenextraktion, Codegenerierung und Tool-Aufrufe einsetzen
Warum strukturierte LLM-Ausgaben nötig sind
- LLMs erzeugen meist syntaktisch gültige Ausgaben wie JSON, XML oder Code, doch aufgrund ihrer probabilistischen Eigenschaften können Formatfehler oder unvollständige Ergebnisse auftreten
- Das verursacht Probleme in automatisierten Prozessen wie Datenextraktion, Codegenerierung oder Tool-Aufrufen
- Um diese Probleme zu lösen, sind deterministische Verfahren für strukturierte Ausgaben erforderlich
- Das Handbuch behandelt Tools und Techniken im gesamten Spektrum, damit Entwickler strukturierte Ausgaben zuverlässig implementieren können
Die wichtigsten Inhalte des Handbuchs
- Enthält praxisorientierte Themen wie interne Funktionsweise, optimale Tools und Techniken, Kriterien für die Tool-Auswahl, Methoden zum Aufbau, Deployment und zur Skalierung von Systemen, Optimierung von Latenz und Kosten sowie Verbesserung der Ausgabequalität
- Jeder Abschnitt ist als schrittweiser Ansatz, den Entwickler direkt anwenden können, aufgebaut
- Führt aktuelle Forschung und Open-Source-Tools zu strukturierten Ausgaben in einem einzigen Dokument zusammen
Aktualität und Updates
- Da sich Techniken für strukturierte Generierung extrem schnell weiterentwickeln, sind bestehende Materialien schnell veraltet
- Dieses Handbuch wird als regelmäßig aktualisiertes Living Document gepflegt
- Entwickler können an einem Ort auf aktuelle Informationen zugreifen, statt zahlreiche Papers, Blogs und GitHub-Repositories durchsuchen zu müssen
Einsatzmöglichkeiten
- Kann vollständig der Reihe nach gelesen oder als Nachschlagewerk genutzt werden, um benötigte Themen sofort zu finden
- Auf praktische Entwicklerbedürfnisse ausgerichtet, sodass es bei der Lösung konkreter Probleme schnell referenziert werden kann
Urheber und Community
- Das Handbuch wurde vom Nanonets-Team erstellt
- Sie betreuen das Nanonets-OCR-Modell und die Open-Source-Bibliothek zur Dokumentverarbeitung docstrange
- Über den Newsletter für die LLM-Entwickler-Community werden im Zwei-Wochen-Rhythmus aktuelle Insights, Durchbrüche sowie nützliche Tools und Techniken bereitgestellt
1 Kommentare
Hacker-News-Kommentare
Wirklich ein wunderschöner Leitfaden. Besonders gut gefallen haben mir die Tab-Wechsel-Animationen über mehrere Seiten hinweg
Ich dachte, ich hätte grammar-constrained generation ziemlich gut verstanden (ich habe auch ein paar Beiträge zur Grammar-Implementierung in llama.cpp geleistet), aber trotzdem habe ich aus diesem Leitfaden neue Einsichten gewonnen
Strukturierte Ausgaben sind meiner Meinung nach eine der am stärksten unterschätzten Funktionen von LLM-Engines. Dank Grammar-Constraints kann man LLMs zuverlässig als Teil größerer Pipelines verwenden, etwa als tool-calling agent
Die Ausgabe kann semantisch falsch sein, ist aber grammatikalisch immer korrekt. Das ist besonders wichtig, wenn man lokale Modelle verwendet
Zum Beispiel funktioniert es selbst auf kleiner Hardware stabil, wenn man wie in Jarts Raspberry-Pi-basiertem Spamfilter-Beispiel auf das TinyLlama-Modell eine Grammar anwendet, die nur
"yes"oder"no"ausgeben darfWirklich ein hervorragender Leitfaden. Ich habe während meiner Promotion zu structured generation geforscht und teile für Interessierte ein paar Materialien
Als Bibliotheken gibt es Outlines, Guidance und XGrammar
Bei den Papers empfehle ich Efficient Guided Generation for Large Language Models, Automata-based constraints for language model decoding und Pitfalls, Subtleties, and Techniques in Automata-Based Subword-Level Constrained Generation
Als Blogposts gibt es LLM Decoding with Regex Constraints und Coalescence: making LLM inference 5x faster
Ein gut aufbereiteter Leitfaden. Wenn man mehr über Guidance- & llguidance-Optimierungen erfahren möchte, lohnt sich unser kurzes Paper
Dieser Leitfaden behandelt die zwei Methoden, die die meisten Leute hauptsächlich verwenden, sehr gut. Allerdings kann constrained generation von der ursprünglichen Verteilung des LLM abweichen
Wenn ein LLM zum Beispiel lange strukturierte Objekte erzeugt, bevorzugt es oft Muster wie „…“, und constrained generation kann das durch erzwungene schließende Anführungszeichen oder Ähnliches korrigieren und dadurch sogar schlechtere Ergebnisse produzieren
Resampling hingegen wiederholt den Vorgang, bis ein gültiges Ergebnis entsteht, und ist dadurch stabiler
Außerdem halte ich es qualitativ und kostenseitig für besser, einfach erneut zu versuchen, statt Schemafehler immer weiter in den Kontext zu schreiben und ihn dadurch zu verlängern
Ich frage mich, ob SoTA-Modelle wie Opus oder Gemini weiterhin output schema enforcement brauchen
Heutige Modelle machen bei JSON oder Codegenerierung kaum noch Syntaxfehler, daher würde mich interessieren, ob intern trotzdem noch Schema-Validierung verwendet wird
Dass strukturierte Generierung für kleine Modelle nötig ist, verstehe ich
json\nan, daher ist es weiterhin sicherer, ein JSON-Antwortschema vorzugebenDas Erzwingen strukturierter Ausgaben führt zu einem Leistungsverlust. Je nach Fall kann es zwei- bis dreimal langsamer werden. Man muss je nach Situation abwägen, ob diese Kosten akzeptabel sind
Ein wirklich erstaunlicher Leitfaden. Ich wünschte, es hätte vor einem Jahr schon so ein Material gegeben. Ich werde es auf jeden Fall mit Leuten in meinem Umfeld teilen
Ein guter Leitfaden. Besonders das Diagramm zum masked decoding gefällt mir
Ich frage mich, ob es ein Ausgabeformat gibt, das zuverlässiger und leichter zu parsen ist als JSON. YAML und TOML haben jeweils ihre Nachteile, könnten aber bei Tokenzahl oder Kosten günstiger sein
Mich interessiert der Tech-Stack hinter den Dokumentations-/Cookbook-Seiten. Es sieht weder nach MkDocs noch nach GitBook aus; ich würde gern wissen, womit es gebaut wurde