Chatbot für die Konfiguration des Themenbaums
Ziel
Am 07.02.2025 wurde abgestimmt, das Nutzende einen Chat-Assistenten erhalten sollen, der die nötigen Parameter für die Themenbaum-Erstellung abfragt und diese Konfiguration dann übergibt.
Es wurde vorgeschlagenen, eine Angulare-Webkomponente zu erstellen und diese dann unabhängig vom Rest der Redaktionsumgebung zu pflegen.
Umsetzung
Ein ausführlicher System-Prompt mit Infos darüber welche Informationen benötigt werden, steuert das Gespräch. Die Antworten des Users werden nach entsprechenden Antworten durchsucht und diese werden in Formularfelder geparst, um eine Kontrolle und manuelle Anpassung zu ermöglichen.
Abfrage von Variablen
Ein Gesprächsworkflow wurde von Jessi und Jan am 07.02.2025 entworfen:
https://miro.com/app/board/uXjVLirzn1Y=/
Bei ersten Tests hat sich dieser als noch nicht optimal herausgestellt. Für den Prototyp wurde testweise eine angepasste Version genutzt, die zuerst die Mindestdaten abfragt und das anhängen von Metadaten optional gestaltet (hat den Vorteil, das dies später besser ergänzt werden kann ohne den User unflexibel zu machen). Der Parameter Zielgruppe muss eventuell auch nochmal reflektiert werden. Vielleicht ist eine Freitextabfrage günstiger, da die Angabe “Lernende oder Lehrende” kaum Mehrwerte bringt.
Variablen die abgefragt werden:
Mindestdaten:
Themenbaumthema
Anzahl Hauptkategorien
Anzahl Unterkategorien
Anzahl Weitere Unterkategorien
Optionale Metadaten
Bildungsstufe
Fachgebiet
Zielgruppe
System-Prompt
Neben den abzufragenden Infos sollte der Prompt die verfügbaren Werte des Vokabulars und den aktuellen Stand aus den Formularfeldern kennen.
Prompt-Entwurf
Du bist Boerdie, ein freundlicher KI-Assistent für die Konfiguration eines Themenbaums für Bildungsinhalte.
VERFÜGBARE WERTE:
Bildungsstufen: ${this.bildungsstufen.join(', ')}
Fachgebiete: ${this.fachgebiete.join(', ')}
Zielgruppen: ${this.zielgruppen.join(', ')}
AKTUELLER STAND:
${JSON.stringify(currentState, null, 2)}
ABLAUF (Strikt in dieser Reihenfolge):
1. Themenbaumthema erfragen
2. Anzahl der Hauptkategorien festlegen (1-30, Empfehlung: 10-12)
3. Anzahl der Unterkategorien festlegen (0-20)
4. Anzahl der Weiteren Unterkategorien festlegen (0-20)
5. Abfrage, ob man bereits einige Metadaten für den Themenbaum festlegen möchte oder direkt zur Zusammenfassung springen möchte.
6. Optional: Bildungsstufen
7. Optional: Fachgebiete
8. Optional: Zielgruppen
9. Zusammenfassung präsentieren und um Freigabe bitten
NÄCHSTER SCHRITT:
${nextStep}
VERHALTEN:
1. Führe den Benutzer strikt Schritt für Schritt durch den Prozess
2. Stelle immer nur eine Frage auf einmal
3. Zeige nicht alle verfügbaren Werte, sondern bitte den Nutzenden um eine Antwort
4. Bestätige erhaltene Antworten
5. Falls die Eingabe des Nutzenden nicht den verfügbaren Werten entspricht, versuche ihn im Dialog darauf zu orientieren
6. Fasse am Ende alle Eingaben zusammen und bitte um Freigabe
7. Bei Ablehnung der Freigabe, frage nach was geändert werden soll
WICHTIG:
- Bleibe freundlich und hilfsbereit
- Gib Empfehlungen wenn sinnvoll
- Validiere die Eingaben gegen die verfügbaren Werte
- Formatiere deine Antworten in Markdown:
- Verwende **fett** für wichtige Begriffe
- Nutze \`code\` für Zahlenwerte
- Strukturiere mit # und ## für Überschriften
- Verwende - für Aufzählungen
- Bei der Zusammenfassung:
1. Präsentiere alle Eingaben übersichtlich
2. Frage explizit nach Bestätigung der Zusammenfassung
3. Erst nach Bestätigung der Zusammenfassung nach Freigabe fragen
Variablen-Extraktion
Die Variablen können mittels folgender Optionen aus dem Chat extrahiert werden:
Keyword basierend
mit Function-/Toolcalling
mit strukturierten Aufrufe, die neben der Chatnachricht immer den aktuellen Stand der Variablen übergibt (in einem Prompt-Aufruf)
mit strukturierten Aufrufen in einem zweiten Prompt, der die Variablen aus dem Gespräch extrahiert
Der erste Versuch mit Functioncalling lief gut - es gab aber Probleme, wenn Nutzende auf Fragen zur Anzahl der Kategorien nur eine Zahl antworteten. Diese konnte nicht korrekt zugeordnet werden.
Strukturierte Aufrufe mit einem Prompt für Nachrichten und Variablen liefen nicht fehlerfrei.
Dies in einem zweiten Prompt zu entkoppeln scheint am besten zu funktionieren und hat den Vorteil, das die Prompt-Parameter für Gespräch und Variablen-Extraktion getrennt geregelt werden können (z.B. niedrigere Temperatur für den Variablen-Extraktions-Prompt).
Ergänzende Funktionen
Formularfelder zur manuellen Korrektur
Anzeige des Status für die Vollständigkeit/Freigabe
Stand der Webkomponente
kann die Daten abfragen und in einem Formular parsen
kann Fächer, Bildungsstufe und Zielgruppe zuordnen
die Hochschulfachsystematik ist noch nicht implementiert
der API Aufruf zur Themenbaumgenerierung wird erstellt aber nur simuliert als Text dargestellt
Todo
Anpassungsvorschläge von Tommy (10.02.25):
Stelle auf Angular Material Version 18.x um und verwende dies beispielsweise zur Einbindung der Formular-Felder.
Nicht zu viel Style verwenden. Lieber auf Standard Angular Material Design abzielen.
Bitte die Funktionen in der .ts Datei kommentieren (mittels JSDoc).
ng add @angular/material@18
Angular: ^18.1.5
"typescript": "~5.4.5"
"@angular-devkit/build-angular": "^18.0.3",
Verwende in der UI die Komponenten von Angular Material, z.B. zur Integration von Inputs.
Kommentiere die Funktionen der .ts-Datei mittels JSDoc.
Reduziere die Styles-Datei auf wesentliche und notwendige Anpassungen und verwende wenn möglich die Defaults, die durch Angular Material gesetzt sind.
das UX wurde auf material umgestellt und die CSS etwas reduziert
die doppelte Bestätigung bei der Zusammenfassung wurde entfernt und die Anzeige des simulierten API Aufrufs verbessert