Einleitung
Große Sprachmodelle (oder LLMs) können uns überraschend detaillierte Antworten auf Anfragen geben. Vielleicht haben Sie schon einmal mit einem Sprachmodell gechattet und waren begeistert, wie effektiv es ist, damit Ideen zu entwickeln.
Benutzer
Es regnet in Seattle (Überraschung!). Haben Sie 3 schnelle Vorschläge, was ich dieses Wochenende tun könnte? Halten Sie es kurz und bündig.
ChatGPT
- Besuchen Sie das Seattle Art Museum (SAM) für einen Tag voller künstlerischer Inspiration und Erkundung.
- Genießen Sie einen gemütlichen Nachmittag in einem lokalen Café, schlürfen Sie Ihren Lieblingstee und tauchen Sie in ein gutes Buch ein.
- Nutzen Sie das regnerische Wetter für eine malerische Fahrt zu den Snoqualmie Falls und erleben Sie den majestätischen Wasserfall in seiner ganzen Pracht.
Diese Modelle sind für sich genommen großartige Chat-Assistenten, aber können sie verwendet werden, um natürliche Sprachschnittstellen zu einer Anwendung hinzuzufügen? Die Antwort ist, wie viele von uns gesehen haben, "ja - irgendwie", und es hängt wirklich davon ab, wie wir das Modell fragen.
Hinzufügen von Struktur
Denken Sie daran, dass diese Modelle standardmäßig in natürlicher Sprache antworten, also so, wie wir heute lesen und schreiben. Traditionelle Programme sind jedoch schlecht darin, mit diesen Antworten zu arbeiten. Die meisten Softwaresysteme erwarten, dass sie mit einer gewissen Struktur arbeiten, über Bytes, Zeichen, JSON-Blobs usw. – nicht mit natürlicher Sprache wie Deutsch. Wenn wir keine Struktur haben, müssen wir extrahieren, was uns interessiert, und das ist möglicherweise nicht immer praktikabel.
Ein Weg, etwas Struktur hinzuzufügen und das Parsen zu erleichtern, könnte sein, nach einer Liste von Antworten zu fragen.
Benutzer
Geben Sie 3 Vorschläge für bestimmte Orte in Seattle für einen Regentag. Antworten Sie in Form einer Aufzählung. Seien Sie prägnant.
ChatGPT
- Seattle Art Museum: Erkunden Sie die umfangreiche Kunstsammlung und genießen Sie die Indoor-Ausstellungen.
- Chihuly Garden and Glass: Bewundern Sie die atemberaubenden Glasarbeiten von Dale Chihuly in einem überdachten Garten und einer Galerie.
- Pacific Science Center: Nehmen Sie an interaktiven Ausstellungen, Planetariumsshows und IMAX-Filmen teil und erleben Sie einen Tag voller lehrreicher Unterhaltung.
Vielleicht reicht eine Aufzählung aus, aber wie würden wir diese Daten aufteilen? Die führenden Aufzählungspunkte entfernen und bei ": " trennen, um den Veranstaltungsort von seiner Beschreibung zu trennen? Was ist, wenn ein Veranstaltungsort einen ": " in seinem Namen hat? Es stellt sich heraus, dass wir immer noch Probleme beim Parsen natürlicher Sprache haben.
Was wäre, wenn wir das Modell nach einem viel strukturierteren Format wie JSON fragen würden? Viele Sprachmodelle sind tatsächlich großartig darin, JSON zu generieren!
Benutzer: Geben Sie 3 Vorschläge für bestimmte Orte in Seattle für einen Regentag. Antworten Sie in Form von JSON. Das JSON sollte das folgende Format haben
[ { "venue": "...", "description": "..." }, { "venue": "...", "description": "..." } ]
ChatGPT
[ { "venue": "Seattle Art Museum", "description": "The Seattle Art Museum (SAM) is a world-class museum with a diverse collection of art from around the globe. It offers a great indoor activity for a rainy day, allowing you to explore various art exhibitions and displays, including contemporary art, African and Oceanic art, and European painting and sculpture." }, { "venue": "Chihuly Garden and Glass", "description": "Chihuly Garden and Glass is an extraordinary exhibition showcasing the breathtaking glass artwork of Dale Chihuly. Located at the Seattle Center, this indoor attraction offers a mesmerizing experience as you wander through vibrant glass sculptures and installations. The beautiful interplay of light and color will captivate your senses, making it a perfect rainy day destination." }, { "venue": "Museum of Pop Culture", "description": "The Museum of Pop Culture (MoPOP) is a vibrant museum dedicated to contemporary pop culture, music, science fiction, and more. It features engaging exhibits that celebrate music icons, explore science fiction themes, and delve into the world of video games. Whether you're a fan of music, movies, or pop culture in general, MoPOP offers an immersive and entertaining experience, making it an ideal choice on a rainy day." } ]
Hier haben wir ein Modell gebeten, direkt mit JSON-Code zu antworten und eine Art "Vorlage" oder Beispielantwort zur Verfügung gestellt, um seine Antwort zu leiten. Wie Sie sehen können, hat es ziemlich gut funktioniert!
Beispielantworten sind großartig, aber wir fragten uns, ob es einen anderen Ansatz gäbe. In unserem Fall fragten wir, ob wir ein Modell einfach mit TypeScript-Typen steuern könnten.
Benutzer: Geben Sie 3 Vorschläge für bestimmte Orte in Seattle für einen Regentag. Antworten Sie streng mit JSON. Das JSON sollte mit dem TypeScript-Typ
Responseaus dem Folgenden kompatibel seininterface Response { data: Array<{ venue: string, description: string }>; }ChatGPT
{ "data": [ { "venue": "Museum of Pop Culture", "description": "Explore the fascinating world of popular culture through interactive exhibits, music memorabilia, and multimedia displays at the Museum of Pop Culture." }, { "venue": "Seattle Art Museum", "description": "Indulge in the diverse collection of artworks from around the world at the Seattle Art Museum, featuring both contemporary and classical pieces." }, { "venue": "Pike Place Market", "description": "Enjoy the vibrant atmosphere of Pike Place Market, where you can wander through covered stalls offering fresh produce, crafts, and delicious food from local vendors." } ] }
Das funktioniert ziemlich gut! Und obwohl es konzeptionell einfach ist, ist es eine sehr mächtige Methode, um die Lücke zwischen natürlicher Sprache und etwas, das unsere Anwendungen verarbeiten können, zu schließen. Wir wollten es jedoch so einfach wie möglich machen, dieses Muster zu verwenden, und einige der scharfen Kanten von Sprachmodell-Antworten glätten.
Das ist die Kernidee hinter TypeChat. Indem wir einem Modell einfach ein Schema (einige Typen) und eine Anfrage geben, können wir natürliche Sprache in eine Anwendung integrieren und durch gut typisierte strukturierte Daten arbeiten.
Einführung von TypeChat
TypeChat erleichtert das Erstellen von Schnittstellen für natürliche Sprache mithilfe von Typen.
Definieren Sie einfach Typen, die die in Ihrer NL-Anwendung unterstützten Absichten darstellen. Das kann so einfach sein wie eine Schnittstelle zur Kategorisierung von Stimmungen oder komplexere Beispiele wie Typen für einen Warenkorb oder eine Musikanwendung. Um zusätzliche Absichten zu einem Schema hinzuzufügen, kann ein Entwickler die Absichten durch Typkomposition hinzufügen, z. B. durch Hinzufügen zusätzlicher Typen in eine diskriminierte Union. Um Schemata hierarchisch zu gestalten, kann ein Entwickler ein "Metaschemas" verwenden, um basierend auf der Benutzereingabe ein oder mehrere Unterschemata auszuwählen.
Nachdem Sie Ihre Typen definiert haben, kümmert sich TypeChat um den Rest, indem es
- Eine Aufforderung an das LLM mit Typen erstellt.
- Die LLM-Antwort validiert, ob sie dem Schema entspricht. Wenn die Validierung fehlschlägt, wird die nicht konforme Ausgabe durch weitere Interaktion mit dem Sprachmodell repariert.
- Die Instanz prägnant (ohne LLM) zusammenfasst und bestätigt, dass sie mit der Benutzerabsicht übereinstimmt.
Typen sind alles, was Sie brauchen!