Hallo @StephaneB, entschuldige die Verzögerung.
Zum Kern der Sache: Ich werde keine Liste von vorab geschriebenen, zufällig ausgewählten Sätzen verwenden. Gladys’ Richtung ist KI: eine generierte und kontextuelle Antwort, kein starres Wörterbuch. Also ist das hier zu klärende Thema nicht „wie man die KI umgeht“, sondern „warum die KI bei dir 15 Sekunden braucht“.
Und 15-20 Sekunden sind nicht normal. Um transparent über die Architektur zu sein: Die Aktion „KI fragen“ macht nicht nur einen einzigen Aufruf. Zuerst gibt es einen schnellen Klassifizierungsaufruf, dann den Hauptaufruf und ein oder mehrere Hin- und Her-Gespräche, wenn das Modell entscheidet, ein Tool zu verwenden (z. B. eine Temperatur lesen). Aber selbst bei drei Hin- und Her-Gesprächen sollte es bei 1,5-2 Sekunden liegen, nicht bei 15. Also passiert bei deiner Installation etwas Spezifisches.
Ich habe keine Zeit, selbst zu ermitteln, aber die gute Nachricht ist, dass du alles hast, was du brauchst, um es ohne mich zu tun — ohne Befehlszeile, und Gladys zeichnet bereits alles Notwendige auf. Hier sind die Schlüssel.
1. Genau sehen, was die KI gemacht hat, Aufruf für Aufruf
Das ist der Kern der Diagnose. Starte deine Szene, warte auf die Sprachantwort, dann gehe zu Integrationen → Künstliche Intelligenz, Abschnitt „KI-Debug“ → „JSON-Kontext für Debug herunterladen“.
Öffne die erhaltene Datei (ein Texteditor reicht aus) und schaue in den Abschnitt _debug → conversationHistory. Sie enthält zwei Dinge:
toolCalls: Die genaue Liste aller Tools, die die KI aufgerufen hat, mit jeweils ihrem Namen (tool_name), ihrem Ergebnis (tool_status: success oder error), den Argumenten, die ihnen übergeben wurden, und der genauen Uhrzeit (created_at).
messages: Das vollständige Gespräch in chronologischer Reihenfolge — deine Nachricht, jeder Tool-Aufruf, die endgültige Antwort — jeder Eintrag mit Zeitstempel.
Durch Subtraktion der created_at-Zeiten siehst du genau, wie viele Tools während deiner Szenenausführung aufgerufen wurden, welche und welches die Zeit in Anspruch genommen hat. Zwei Signale, auf die du achten solltest:
- mehrere Tool-Aufrufe für einen einfachen Bestätigungssatz → jeder Aufruf ist eine vollständige Hin- und Rückfahrt zum Modell, wahrscheinlich verschwinden dort deine Sekunden;
- ein
tool_status: "error" → ein fehlgeschlagenes Tool lässt das Modell für eine weitere Runde neu starten, was die Gesamtzeit verdoppeln oder verdreifachen kann. Das ist etwas, das man nicht vermutet und das einem in dieser Datei ins Auge springt.
Die von einer Szene ausgelösten Aufrufe werden hier gut aufgezeichnet: Der Verlauf ist der des in der Aktion „KI fragen“ ausgewählten Benutzers. Denke also daran, die Szene vor dem Herunterladen der Datei auszulösen.
Zusätzlich listet der Abschnitt tools derselben Datei alle Tools auf, die dem Modell bei jedem Aufruf gesendet wurden. Wenn er sehr umfangreich ist (viele Geräte), belastet das auch jede Anfrage.
2. Bei Bedarf mit den Logs ergänzen
Wenn die obige Datei nicht ausreicht, um eine Entscheidung zu treffen, Einstellungen → System → Logs herunterladen, dann suche nach [AI_CHAT] in der Datei. Du erhältst die Server-Seiten-Spur, zeilenweise zeitgestempelt:
[AI_CHAT] New request userId=... message=...
[AI_CHAT] Forcing tool_choice=required for categories=device_query
[AI_CHAT] Assistant turn iteration=1 tool_calls=1 tool_choice=required tools=[...]
[AI_CHAT] Running tool=...
[AI_CHAT] Tool finished tool=... status=success resultLength=...
[AI_CHAT] Assistant turn iteration=2 tool_calls=0 ...
[AI_CHAT] Completed answerLength=...
Die Lesart:
| Wo die Zeit vergeht |
Was das bedeutet |
Zwischen New request und dem ersten Assistant turn |
Lokale Vorbereitung (Gladys baut die Liste der Tools aus deiner Datenbank auf) + Klassifizierungsaufruf |
Viele Zeilen Assistant turn iteration= |
Die Anzahl der Hin- und Rückfahrten zum Modell explodiert |
Zwischen Running tool= und Tool finished tool= |
Die Ausführung des Tools auf deiner langsamen Instanz |
Ein einzelner Assistant turn, aber 10 Sekunden, um ihn zu erreichen |
Das Modell oder deine Netzwerkverbindung |
3. Ein sofortiger Vergleichstest
Im Chat mit Gladys stelle nacheinander deine vollständige Eingabeaufforderung und dann eine kurze Version ohne jeden Verweis auf einen Sensor: „Gib mir einen kurzen Satz, um zu bestätigen, dass du dich um die Anfrage kümmerst“. Zeit beide mit der Stoppuhr.
Wenn die kurze in 2 Sekunden antwortet und die lange in 15 Sekunden, ist es bestätigt: Es ist deine Eingabeaufforderung, die Tool-Aufrufe auslöst. Die Erwähnung der Wassertemperatur lässt das Modell verstehen, dass es einen Sensor lesen muss, bevor es antwortet. In diesem Fall hast du einen sofortigen Gewinn, indem du deine Eingabeaufforderung umschreibst, damit sie keine Daten benötigt — und die Datei aus Schritt 1 wird es dir schwarz auf weiß zeigen.
Lass dich von einer KI bei der Auswertung helfen
Das ist genau die Art von Aufgabe, bei der Claude (oder dein bevorzugter Assistent) sehr effektiv ist, und es erspart dir das Warten auf mich. Gib ihm den Inhalt von _debug.conversationHistory mit einer Anweisung wie:
„Hier ist der zeitgestempelte Verlauf eines KI-Aufrufs in Gladys Assistant im JSON-Format. Liste die aufgerufenen Tools in der Reihenfolge auf, berechne die Dauer zwischen jedem Schritt und sage mir, wo die Mehrheit der Gesamtzeit vergeht. Melde jedes fehlgeschlagene Tool.“
Gladys ist Open Source, also kannst du ihm auch die Datei geben, die den gesamten Datenstrom verwaltet, damit er über den echten Code nachdenken kann: server/lib/gateway/gateway.forwardMessageToAiChat.js im GitHub-Repository des Projekts.
Kleine Vorsichtsmaßnahme: Diese Datei enthält deine Nachrichten, deine Raum- und Gerätenamen. Entferne alles, was du nicht teilen möchtest, bevor du es irgendwo einfügst, hier wie anderswo.