Der Agentenkurs · Die Schleife

Die vier Teile eines Loops

Lektion 2/39 Min. LesezeitFortgeschritten

Lernziele

  • Du formulierst ein Ziel so, dass ein Programm es mit wahr oder falsch beantwortet.
  • Du begründest, warum der Prüfer außerhalb des Modells liegen muss.
  • Du baust einen Loop mit drei Ausgängen und einem Budget in Runden und Dollar.

Jeder 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, der den Betrieb übersteht, hat dieselben vier Teile: ein Ziel mit prüfbarem Ende, einen Prüfer · engl. checkerEin mechanisches Prüfverfahren außerhalb des Modells, etwa eine Testsuite, ein Compiler, ein Linter oder ein Schema-Validator. Es beurteilt das Ergebnis eines Loops ohne die Meinung des Modells.Im Glossar außerhalb des Modell · engl. model, LLMDas Sprachmodell (LLM, Large Language Model). Es liest Text, schreibt Text und entscheidet in einem Agenten, was als Nächstes passiert.Im Glossar, eine Stoppregel · engl. stop ruleDie Bedingungen, unter denen ein Loop endet: Der Prüfer ist zufrieden, das Runden-Limit ist erreicht oder zwei Versuche hintereinander sind gleich.Im Glossar und ein Budget in Runden und in Dollar. Fehlt einer davon, fehlen dem Loop die Bremsen.

Diese Lektion nimmt sich jeden Teil einzeln vor und geht danach das Grundgerüst Zeile für Zeile durch.

Zielmit EndeHandelnPrüferfertignicht bestandenfestgefahren?Budget weg?nein:neueRundejaFallback-WorkflowDer Prüfer liegtaußerhalb des Modells.

Schritt 1 von 5

Ziel mit prüfbarem Ende

Der Loop startet mit einem Ziel, für das ein Programm „fertig“ feststellen kann.

Ein Ziel mit prüfbarem Ende

„Verbessere die Fehlerbehandlung“ kann keinen Loop beenden, weil nichts je feststellen kann, dass die Arbeit fertig ist. „Alle Tests unter tests/ bestehen, und der Linter meldet nichts“ kann es. Formuliere das Ziel so, dass ein Programm dagegen wahr oder falsch zurückgibt. Die Entscheidung trifft das Programm, ohne Mensch und ohne Modell.

Lässt sich „fertig“ nicht als Prüfung schreiben, ist die Aufgabe noch nicht reif für einen Loop. Dann hast du eine interaktive Sitzung vor dir. Ein solches Ende als Skript mit vierzig Zeilen zu formulieren, ist eine eigene Fertigkeit. Das Handbuch Loop Engineering baut sie Schritt für Schritt auf.

Ein Prüfer außerhalb des Modells

Der Prüfer ist eine Testsuite, ein Compiler, ein Linter oder ein Schema-Validator. Gemeint ist alles Mechanische, das ein Ergebnis beurteilt, ohne das Modell nach seiner Meinung zu fragen. Eine Selbstbewertung des Modells zählt nicht als Prüfer.

Die Belege dafür sind direkt. Huang und andere zeigen in Large Language Models Cannot Self-Correct Reasoning Yet (ICLR 2024), dass Modelle ihr eigenes Schlussfolgern ohne Rückmeldung von außen kaum korrigieren können. Manchmal wird das Ergebnis nach der Selbstkorrektur sogar schlechter. Nach unserer Einschätzung wiederholt ein Modell beim Bewerten der eigenen Arbeit denselben Fehler mit mehr Überzeugung.

Externe Prüfer sind deshalb Pflicht. Die Rückmeldung, die einen Loop zum Ziel führt, muss von außerhalb dessen kommen, was den Fehler gemacht hat. Aus diesem Grund verhalten sich Loops beim Programmieren am besten: Compiler und Testlauf sind kostenlose, schnelle, externe Prüfer, und jedes Projekt bringt sie schon mit.

Eine Stoppregel

Drei Ausgänge beenden einen Lauf, und jeder davon reicht allein:

  • Der Prüfer ist zufrieden. Das ist der Erfolg.
  • Das Runden-Limit ist erreicht. Die Versuche sind aufgebraucht.
  • Zwei Versuche hintereinander sind gleich. Der Loop dreht sich im Kreis, und jede weitere Runde kostet nur Geld.

Der dritte Ausgang zählt, weil das Kreisen leise passiert: derselbe fehlschlagende Test, derselbe leere Diff, Versuch für Versuch. Weitere Bremsen wie Ratschen und Fingerabdrücke von Zwischenständen behandelt das Handbuch Loop Engineering.

Ein Budget in Runden und Dollar

Runden und Dollar versagen auf verschiedene Weise, deshalb begrenzt du beide. Ein Runden-Limit begrenzt die Zahl der Versuche. Ein Dollar-Limit begrenzt den Schaden, wenn eine einzelne Runde ausufert. Ein einziger Tool-Aufruf mit riesiger Antwort kann mehr kosten als zehn normale Runden. Ein Loop mit Runden-Limit und ohne Ausgabenlimit ist eine Rechnung ohne bekannte Obergrenze.

Was ein Dollar-Limit abfängt

Lauf ohne Ausreißer, bis zum Runden-Limit
0,20 $
Mit großem Tool-Ergebnis, nur Runden-Limit
2,20 $
Mit großem Tool-Ergebnis und Dollar-Limit
0,22 $

Beispielwerte. Annahme: Das große Tool-Ergebnis kommt in Runde 1 und bleibt im Verlauf, jede weitere Runde schickt es erneut mit. Der Loop prüft das Dollar-Limit nach jeder Runde, deshalb kann die letzte Runde es noch überschreiten.

Das große Ergebnis bleibt im Verlauf liegen, deshalb bezahlt jede folgende Runde es erneut. Wie du das vermeidest, zeigt Die vier Orte: Das Tool schreibt seine Ausgabe in eine Datei und gibt nur den Pfad zurück.

Das Gerüst mit Anmerkungen

So sehen die vier Teile in Code aus. Geh das Gerüst Schritt für Schritt durch.

for turn in range(MAX_TURNS):                  # Budget, Teil eins: Runden
    action = model.next_step(goal, history)    # das Modell wählt den Schritt
    result = run(action)                       # die Welt antwortet
    history.append(result)                     # die Beobachtung bleibt erhalten
    if checker(result):                        # externer Prüfer außerhalb des Modells
        break                                  # Stoppregel 1: fertig
    if repeated(history, 2):                   # Stoppregel 2: dreht sich im Kreis
        break
    if spent() > BUDGET:                       # Budget, Teil zwei: Dollar
        break
else:
    fallback_workflow(goal)                    # Runden aufgebraucht: fester Pfad

Zeilen 1

Die for-Schleife ist der erste Teil des Budgets. Mehr als MAX_TURNS Versuche gibt es nicht.

Lies die Ausgänge genau. Wie das Gerüst dasteht, landet nur ein Fehlerfall im Fallback: aufgebrauchte Runden. Die Abbrüche wegen Kreisens und wegen des Budgets verlassen den Loop ohne Ergebnis. Im Betrieb leitest du deshalb jeden Ausgang ohne bestandene Prüfung an dieselbe Stelle, den Fallback-Workflow · engl. fallback workflowEin fester Pfad ohne Modell, der übernimmt, wenn ein Loop ohne bestandene Prüfung endet. Er liefert immer eine vertretbare Antwort.Im Glossar. Das ist ein fester Pfad, der ohne Modell eine vertretbare Antwort liefert. Loop in der Praxis baut diese Version vollständig auf.

Bemerkenswert ist auch, was im Gerüst fehlt: Nirgends fragt der Code das Modell, ob es zufrieden ist. Das Modell wählt den nächsten Schritt. Über das Ende der Arbeit stimmt es nie mit ab.

Merksätze

  • Ein Ziel taugt für einen Loop, wenn ein Programm dagegen wahr oder falsch zurückgibt.
  • Der Prüfer liegt außerhalb des Modells, denn ohne Rückmeldung von außen korrigieren Modelle ihr Schlussfolgern kaum.
  • Ein Lauf endet bei bestandener Prüfung, bei aufgebrauchten Runden oder wenn zwei Versuche hintereinander gleich sind.
  • Ein Runden-Limit begrenzt die Versuche, ein Dollar-Limit den Schaden einer ausufernden Runde.
  • Das Modell wählt den nächsten Schritt und entscheidet nie, ob die Arbeit fertig ist.

Prüf dich selbst

Denkfrage

Eine Kollegin schreibt als Ziel für einen Loop: „Mach den Code sauberer.“ Wie formulierst du es um?

Denkfrage

Dein Loop lässt das Modell nach jeder Runde fragen: „Ist die Aufgabe erledigt?“ Was ist daran falsch, und was setzt du ein?

Prüf dich selbst

  1. 1Welches Ziel kann einen Loop beenden?
  2. 2Warum zählt eine Selbstbewertung des Modells nicht als Prüfer?
  3. 3Dein Loop liefert dreimal hintereinander denselben fehlschlagenden Test. Welcher Ausgang hätte schon früher greifen sollen?
  4. 4Wann läuft der else-Zweig der for-Schleife im Gerüst?

Quellen

  1. Large Language Models Cannot Self-Correct Reasoning Yet · Jie Huang und andere (Google DeepMind), ICLR 2024
Dein Fortschritt bleibt nur in diesem Browser gespeichert.