Handbücher · Loop Engineering

Stoppbedingungen

Lektion 2/98 Min. LesezeitProfi

Lernziele

  • Du formulierst eine Aufgabe als Zieltest, der mit Exit-Code 0 endet, oder erkennst, dass sie sich nicht loopen lässt.
  • Du setzt drei Budgets und eine Ratchet und begründest, welchen Fehler jede Bremse abfängt.
  • Du erkennst Kreisen über Fingerabdrücke und schreibst einen Abbruchbericht, mit dem ein Mensch entscheiden kann.

Das schwierigste Problem beim Bau eines Loop · engl. agent loopDie Schleife eines Agenten: denken, handeln, beobachten, wiederholen. Zwischen den Durchläufen wird der Kontext des Modells jedes Mal neu gebaut.Im Glossar ist das Anhalten. Ein AgentEin System, in dem ein Sprachmodell seinen nächsten Schritt selbst wählt: Es ruft Werkzeuge auf, wertet das Ergebnis aus und macht weiter, bis das Ziel erreicht ist.Im Glossar meldet bereitwillig Erfolg, den er nicht erreicht hat. Ein Loop ohne Ausgang ist eine Rechnung ohne Obergrenze. Jeder ernsthafte Loop hat deshalb mehrere unabhängige Bremsen, und jede einzelne beendet den Lauf.

Zieltests

Die erste Bremse ist eine ausführbare Definition von „fertig“: ein Zieltest · engl. goal testEin ausführbares Skript, das mit Exit-Code 0 endet, wenn die Arbeit fertig ist, etwa weil alle Tests laufen und der Linter nichts meldet. Es ist die wichtigste Stoppbedingung eines Loops.Im Glossar. Das ist ein Skript, das mit Exit-Code 0 endet, wenn die Arbeit akzeptabel ist. Die Tests laufen durch, der Linter meldet nichts, der Build kompiliert.

Lässt sich das Ziel nicht als Skript schreiben, ist die Aufgabe eine interaktive Session. Das ist in Ordnung, solange du sie auch so behandelst. „Verbessere den Code“ kann nicht enden. „Alle Tests unter tests/ laufen durch und ruff check . meldet nichts“ kann enden. Build: Der Zieltest macht daraus knapp fünfzig Zeilen Bash.

Die Meinung des Agenten kommt im Zieltest nicht vor. „Der Agent sagt, er ist fertig“ ist genau die Behauptung, die der Zieltest prüft. Mehr dazu in Kritiker und Prüfung.

Budgets

Zieltests beenden erfolgreiche Läufe. Budgets beenden alle anderen. Du brauchst mindestens drei, weil sie auf verschiedene Weise versagen:

  • Iterationen: eine harte Grenze für Versuche. Fang klein an. Nach unserer Einschätzung lösen fünf Versuche die meisten lösbaren Aufgaben. Ein Problem, das zwanzig Versuche lösen, fünf aber nicht, ist die Ausnahme.
  • Tokens oder Geld: eine Ausgabengrenze pro Lauf. Headless-CLIs melden die Kosten jedes Aufrufs. Bei Claude Code enthält die Ausgabe von --output-format json das Feld total_cost_usd. Dein Wrapper zählt die Werte zusammen und hört an der Grenze auf.
  • Wanduhrzeit: ein Timeout für den ganzen Lauf und für jeden Versuch. Ein Agent, der auf einen hängenden Befehl wartet, verbraucht Stunden und kaum TokenDie Einheit, in der Modelle Text lesen und abrechnen: meist ein Wortteil. Anbieter rechnen pro Million Tokens ab.Im Glossar. Diesen Fall fängt nur die Uhr ab.

Budgets sind billige Versicherungen. Der einzige Fehler ist, sie großzügig zu setzen, „damit er Luft hat“. Großzügige Budgets machen aus Bugs Rechnungen. Warum Runden- und Dollar-Limit zusammengehören, rechnet Die vier Teile eines Loops an Beispielwerten vor.

Ratchets

Ein Budget erlaubt zehn Versuche, die langsam schlechter werden. Eine Ratchet · engl. ratchetEine Sperrklinke für Fortschritt: Jeder Versuch muss den besten bisherigen Messwert schlagen, etwa die Zahl bestandener Tests. Sonst setzt der Loop den Versuch zurück und hält an.Im Glossar erlaubt das nicht. Sie verlangt, dass jeder Versuch den besten bisherigen Stand auf einem messbaren Wert schlägt: bestandene Tests, abgehakte Punkte, verbleibende Fehler. Gelingt das nicht, setzt der Loop den Versuch zurück und hält an.

Fortschritt muss also monoton sein. Seitwärts gilt als Fehlschlag. Die Ratchet trägt jeden unbeaufsichtigten Lauf. Den Nachtlauf mit Ratchet baust du in Build: Der Nachtlauf.

bester Stand: 4031Versuch 136Versuch 240je übernommenVersuch 338Versuch 4zurück, Stopp–Versuch 5
Eine Ratchet über fünf Versuche, gemessen an bestandenen Tests. Beispielwerte.

Kreisen erkennen

Manche Fehler sind laut. Kreisen bleibt leise. Der Agent wiederholt dieselbe Suche, erzeugt einen leeren Diff · engl. diffDie Gegenüberstellung zweier Stände einer Datei: Zeilen mit Plus kamen dazu, Zeilen mit Minus fielen weg. Git zeigt so, was ein Commit geändert hat.Im Glossar oder scheitert Versuch um Versuch am selben Test mit derselben Meldung.

Du erkennst Kreisen über einen Fingerabdruck des Zustands nach jedem Versuch. Du nimmst dafür zum Beispiel:

  • die Menge der Namen fehlschlagender Tests,
  • einen Hash des Diffs,
  • die letzten Befehle, die der Agent abgesetzt hat.

Zwei gleiche Fingerabdrücke hintereinander zeigen, dass der Loop nicht konvergiert. Weitere Versuche verbrauchen dann nur das Budget. Halte früh an und schreib den Grund dazu.

Welche Bremse greift?

Ordne jede Lage der Bremse zu, die den Lauf beendet.

Noch offen (6)

  • Nach Versuch 3 endet das Prüfskript mit Exit-Code 0
  • Ein Versuch hängt seit 40 Minuten an einem Befehl, der auf Eingabe wartet
  • Die Kosten aller Aufrufe summieren sich auf das Limit von 2 Dollar
  • Versuch 4 besteht 38 Tests, der beste bisherige Stand war 40
  • Versuch 5 und 6 scheitern an denselben zwei Tests, der Diff hat denselben Hash
  • Der Agent meldet „fertig“, das Prüfskript endet mit Exit-Code 1

Zieltest (0)

    Budget (0)

      Ratchet (0)

        Kreisen (0)

          Übergabe an den Menschen

          Jeder Ausgang ohne grünen Zieltest endet mit einem Bericht an einen Menschen. Er nennt vier Dinge:

          1. was versucht wurde,
          2. in welchem Zustand der Arbeitsbaum ist,
          3. welche Bremse gegriffen hat,
          4. den besten Beleg des Loops für den Grund.

          Eskalation ist eine Funktion des Loops. Ein Loop, der in Versuch 3 nachvollziehbar scheitert, ist mehr wert als einer, der bis Versuch 50 herumirrt. Der Bericht sagt dir, ob du den Zieltest korrigierst, das Budget erhöhst oder die Aufgabe selbst übernimmst. Wie die unbeaufsichtigten Varianten daraus einen Morgenbericht machen, zeigt Muster.

          Merksätze

          • Die erste Bremse ist ein Zieltest: ein Skript, das bei fertiger Arbeit mit 0 endet. Ohne Zieltest ist die Aufgabe eine interaktive Session.
          • Drei Budgets fangen drei Fehler ab: Iterationen, Geld und Wanduhrzeit. Setze sie knapp.
          • Eine Ratchet verlangt, dass jeder Versuch den besten Stand schlägt. Seitwärts gilt als Fehlschlag.
          • Zwei gleiche Fingerabdrücke hintereinander bedeuten Kreisen. Halte dann an.
          • Jeder Abbruch endet mit einem Bericht: Versuche, Zustand, Bremse, Beleg.

          Prüf dich selbst

          Denkfrage

          Warum ist „Verbessere den Code“ keine Aufgabe für einen Loop?

          Denkfrage

          Welchen Fall fängt nur das Zeitbudget ab?

          Denkfrage

          Was unterscheidet eine Ratchet von einem Iterationsbudget?

          Prüf dich selbst

          1. 1Welche Formulierung ist ein Zieltest?
          2. 2Warum reicht ein großzügiges Iterationsbudget nicht als einzige Bremse?
          3. 3Versuch 6 scheitert an denselben Tests wie Versuch 5, der Diff-Hash ist gleich. Was tut der Loop?
          4. 4Was gehört in den Bericht, wenn der Loop ohne grünen Zieltest endet?
          Dein Fortschritt bleibt nur in diesem Browser gespeichert.