Zum Hauptinhalt springen
TypeChat

Techniken

Dieses Dokument beschreibt Techniken für die Arbeit mit TypeChat.

Schema-Engineering

TypeChat ersetzt Prompt-Engineering durch Schema-Engineering: Anstatt unstrukturierte natürlichsprachliche Prompts zu schreiben, um das Format Ihrer gewünschten Ausgabe zu beschreiben, schreiben Sie TypeScript-Typdefinitionen. Diese TypeScript-Schemata sind nicht unbedingt die exakten Typen, die Ihre Anwendung zur Verarbeitung und Speicherung Ihrer Daten verwendet. Vielmehr handelt es sich um Typen, die eine Brücke zwischen natürlicher Sprache und Ihrer Anwendungslogik schlagen, indem sie LLM-Antworten auf eine für Ihre Anwendung sinnvolle Weise steuern und einschränken.

Um eine Analogie zu verwenden: Im Model-View-ViewModel (MVVM) Design-Pattern für Benutzeroberflächen schlägt das ViewModel eine Brücke zwischen der Benutzeroberfläche und der Anwendungslogik, ist aber nicht das Modell, das die Anwendung zur Verarbeitung und Speicherung von Informationen verwendet. Die Schemata, die Sie für TypeChat entwerfen, sind wie das ViewModel, werden aber vielleicht treffender als Response Models bezeichnet.

Um den Erfolg mit TypeChat zu maximieren, empfehlen wir die folgenden Best Practices bei der Definition von Response Model-Typen

  • Halten Sie es einfach (Primitive, Arrays und Objekte).
  • Verwenden Sie nur Typen, die als JSON darstellbar sind (d. h. keine Klassen).
  • Machen Sie Datenstrukturen so flach und regelmäßig wie möglich.
  • Fügen Sie Kommentare zu Typen und Eigenschaften hinzu, die die Absicht in natürlicher Sprache beschreiben.
  • Beschränken Sie die Verwendung von Generics.
  • Vermeiden Sie tiefe Vererbungshierarchien.
  • Verwenden Sie keine bedingten, zugeordneten und indexierten Zugriffstypen.
  • Lassen Sie Raum für LLMs, um leicht "außerhalb der Linien" zu malen (z. B. verwenden Sie string anstelle von Literal-Typen).
  • Fügen Sie eine Notfalllösung hinzu, um Halluzinationen zu unterdrücken.

Der letzte Punkt verdient eine weitere Ausarbeitung. Wir haben festgestellt, dass, wenn Response Models versuchen, Benutzeranfragen in enge Schemata ohne Spielraum zu zwängen, die LLMs wahrscheinlich Antworten auf Benutzeranfragen erfinden, die außerhalb des definierten Bereichs liegen. Wenn Sie beispielsweise Ihren Café-Bot nach "zwei großen Bäumen" fragen, könnte er, wenn keine andere Option besteht, dies in zwei große Lattes umwandeln (ohne Sie darüber zu informieren).

Wenn Sie jedoch eine Notfalllösung in Form einer "unbekannten" Kategorie in Ihrem Schema aufnehmen, leiten die LLMs nicht-domänenbezogene Anfragen gerne in diesen Eimer. Dies unterdrückt nicht nur Halluzinationen erheblich, sondern gibt Ihnen auch eine bequeme Möglichkeit, dem Benutzer mitzuteilen, welche Teile einer Anfrage nicht verstanden wurden. Die Beispiele im TypeChat-Repository verwenden alle diese Technik.