psi-slides · zurück zu „Im Hörsaal“ · This page in English

Der Prompter

Das Cockpit, das Fenster, das nur die vortragende Person sieht, kann zuhören, während man spricht. Wenn etwas gesagt werden muss, legt der Prompter einen kurzen Hinweis auf einen Streifen am unteren Rand der Folienkopie im Cockpit. Meistens sagt er nichts.

Er bleibt aus, solange man ihn nicht einschaltet. Man startet node build.js auf der Kommandozeile mit --watch --prompter (die Desktop-App kann ihn nicht ausführen), und auch dann hört er erst zu, wenn man im Cockpit Shift-S drückt oder den Knopf ◌ prompter in der Fußzeile, der dasselbe tut. Ein zweiter Tastendruck schaltet ihn wieder ab.

Er geht online, und er kostet Geld. Er fragt ein Sprachmodell über das Internet, braucht also eine Netzverbindung und den API-Schlüssel eines OpenRouter-Kontos, und jede Anfrage wird diesem Konto berechnet. Das Mikrofon hört alle im Saal; das sollte man ihnen vor Beginn sagen.

Was er einflüstert

Er meldet sich, wenn man hinter der Zeit ist, wenn ein Punkt abstrakt bleibt, obwohl die Folien ein Beispiel dafür haben, wenn das eben Gesagte der eigenen Folie widerspricht, wenn man zu schnell spricht oder wenn die eigenen Notizen für diese Folie etwas vorgesehen haben, an dem man vorbeigegangen ist. Das Tempo zählt psi-slides selbst und gibt dem Modell die Zahlen: Wörter pro Minute, Fülllaute (äh, ähm), die längste Pause.

Im Bild stehen auf der Folie 90 Millisekunden, und die vortragende Person hat gerade „ich glaube, es waren 250 Millisekunden“ gesagt. Auf dem roten Streifen steht die Antwort des Prompters, Wort für Wort so, wie das Modell sie gegeben hat. Rot ist er, weil das Modell ihn als dringend markiert hat, eine Stufe für etwas, das den Saal in die Irre führen würde, wenn es so stehen bliebe.

speaker.html · Shift-S
Das ganze Cockpit. Oben die Teile des Vortrags und die Uhr; in der Mitte seine Kopie der aktuellen Folie, auf der „1,4 Sekunden. Dann 90 Millisekunden.“ steht. Über den unteren Rand dieser Folie liegt ein roter Streifen mit „Die Zahl ist neunzig Millisekunden, nicht 250.“, darunter eine blasse Zeile: „asked 2s ago · 2 so far“. Unter der Folie die Sprechernotiz, dann eine Reihe von fünf Folienvorschauen, die aktuelle rot umrandet, und eine Fußzeile mit dem leuchtenden Prompter-Knopf.

Ein Hinweis bleibt im Cockpit. Er steht auf der Folienkopie im Cockpit und verblasst nach 15 Sekunden, ein dringender nach 25; Esc nimmt ihn früher vom Streifen. Nichts, was der Prompter sagt, erscheint auf der Projektion.

Er kann einer Folie, die noch kommt, eine Karte hinzufügen, der letzten Folie eingeschlossen, wenn man im Vorbeigehen etwas gesagt hat, das dort noch einmal gesagt werden sollte. K zeigt die Sprechernotizen als Karten, beschrieben auf „Im Hörsaal“.

Die Zeile unter dem Streifen zeigt in der ersten Minute die Wörter, die die Spracherkennung aufnimmt. Danach sagt sie, wann der Prompter zuletzt das Modell gefragt hat; so unterscheidet man einen Prompter, der nichts zu sagen hat, von einem, der stehen geblieben ist.

Was er braucht

Chrome und --watch. Das Zuhören übernimmt die eigene Spracherkennung von Chrome. Der Schalter --watch lässt node build.js weiterlaufen und baut die Vorlesung bei jedem Speichern neu; das Cockpit gibt, was es hört, an dieses laufende Programm weiter, und das Programm fragt ein Sprachmodell. Die Desktop-App kann den Prompter nicht ausführen: Sie übergibt --prompter nicht und hat keine Netzberechtigung; dafür nimmt man die Kommandozeile.

Internet und einen OpenRouter-Schlüssel. Das Modell wird über openrouter.ai erreicht. Den API-Schlüssel legt man in einem OpenRouter-Konto an, über das auch die Anfragen bezahlt werden, und legt ihn in die Datei ~/.config/psi-slides/openrouter.key, die nur man selbst lesen darf, oder in die Umgebungsvariable OPENROUTER_API_KEY. Ohne Schlüssel läuft der Prompter als Probe: Er fragt kein Modell und schreibt nur ins Protokoll, was er hört.

Geld. Eine Keynote samt allen Proben und Testläufen davor hat mit dem voreingestellten Modell, Claude Sonnet 5, etwa einen US-Dollar gekostet. Was ein Vortrag kostet, hängt vom Modell ab und davon, wie oft der Prompter fragt. Er stellt höchstens 360 Anfragen pro Stunde, wenn man keine niedrigere Grenze setzt.

Eine Probe braucht keinen Schlüssel

--prompter-dry-run erledigt alles außer dem Aufruf des Modells: Der Prompter hört zu, führt die Uhr und wendet die Regeln an, wann ein Hinweis erscheinen darf. An openrouter.ai geht nichts, aber Chrome schickt den Ton weiterhin an Google, wenn es die Sprache nicht auf dem eigenen Rechner erkennen kann.

Der Block prompter: in den Einstellungen oben in source.md legt das Modell fest, wie viel neue Rede der Prompter abwartet, bevor er wieder fragt, wie lange er nach einem Hinweis still ist, ob er Karten ergänzen darf und wie oft er in einer Stunde fragen darf.

# in den Einstellungen oben in source.md
# duration: die geplante Dauer in Minuten, für die Uhr;
# cooldown: die Sekunden Ruhe nach jedem Hinweis
duration: 45
prompter:
  cooldown: 60

# der Vortrag: neu gebaut, ausgeliefert, das Cockpit in Chrome offen
# und der Prompter an, wegen des prompter:-Blocks oben
node build.js lectures/my-lecture/source.md --present

# eine Probe: nichts geht an das Modell, kein Schlüssel nötig
node build.js lectures/my-lecture/source.md --present --prompter-dry-run

Was den Rechner verlässt und was auf ihm bleibt

Der Prompter schickt Text an openrouter.ai: das Transkript und den Text der Vorlesung samt Sprechernotizen. Von dort geht der Text an das Unternehmen, das das Modell betreibt. Der Prompter verschickt keinen Ton, aber die Spracherkennung ist die von Chrome, und Chrome schickt den Ton an Google, wenn es die Erkennung nicht auf dem eigenen Rechner ausführen kann; das Cockpit sagt, welches von beiden. Nichts davon erscheint auf der Projektion oder wird in source.md geschrieben. node build.js liest den Schlüssel aus der Umgebung und schreibt ihn nie in die HTML-Dateien.

Jeder Lauf schreibt ein Protokoll neben source.md, in prompter-<date>.jsonl: was der Prompter gehört hat, welche Hinweise er gezeigt hat und was er sagen wollte, aber nach seinen Regeln nicht durfte, mit der Regel, die es verhindert hat. Daneben steht prompter-<hash>.prompt.txt mit dem Text der Vorlesung, genau so, wie das Modell ihn bekommen hat. Das Protokoll enthält die gesprochenen Worte wörtlich, deshalb gehört es nicht in Repositorys, die man veröffentlicht. Während des Vortrags zeigt ein Shift-Klick auf den Prompter-Knopf die letzten zehn Hinweise und Karten. Danach liest node build.js source.md --prompter-debrief das neueste Protokoll zurück: wann die Uhr gestartet wurde, wie der Vortrag die @mm:ss-Marken in den Notizen gehalten hat und was der Prompter geflüstert und zurückgehalten hat.

Das Mikrofon hört den ganzen Saal

Fragen und Einwürfe aus dem Publikum werden transkribiert und wie die eigenen Worte an das Modell geschickt. Deshalb sollte man dem Publikum vor dem Vortrag sagen, dass der Prompter mithört, und ihn mit Shift-S ausschalten, wenn jemand aus dem Saal spricht, etwa in der Fragerunde.

Ob man ihn im eigenen Rahmen einsetzen darf, muss man selbst prüfen: Der Datenschutz (in der EU die DSGVO) und die Persönlichkeitsrechte der Anwesenden gelten auch für ihre Worte.

Zum Weiterlesen

  • Was psi-slides ist Die Startseite: eine Vorlesung, wie der Saal sie sieht und wie die Lesenden sie bekommen, und warum das dieselbe Datei ist.
  • Im Hörsaal Der Rest des Cockpits: die zwei Fenster, die Schritte, die Karten, die der Prompter ergänzen kann, und die Tasten, die den Blick des Saals von der Folie nehmen.
  • Loslegen Die App und die Kommandozeile, und wie man das Tutorial auf einem Rechner baut, auf dem nichts installiert ist.
  • Sicherheit Was --watch, --serve und --prompter auf dem eigenen Rechner öffnen, und wohin die Daten des Prompters gehen, in einer Liste (englisch).