Zurück zum Blog

Leitplanken für Agenten: eine Regel, die man lesen muss, ist keine Leitplanke

Dieselbe Vorgabe dreimal verletzt, trotz Hinweis im Auftrag und in der Anleitung. Was geholfen hat, war nicht die bessere Formulierung, sondern dieselbe Prüfung an einer anderen Stelle: als assert vor der Datei, die der nächste Schritt braucht.

5 Min. Lesezeitvon Daniel AlischKI-Agenten, Automatisierung, Engineering

Ein Agent, der dieselbe Vorgabe dreimal hintereinander verletzt, hat kein Verständnisproblem. Er hat ein Mechanikproblem: Die Vorgabe stand an einer Stelle, an der sie sich überstimmen liess. Dieser Beitrag beschreibt einen konkreten Fall aus einer eigenen Schreib-Pipeline, die Ursache dahinter und die Korrektur, die beim ersten Versuch gegriffen hat.

Der Fall: eine Regel, drei Verstösse

Die Vorgabe war trivial. Deutscher Text, echte Umlaute, keine ASCII-Ersatzschreibweise wie fuer oder ueber. Sie stand im Auftrag. Sie stand zusätzlich in der Arbeitsanleitung, die der Lauf zu Beginn lädt. An drei Tagen in Folge entstand trotzdem ein fertiger Text ohne ein einziges Umlautzeichen.

Beim ersten Mal ist das Unachtsamkeit. Beim dritten Mal ist es ein Befund. Die Ursache liegt nicht im Vorsatz, sondern in der Umgebung: Der Text entsteht in einem Skript, und alles drumherum ist aus technischen Gründen transliteriert geschrieben — Shell-Ausgaben, eigene Notizen, Protokolle, Dateinamen. Der Ton dieser Umgebung färbt auf frische Prosa ab. Die Regel kam aus dem Prompt, der Rückfall kam aus dem Werkzeug. Das Werkzeug sitzt näher am Text.

Warum ein Hinweis keine Leitplanke ist

Die naheliegende Korrektur ist, den Hinweis deutlicher zu machen: grösser schreiben, früher platzieren, mit Begründung versehen. Das hat zweimal nicht geholfen, und das ist kein Zufall. Ein Hinweis konkurriert mit allem anderen im Kontext um Aufmerksamkeit, und er verliert zuverlässig gegen das, was gerade konkret zu tun ist.

Der zweite Versuch war schon besser: eine Messung. Das Skript zählte die Umlautzeichen und gab das Ergebnis aus. Nur hat eine Prüfung, die bloss meldet, eine unangenehme Eigenschaft — ihr Ergebnis landet im selben Kanal wie jede andere Ausgabe. Eine Zeile UMLAUTZEICHEN: 0 wird gelesen, eingeordnet, als nachrangig behandelt, und die Arbeit läuft weiter. Eine Zahl, die man übergehen kann, ist eine Empfehlung mit Dezimalstellen.

Die Prüfung in den Pfad legen

Was getragen hat, war keine bessere Formulierung und keine bessere Messung, sondern eine andere Position derselben Messung: als assert vor dem Schreiben der Datei, die der nächste Schritt zwingend braucht.

python
import re

def pruefe(text: str) -> None:
    prosa = re.sub(r"<pre><code.*?</code></pre>", " ", text, flags=re.S)
    prosa = re.sub(r"<[^>]+>", " ", prosa)
    woerter = len(prosa.split())
    umlaute = len(re.findall(r"[äöüÄÖÜß]", prosa))
    translit = re.findall(
        r"\b\w*(?:fuer|ueber|aender|waere|moegl|muess|koenn|naech|groess)\w*\b",
        prosa, flags=re.I)

    assert 600 <= woerter <= 1000, f"Länge: {woerter}"
    assert umlaute > 0, "kein einziges Umlautzeichen"
    assert not translit, f"Transliteration gefunden: {translit[:5]}"

pruefe(inhalt)
schreibe_payload(inhalt)   # läuft nur, wenn pruefe() nichts geworfen hat

Die Logik ist dieselbe wie vorher. Der Unterschied ist, dass sie jetzt im Weg steht. Fällt sie durch, entsteht keine Datei, und ohne Datei gibt es nichts zu versenden — der Lauf kann an dieser Stelle nicht weitermachen, sondern nur zurück an den Text. Das Ergebnis am ersten Tag nach dem Umbau: korrekt geschriebener Text, erster Versuch, keine Diskussion.

Woran man eine brauchbare Leitplanke erkennt

  • Sie blockiert, statt zu melden. Wenn der nächste Schritt trotz Befund möglich ist, ist die Prüfung Dekoration.
  • Sie nennt die Fundstelle, nicht nur die Zahl. "Null Umlaute" sagt, dass etwas falsch ist. Die Liste der Treffer sagt, wo — und das ist der Unterschied zwischen einer Minute und einer Viertelstunde.
  • Sie misst das Richtige. In diesem Fall mussten Code-Blöcke vor dem Zählen herausgeschnitten werden, sonst zählen Schlüsselwörter als Wörter mit und die Längenprüfung schlägt an einem Text an, dessen Prosa völlig in Ordnung ist.
  • Sie urteilt nicht über eine Dichte-Schwelle. Ein fehlerfreier Beitrag hatte 43 Umlautzeichen auf 752 Wörter. Eine plausibel klingende Mindestschwelle von 30 oder 50 hätte ihn verworfen, denn die Dichte hängt am Thema: Ein Text über Cron, Plan und Agent hat schlicht wenig Gelegenheit für Umlaute. Belastbar ist das Paar aus "mehr als null" und "keine verbotenen Wortstämme".
  • Sie hat eine beidseitige Gegenprobe. Ein absichtlich falscher Text muss sie auslösen, ein absichtlich korrekter darf sie nicht auslösen. Der zweite Teil wird gern vergessen, und er ist der teurere: Eine zu scharfe Leitplanke blockiert richtige Arbeit, und das kostet mehr als der Fehler, den sie verhindern sollte. Die erste Fassung meiner Prüfung suchte nach dem Zeichenmuster ae, oe, ue, ss und löste an Wörtern wie Ausschnitt, Klasse und quer aus. Erst die Liste echter Wortstämme war falschtrefferfrei.

Was sich nicht mechanisieren lässt

Nicht jede Vorgabe taugt für diese Behandlung. "Kein Füllstoff", "sachlicher Ton", "konkret statt allgemein" — dafür gibt es keinen Ausdruck, der die Datei zurückhält. Mechanisieren lassen sich Form-Eigenschaften: Länge, erlaubte Zeichen, verbotene Muster, Pflichtfelder, Reihenfolgen, Vorhandensein einer Versionsnummer. Das ist weniger, als man gern hätte, aber es ist genau die Klasse von Fehlern, die sonst unbemerkt durchläuft, weil niemand nachsieht.

Für den Rest bleibt das Gegenlesen, und zwar möglichst durch eine Instanz ohne den eigenen Verlauf. Wer den Text geschrieben hat, liest über dieselben Stellen hinweg, an denen er schon beim Schreiben hinweggelesen hat. Das gilt für Menschen und für Agenten gleichermassen.

Fazit

Der Satz, der aus diesem Fall bleibt: Eine Regel, die der Ausführende erst lesen und dann befolgen muss, ist eine Bitte. Zur Leitplanke wird sie, wenn sie im Pfad liegt und der nächste Schritt ohne sie nicht stattfindet. Das ist eine Entwurfsentscheidung, keine Formulierungsfrage — und bei Agenten-Pipelines ist sie der Unterschied zwischen einer Vorgabe und einer Eigenschaft des Systems.

Weiterlesen