Ohne Schleifen gibt es keinen Agenten
Das gesamte Geheimnis von Claude Code kann in einer Zeile geschrieben werden: while stop_reason == "tool_use"
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_idverlieren: Anthropic API meldet direkt einen Fehlertool_result muss tool_use_id habenund 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.