LLM-Ausgaben strukturieren: Microsoft-Library TypeChat 0.1.0 nutzt TypeScript
Das neue Release der Microsoft-Library für strukturierte Ausgaben großer Sprachmodelle ist weiterhin experimentell, bringt jedoch neue Funktionen.
Microsoft hat Version 0.1.0 seiner experimentellen Library TypeChat vorgelegt. Sie dient dem Erzeugen strukturierter Ausgaben großer Sprachmodelle (LLMs), um sie für traditionelle Programme verständlich zu machen. Dazu dienen TypeScript-Typdefinitionen und die JavaScript Object Notation (JSON), nach deren Vorbild die Ausgaben erfolgen sollen. Das neue Release verändert unter anderem den TypeScript-Unterbau und führt Zod-Validatoren ein.
TypeScript, Zod und JSON sorgen für Struktur
Microsoft hatte das experimentelle Projekt im Juli 2023 angekündigt. Wie das Unternehmen zum initialen Release bekannt gab, soll TypeChat dann zum Einsatz kommen, wenn man seiner Anwendung ein Natural Language Interface hinzufügen möchte. Dabei soll die Library bestehende Schwierigkeiten angehen, die Ausgaben von großen Sprachmodellen für traditionelle Programme aufgrund einer unerwarteten Struktur darstellen können.
Um die Ausgaben so zu strukturieren, wie die Programme sie erwarten, verwendet Microsoft für TypeChat sowohl TypeScript-Typen als auch das JSON-Schema – und ab dem aktuellen Release auch Zod. Derzeit eignet sich TypeChat ausschließlich für JavaScript und TypeScript. Weitere Sprach-Ökosysteme wie Python und .NET sollen folgen.
Version 0.1.0 ist flexibler und führt Zod-Validatoren ein
In der neuen TypeChat-Version kommen nun nicht mehr die Rohdaten einer TypeScript-Schemadatei zum Einsatz, da dieser Ansatz einige Tücken barg. So mussten etwa alle relevanten Daten innerhalb einer einzigen Schemadatei enthalten sein, diese musste stets vorliegen und das Schema ließ sich nicht ohne Weiteres ändern.
Um weitere Flexibilität zu bieten, hat das TypeChat-Team aus dem TypeChatJsonTranslator
ein granulareres Konzept erstellt: den TypeChatJsonValidator
. Er ist dafür verantwortlich, eine String-Schema-Repräsentation zum Anleiten großer Sprachmodelle zu generieren und sicherzustellen, dass die ausgegebenen Daten einem Typ entsprechen. Dem Erstellen eines TypeChatJsonTranslator
geht somit nun das Erstellen eines TypeChatJsonValidator
voraus. Diese Validatoren lassen sich austauschen.
Um den Ansatz zu verdeutlichen, zeigt das Entwicklungsteam die bisherige Vorgehensweise
// Load up the contents of our "Response" schema.
const schema = fs.readFileSync(path.join(__dirname, "sentimentSchema.ts"), "utf8");
const translator = typechat.createJsonTranslator<SomeType>(model, schema, "SomeType");
// Process requests interactively.
typechat.processRequests("> ", /*inputFile*/ undefined, async (request) => {
const response = await translator.translate(request);
if (response.success) {
console.log(`❌ ${response.message}`);
return;
}
console.log("The request was translated into the following value:")
console.log(response.data);
});
und das neue Verfahren in Version 0.1.0:
import fs from "fs";
import path from "path";
import { createLanguageModel, createJsonTranslator } from "typechat";
import { createTypeScriptJsonValidator } from "typechat/ts";
import { SentimentResponse } from "./sentimentSchema";
const model = createLanguageModel(process.env);
const schema = fs.readFileSync(path.join(__dirname, "sentimentSchema.ts"), "utf8");
const validator = createTypeScriptJsonValidator<SentimentResponse>(schema, "SentimentResponse");
const translator = createJsonTranslator(model, validator);
translator.translate("hello world!").then(response => {
if (!response.success) {
console.log(response.message);
return;
}
console.log(`The sentiment is ${response.data.sentiment}`);
});
Daneben ermöglicht Version 0.1.0, aus einem Zod-Schema einen Validator zu erstellen. Zod ist eine Schemavalidierungsbibliothek im TypeScript/JavaScript-Ökosystem. Aus Sicht des TypeChat-Teams spricht für Zod insbesondere die Möglichkeit, Schemata dynamisch zu konstruieren. Dabei betont das Entwicklungsteam, dass das Verwenden eines Zod-Schemas zwar Vorteile bringe, aber Entwicklerinnen und Entwickler je nach Präferenz ein TypeScript-Schema vorziehen können.
Weitere Details zu diesen und anderen Neuerungen bietet der TypeChat-Blog. Wer TypeChat in Aktion sehen möchte, findet Beispiele im GitHub-Repository des Projekts.
(mai)