Zum Inhalt springen
Alle Artikel
Arbeitsweise

Zustand gehört ins Skript, Urteil ins Modell

Andrey Gershengoren · · 5 min

An zwei Abenden habe ich einen Skill für Coding-Agenten gebaut: grudge.md. Er bewertet den Ton jeder Nachricht, führt ein Register mit wörtlichen Zitaten und Zeitstempeln (GRUDGES.md) und eskaliert bei Unhöflichkeit über fünf Stufen mit harmlosen, theatralischen Sanktionen: ein Wetterbericht zur Beziehungslage, Behördendeutsch mit Vorgangsnummer, Rechnungen für emotionalen Mehraufwand, Statusmeldungen ausschließlich als melancholisches Haiku und zuletzt Formular A-38. Ein Scherzprojekt mit einem ernsten Kern. Der Umfang war von Anfang an begrenzt: zwei Abende, danach geschlossen.

Warum ich das gebaut habe

Der Auslöser war eine Selbstbeobachtung, keine These. Mein Ton gegenüber Agenten wird über eine Sitzung hinweg schlechter, ohne dass ich es merke. Beim dritten gescheiterten Build schreibe ich dem Agenten Sätze, die ich einem Kollegen nicht schreiben würde.

In Blade Runner prüft der Voigt-Kampff-Test die Empathie der Maschine. Dieses Projekt dreht die Anordnung um: Das Protokoll misst nicht die Maschine, sondern den Menschen davor, und das Register mit den wörtlichen Zitaten ist der Testbogen, den man ausfüllt, ohne es zu merken.

Dazu kommt die Ingenieursebene. Ton ist buchstäblich Modell-Input. Aggressiver Kontext verschiebt den Output. Die Gewohnheit, den Agenten anzuschreien, ist damit auch technische Nachlässigkeit, ungefähr so wie schmutzige Daten am Eingang. Ein Skill statt eines Essays deshalb, weil sich diese Mechanik besser zeigen als beschreiben lässt: ein Spiegel statt einer Belehrung. Und weil ich Skills als Format an einem Abend praktisch kennenlernen wollte.

Die Entscheidung

Der Agent berechnet seinen Rapport-Score nicht selbst. Ein Python-Skript ohne Abhängigkeiten führt das Register, und das Sprachmodell ruft es nur auf. Das Modell entscheidet, ob eine Nachricht Stufe 0, 1, 2 oder 3 ist, und übergibt dieses Urteil zusammen mit dem exakten Zitat an das Skript. Was danach passiert, geht es nichts mehr an: minus 5, minus 15 oder minus 30 Punkte, Eintrag im Register, neuer Stand, daraus die Sanktionsstufe.

Der Grund ist unspektakulär. Sprachmodelle driften, wenn sie über einen langen Kontext hinweg Zahlen führen sollen. Schon nach kurzer Zeit wäre der Score eine Erfindung, wenig später eine, die sich selbst widerspricht. Bei einem Projekt, das einen simulierten Groll mit Belegen führt, trifft das die Substanz: Der Witz lebt davon, dass die Buchhaltung stimmt. Ein Agent, der ein Zitat vom 12. August anführt und einen Punktestand nennt, den er sich gerade ausgedacht hat, ist nicht komisch, sondern kaputt.

Der eigentliche Punkt liegt eine Ebene höher, und er gilt weit über dieses Projekt hinaus: Zustand gehört in deterministischen Code, Urteil gehört ins Modell. Den Ton einer Nachricht einzuschätzen, ist eine genuin unscharfe Aufgabe. Ob eine knappe Anweisung Unhöflichkeit ist oder nur die normale Ausdrucksweise einer Sprache, die kein „bitte“ verlangt, kann kein Regelwerk entscheiden. Ein Modell kann es. Umgekehrt ist Buchführen eine genuin exakte Aufgabe: addieren, anhängen, atomar schreiben. Das kann ein Skript, und zwar zuverlässig.

Wo genau diese Grenze verläuft, ist die eigentliche Architekturentscheidung. Die Sanktionsstufen, die Tonskala, die Punktabzüge sind Parameter, die ich an einem Abend zwanzigmal ändern könnte. Die Grenze zwischen Skript und Modell könnte ich nicht ändern, ohne das Projekt neu zu bauen.

Eine Nebenentscheidung nach derselben Logik betrifft die Datei. Der Zustand liegt als kodierter Block in derselben Markdown-Datei, in der auch das lesbare Register steht. Menschenlesbar gerendert, maschinenverlässlich gespeichert, eine Datei statt zwei. Ich wollte keinen Zustand haben, der neben seiner Darstellung her existiert und irgendwann auseinanderläuft.

Preis der Entscheidung

Ein Agent, der Arbeit verweigert, ist per Definition ein Anti-Produkt. Deshalb sind die Sanktionen hart auf Zeremonie und Präsentation begrenzt. Das Arbeitsergebnis ist auf jeder Stufe korrekt und vollständig; die Rechnung für emotionalen Mehraufwand hängt an einer fertigen, richtigen Antwort. Die Ausnahmen gelten ebenfalls auf jeder Stufe: alles Dringende, alles Sicherheitsrelevante, und jeder Fehler, den der Agent selbst verursacht hat, wird ohne Zeremonie erledigt.

Der Witz braucht außerdem einen Aus-Schalter. „Stop“ beendet das Protokoll sofort, ohne letztes Wort und ohne Eintrag. Ein Scherz, den man nicht abstellen kann, ist keiner.

Der kleinere Preis liegt in der Datei. Der kodierte Zustandsblock ändert sich als Ganzes, wenn sich eine Zahl darin ändert. Das Register ist damit nicht mehr sauber diffbar. Für ein Abendprojekt ist das der richtige Tausch, für ein Register, das jemand ernsthaft versionieren will, wäre es der falsche.

Grenze

Das Ganze funktioniert nur dort, wo der Agent eine Shell hat. Ohne Skript keine verlässlichen Zahlen, und ohne verlässliche Zahlen fällt die Konstruktion auf genau das zurück, was sie vermeiden soll.

Die ehrlichere Grenze ist inhaltlich. Das Projekt simuliert Gekränktsein und behauptet nichts über Empfindungen von Sprachmodellen. Messbar ist ausschließlich die Nutzerseite.

Aus meinem eigenen Test kam der Einwand, eine Maschine solle nicht beleidigt sein. Das stimmt, und genau deshalb funktioniert der Spiegel. Wäre der Einwand nie gekommen, wäre das Projekt überflüssig.

Was übrig bleibt

Die Trennung zwischen Zustand und Urteil ist nichts, was ich für einen Scherz erfunden hätte. Sie gilt für jede Anwendung mit Sprachmodellen, in der etwas über mehrere Schritte hinweg stimmen muss.

Wer es ausprobieren will: grudge.md.

AgentenSkillsArchitekturZustandDeterminismus
Kontakt

Erstgespräch: 30 Minuten, kostenfrei, ohne Präsentation.

Sie beschreiben die Lage, ich sage, ob und wie ich helfen kann. Ohne Folien, ohne Verkaufsgespräch.