Dokumentation

Smart-Home-Assistant-Demo

Demo-Code: ein Smart-Home-Assistant, der TypeSafe verwendet, um Nutzeranfragen auszuwerten.

In Aktion ansehen

So funktioniert es

Spekulatives Fan-out

Das wichtigste hier gezeigte Muster ist spekulatives Fan-out. Jede Nutzeranfrage wird gegen eine lange Liste von Fragen ausgewertet, darunter viele, die sich für die meisten Anfragen als irrelevant erweisen.

Betrachten wir die folgende Nutzeranfrage:

„Schalte alle Lichter im Haus aus“

Das ist eine sehr einfache Anfrage, und unser Code muss nur die Antworten auf die folgenden Fragen berücksichtigen:

  • „Um welche Kategorie von Anfrage handelt es sich?“ (Smarthome-Befehl)
  • „Auf welche Domäne zielt diese Anfrage?“ (ganzes Haus)
  • „Auf welchen Gerätetyp zielt diese Anfrage?“ (Lichter)
  • „Welche Aktion soll bei den Lichtern ausgeführt werden?“ (ausschalten)

Beachte, dass die letzte Frage unter der Annahme formuliert ist, dass der Nutzer einen Befehl an die Lichter sendet, und wir sie stellen, bevor wir wissen, was der Nutzer tatsächlich anfragt. Das nennen wir eine „spekulative Frage“ – wir stellen sie, bevor wir überhaupt wissen, ob sie relevant ist, was es uns erlaubt, alle Fragen parallel auszuwerten und uns darauf zu verlassen, dass Code die irrelevanten Ergebnisse im Nachhinein herausfiltert. Das ist ein zentrales Muster für Systeme, die mit einer einzigen Gruppe von Fragen eine große Vielfalt von Nutzeranfragen bewältigen können.

Der falsche Weg: sequenzielle API-Aufrufe

Der falsche Weg wäre, die Fragen auf mehrere API-Aufrufe aufzuteilen und Fragen erst zu stellen, wenn du sicher bist, dass du die Antwort brauchst:

  • „Um welche Kategorie von Anfrage handelt es sich?“ (Smarthome-Befehl)

Dann, erst wenn du weißt, dass es ein Smarthome-Befehl ist:

  • „Auf welche Domäne zielt diese Anfrage?“ (ganzes Haus)
  • „Auf welchen Gerätetyp zielt diese Anfrage?“ (Lichter)

Dann, erst wenn du weißt, dass es auf Lichter zielt:

  • „Welche Aktion soll bei den Lichtern ausgeführt werden?“ (ausschalten)

Dieser Ansatz optimiert auf eine minimale Anzahl von Fragen, ist am Ende aber viel langsamer und teurer, als alle Fragen in einem einzigen vorab gesendeten API-Aufruf zu bündeln.

TypeSafe und LLM-Paarung

Diese Demo zeigt außerdem, wie TypeSafe mit LLMs kombiniert werden kann, um ein System zu betreiben, das manchmal einen Schritt zur Zeichenkettenerzeugung braucht:

Aufteilen einer zusammengesetzten Nutzeranfrage: Eine der Fragen in dieser Demo ist eine Noul-Frage, die erkennt, ob die Nutzeranfrage nach mehr als einer eigenständigen Aktion verlangt. Ist das der Fall, verwendet das System ein LLM, um die Anfrage in eine Liste atomarer Befehle aufzuteilen. Die aufgeteilten Anfragen werden dann von TypeSafe einzeln ausgewertet.

Rückfall auf ein konversationelles LLM: Wenn TypeSafe feststellt, dass die Nutzeranfrage eine Bitte um allgemeine Informationen oder ein Gespräch ist, ruft das System ein LLM auf, um eine freie Antwort zu erzeugen. So kann ein interaktives System Anfragen mit bekanntem deterministischem Verhalten schnell und kosteneffizient bearbeiten und bietet zugleich die Flexibilität eines generativen LLM, wenn sie gebraucht wird. Die anfängliche TypeSafe-Antwort ist im Vergleich zur LLM-Antwort so schnell, dass sie dem Gesamtsystem nur vernachlässigbare Latenz hinzufügt.

Selbst ausprobieren

Diese Demo ist eine einfache Vite/React-Single-Page-App, die die TypeSafe-API verwendet, um Nutzeranfragen auszuwerten. Der vollständige Quellcode wird zum Release auf GitHub verfügbar sein. Seine README enthält Anweisungen, um die Demo lokal auszuführen, und einen Überblick darüber, welche Teile des Quellcodes für welche Teile der Demo zuständig sind.