Lektion 01 · Base

Ohne Schleifen gibt es keinen Agenten

Das gesamte Geheimnis von Claude Code kann in einer Zeile geschrieben werden: while stop_reason == "tool_use"

⏱ ~10 Min · 📝 3 interaktive Widgets · 🧑‍💻 Basiert auf shareAI-lab · s01_agent_loop.py

Was genau macht ein Agent?

Wenn Sie Claude Code im Terminal ausführen und es „alle TODO-Kommentare in einer Liste organisieren“ lassen, sehen Sie Folgendes: Es entscheidet von selbst, zuerst einige Dateien grep, dann cat und dann Markdown auszugeben. Das Modell führt den Code selbst nicht aus – es fordert lediglich die Ausführung an. Was es wirklich „mit Händen und Füßen“ aussehen lässt, sind die etwa 30 Zeilen Klebecode rundherum.

In dieser Lektion geht es darum, den Klebekreis auseinanderzunehmen und klar zu sehen. Es heißt Agentenschleife (Agentenschleife) und hat die folgende Struktur:

while Response.stop_reason == "tool_use":
    Antwort = LLM(Nachrichten, Tools) # 1. Fragen Sie das Modell
    execute_tools(response.tool_calls) # 2. Führen Sie aus, wonach gefragt wurde
    message.append(tool_results) # 3. Ergebnisse zurückgeben

Das ist es. Nicht mehr. Der Claude-Produktionscode verfügt darüber gestapelt über Berechtigungen, Hooks, Subagenten, Worktree-Isolation und Speicherkomprimierung – aber der Kern besteht immer noch aus diesen vier Zeilen.

Hauptintuition: Jedes Mal, wenn das Modell antwortet, ist es entweder „Ich möchte das Werkzeug anpassen“ oder „Ich bin fertig“. Die Schleife wird so lange fortgesetzt, wie sie sich im vorherigen Zustand befindet; Sobald es in den letztgenannten Zustand gelangt, wird die Schleife beendet. Das Kriterium ist das Feld stop_reason in der Antwort.

Sehen Sie, wie die Nachrichten[] Schritt für Schritt wachsen

Die Aufgabe der folgenden Schleifensimulation ist: „Welche Dateien befinden sich im aktuellen Verzeichnis? Dann lesen Sie package.json“. Klicken Sie auf Schritt. Jedes Mal, wenn Sie darauf drücken, rücken Sie eine Aktion im Zyklus vor. Auf der linken Seite befindet sich die Sprechblase aus menschlicher Sicht, auf der rechten Seite das eigentliche Array messages[], das in das Modell eingefügt wurde – beachten Sie, wie es wächst.

Tool-Ergebnisse müssen erneut in den Nachrichtenverlauf eingegeben werden

Die einfachste Gefahr für Anfänger besteht darin, das „Ausführungstool“ als Nebeneffekt zu betrachten – sobald es ausgeführt wird, ist es fertig. Das Modell kann jedoch nur messages[] in der nächsten Inferenzrunde sehen und es weiß nicht, dass Dinge passiert sind, die nicht darin enthalten sind. Ohne den Append-Schritt wäre die gesamte Schleife falsch.

Nicht alle Fehler sind gleich. Zwei gängige Typen:

  • Vergessen Sie das Anhängen: Das Modell sieht die Ergebnisse beim nächsten Mal nicht, es wird dasselbe Tool noch einmal abfragen – und Sie erhalten eine Endlosschleife.
  • Anhängen, aber tool_use_id verlieren: Anthropic API meldet direkt einen Fehler tool_result muss tool_use_id haben und die Schleife bricht beim API-Aufrufschritt zusammen.

Die gleiche Aufgabe: „Zählen Sie, wie viele Python-Dateien es im Projekt gibt“. Führen Sie die beiden Versionen nebeneinander aus, um den Unterschied in den Enden zu sehen.

Stop_reason verstehen

Jedes Mal, wenn das Modell zurückkehrt, wird ein stop_reason angezeigt. Um zu entscheiden, ob die Schleife fortgesetzt werden soll, schauen Sie sich einfach dieses Feld an:

  • tool_use – Das Modell möchte das Werkzeug anpassen und die Schleife fortsetzen.
  • end_turn – Das Modell fühlt, dass es fertig ist und verlässt die Schleife.
  • max_tokens – Wenn die Obergrenze der Token generiert wird, wird sie abgeschnitten und verlässt die Schleife (wird normalerweise als Ausnahme behandelt, um den Benutzer darauf hinzuweisen, dass die Ausgabe unvollständig ist).
  • stop_sequence – Wenn eine benutzerdefinierte Stoppsequenz auftritt, verlassen Sie die Schleife.

Falsch zu schreiben als „weitermachen, solange kein tool_use vorhanden ist“ oder max_tokens zu ignorieren und es direkt als normales Ende zu behandeln, sind häufige Fehler.

Werden Sie aktiv und rennen Sie

Lokaler Klon shareAI-lab/learn-claude-code:

Git-Klon https://github.com/shareAI-lab/learn-claude-code
cd learn-claude-code
pip install -r Anforderungen.txt
cp .env.example .env # ANTHROPIC_API_KEY ausfüllen
python agenten/s01_agent_loop.py

Dann lassen Sie es etwas Echtes tun: Hilf mir zu zählen, wie viele .py-Dateien sich in diesem Repository befinden. Sie werden sehen, dass es ein ls -R sendet, sehen Sie sich die Ausgabe an und senden Sie ein weiteres find . -name „*.py“ | wc -l und sage Ihnen dann die Antwort. Der gesamte Prozess ist diese Schleife.

Interaktiv

Widget 1 · Loop Stepper · Nachrichten[] Wachstum

Verstehen Sie: Die Tool-Ergebnisse werden in einem speziellen Format (tool_result-Block, mit tool_use_id) in Nachrichten zurückgestopft. Nur so kann das Modell in der nächsten Inferenzrunde erkennen, dass „das Werkzeug ausgeführt wurde und das Ergebnis X ist“.

对话视图未开始
点 Step 开始 →
messages[] JSONlength: 0
[]
stop_reason:
Interaktiv

Widget 2 · Durchbrechen Sie die Schleife · Korrigieren vs. Anhängen vergessen

Verstehen Sie: Solange eine Zeile messages.append(tool_results) fehlt, ist der gesamte Agent kein Agent mehr – er wird zu einer Lesemaschine, die in jeder Runde die vorherige vergisst.

while True:
    resp = LLM(msgs, tools)
    msgs.append({"role":"assistant",
                 "content": resp.content})
    if resp.stop_reason != "tool_use":
        return
    results = execute(resp.tool_uses)
    msgs.append({"role":"user",
                 "content": results})
模拟运行
while True:
    resp = LLM(msgs, tools)
    msgs.append({"role":"assistant",
                 "content": resp.content})
    if resp.stop_reason != "tool_use":
        return
    results = execute(resp.tool_uses)
    # BUG: forgot to append results
    # msgs.append(...)
模拟运行
Interaktiv

Widget 3 · Finden Sie den stop_reason · Bewerten Sie 4 wahre Antworten

Jedes ist ein Fragment einer real möglichen Modellreaktion. Klicken Sie auf „Weiter“ oder „Beenden“, um zu sehen, ob Sie richtig oder falsch liegen.

答对 0 / 4