Entwirren Sie die Geheimnisse strukturierten Outputs aus LLMs: JSON und darüber hinaus

Die Generierung strukturierter Outputs aus großen Sprachmodellen (Large Language Models, LLMs) ist eine der faszinierendsten und zugleich herausforderndsten Aufgaben in der Welt der künstlichen Intelligenz. Es ist von entscheidender Bedeutung, dass der Output dieser Modelle nicht nur korrekt, sondern auch in einem verwendbaren Format wie JSON oder XML vorliegt. Die Community ist aktiv dabei, verschiedene Ansätze und Bibliotheken zu erforschen und zu testen, um diese Herausforderung zu meistern. Einer der vielversprechendsten Ansätze ist die BoundaryML-Library (BAML). Ein Entwickler von BAML hat die Möglichkeiten der Bibliothek auf einer interaktiven Plattform vorgestellt und detailliert beschrieben, welche JSON-Fehler sie toleriert und welche Modelle am besten mit diesem Parsing-Ansatz funktionieren. Zu den häufig tolerierten Fehlern gehören Schlüssel ohne Zeichenfolgen, das Aufzwingen von Singular-Typen in Arrays, das Entfernen von Präfix- oder Suffix-Tags und viele weitere.

Ein interessanter Aspekt, der von den Kommentatoren hervorgehoben wurde, ist die Möglichkeit, XML als Struktur für den Output von LLMs zu verwenden. Claude, ein Modell, das speziell für den Umgang mit XML trainiert wurde, ist hierbei führend. Im Gegensatz zu JSON bietet XML die Möglichkeit, die Struktur durch spezifische Tags wie und besser zu definieren und so die Fehleranfälligkeit zu reduzieren. Dies macht das Parsing einfacher und zuverlässiger. Allerdings gibt es auch Nachteile, wie die höhere Anzahl an Tokens und die potenziell höheren Kosten und Geschwindigkeitsprobleme bei komplexeren Schemata.

image

Ein weiterer interessanter Diskussionspunkt war der Einsatz von grammatikalischen Constraints und Token-Masking. Modelle wie llama.cpp bieten die Möglichkeit, die Ausgabe auf Basis einer definierten Grammatik zu beschränken. Dies erfordert jedoch oft den Besitz des Modells, was für viele Entwickler ein Hindernis darstellt. Stattdessen setzen einige Bibliotheken auf das Neuanfordern (Reprompting) der Antwort, was allerdings zu längeren Latenzzeiten führen kann. Ein Zuschauer berichtete von seiner Erfahrung mit JSON-Modus via OpenAI API, der in den meisten Fällen gut funktionierte, aber gelegentlich zu gut formatiertem, aber schema-inkompatiblem Output führte.

Die Methodik zur Generierung strukturierter Outputs wirft auch Fragen zur Benutzerfreundlichkeit und Entwicklungsproduktivität auf. Während einige Entwickler gerne die vollständige Kontrolle über die Erstellung der Prompts und deren Struktur haben möchten, bevorzugen andere vielleicht eine Bibliothek, die durch automatische Codegenerierung und statische Analyse den Entwicklungsprozess erleichtert. Hier kommt BAML ins Spiel, das beides bietet: eine vollständige Sicht auf das Prompt sowie automatisierte Hilfestellungen durch einen VSCode Playground. Entwickler können somit effizienter testen und ihre Prompts iterativ verbessern.

Zusammenfassend lässt sich sagen, dass die Generierung strukturierter Outputs aus LLMs ein komplexes, aber faszinierendes Feld ist. Ob durch JSON, XML oder andere methodische Ansätze – jeder hat seine Vor- und Nachteile. Die Wahl des richtigen Ansatzes hängt stark von den spezifischen Anforderungen und Rahmenbedingungen des jeweiligen Projekts ab. Entwickler sollten bereit sein, verschiedene Methoden auszuprobieren und die besten Praktiken in ihre Arbeitsabläufe zu integrieren. Wie die Diskussion zeigt, sind dabei sowohl technische Perfektion als auch pragmatische Ansätze gefragt, um den gewünschten Output zu erzielen.


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *