agent-sdk/agent-loop.md +11 −5
284. **Wiederholen.** Die Schritte 2 und 3 wiederholen sich als Zyklus. Jeder vollständige Zyklus ist eine Runde. Claude ruft weiterhin Werkzeuge auf und verarbeitet Ergebnisse, bis es eine Antwort ohne Werkzeugaufrufe erzeugt.284. **Wiederholen.** Die Schritte 2 und 3 wiederholen sich als Zyklus. Jeder vollständige Zyklus ist eine Runde. Claude ruft weiterhin Werkzeuge auf und verarbeitet Ergebnisse, bis es eine Antwort ohne Werkzeugaufrufe erzeugt.
295. **Ergebnis zurückgeben.** Das SDK gibt eine endgültige [`AssistantMessage`](#message-types) mit der Textantwort (keine Werkzeugaufrufe) aus, gefolgt von einer [`ResultMessage`](#message-types) mit dem endgültigen Text, Token-Nutzung, Kosten und Sitzungs-ID.295. **Ergebnis zurückgeben.** Das SDK gibt eine endgültige [`AssistantMessage`](#message-types) mit der Textantwort (keine Werkzeugaufrufe) aus, gefolgt von einer [`ResultMessage`](#message-types) mit dem endgültigen Text, Token-Nutzung, Kosten und Sitzungs-ID.
30 30
3131Eine schnelle Frage („welche Dateien sind hier?") könnte eine oder zwei Runden dauern, in denen `Glob` aufgerufen und die Ergebnisse beantwortet werden. Eine komplexe Aufgabe („refaktorisieren Sie das Auth-Modul und aktualisieren Sie die Tests") kann Dutzende von Werkzeugaufrufen über viele Runden hinweg verketten, Dateien lesen, Code bearbeiten und Tests ausführen, wobei Claude seinen Ansatz basierend auf jedem Ergebnis anpasst.Eine schnelle Frage („welche Dateien sind hier?“) könnte eine oder zwei Runden dauern, in denen `Glob` aufgerufen und die Ergebnisse beantwortet werden. Eine komplexe Aufgabe („refaktorisieren Sie das Auth-Modul und aktualisieren Sie die Tests“) kann Dutzende von Werkzeugaufrufen über viele Runden hinweg verketten, Dateien lesen, Code bearbeiten und Tests ausführen, wobei Claude seinen Ansatz basierend auf jedem Ergebnis anpasst.
32 32
33<h2 id="turns-and-messages">33<h2 id="turns-and-messages">
34 Runden und Nachrichten34 Runden und Nachrichten
36 36
37Eine Runde ist eine Hin- und Rückfahrt in der Schleife: Claude erzeugt eine Ausgabe, die Werkzeugaufrufe enthält, das SDK führt diese Werkzeuge aus, und die Ergebnisse werden automatisch an Claude zurückgesendet. Dies geschieht, ohne die Kontrolle an Ihren Code zurückzugeben. Runden werden fortgesetzt, bis Claude eine Ausgabe ohne Werkzeugaufrufe erzeugt, woraufhin die Schleife endet und das endgültige Ergebnis geliefert wird.37Eine Runde ist eine Hin- und Rückfahrt in der Schleife: Claude erzeugt eine Ausgabe, die Werkzeugaufrufe enthält, das SDK führt diese Werkzeuge aus, und die Ergebnisse werden automatisch an Claude zurückgesendet. Dies geschieht, ohne die Kontrolle an Ihren Code zurückzugeben. Runden werden fortgesetzt, bis Claude eine Ausgabe ohne Werkzeugaufrufe erzeugt, woraufhin die Schleife endet und das endgültige Ergebnis geliefert wird.
38 38
3939Stellen Sie sich vor, wie eine vollständige Sitzung für den Prompt „Beheben Sie die fehlgeschlagenen Tests in auth.ts" aussehen könnte.Stellen Sie sich vor, wie eine vollständige Sitzung für den Prompt „Beheben Sie die fehlgeschlagenen Tests in auth.ts“ aussehen könnte.
40 40
41Zunächst sendet das SDK Ihren Prompt an Claude und gibt eine [`SystemMessage`](#message-types) mit den Sitzungsmetadaten aus. Dann beginnt die Schleife:41Zunächst sendet das SDK Ihren Prompt an Claude und gibt eine [`SystemMessage`](#message-types) mit den Sitzungsmetadaten aus. Dann beginnt die Schleife:
42 42
431. **Runde 1:** Claude ruft `Bash` auf, um `npm test` auszuführen. Das SDK gibt eine [`AssistantMessage`](#message-types) mit dem Werkzeugaufruf aus, führt den Befehl aus und gibt dann eine [`UserMessage`](#message-types) mit der Ausgabe (drei Fehler) aus.431. **Runde 1:** Claude ruft `Bash` auf, um `npm test` auszuführen. Das SDK gibt eine [`AssistantMessage`](#message-types) mit dem Werkzeugaufruf aus, führt den Befehl aus und gibt dann eine [`UserMessage`](#message-types) mit der Ausgabe (drei Fehler) aus.
442. **Runde 2:** Claude ruft `Read` auf `auth.ts` und `auth.test.ts` auf. Das SDK gibt eine `AssistantMessage` für jeden Aufruf aus und gibt die Dateiinhalte zurück.442. **Runde 2:** Claude ruft `Read` auf `auth.ts` und `auth.test.ts` auf. Das SDK gibt eine `AssistantMessage` für jeden Aufruf aus und gibt die Dateiinhalte zurück.
453. **Runde 3:** Claude ruft `Edit` auf, um `auth.ts` zu beheben, und ruft dann `Bash` auf, um `npm test` erneut auszuführen. Alle drei Tests bestehen. Das SDK gibt eine `AssistantMessage` für jeden Aufruf aus.453. **Runde 3:** Claude ruft `Edit` auf, um `auth.ts` zu beheben, und ruft dann `Bash` auf, um `npm test` erneut auszuführen. Alle drei Tests bestehen. Das SDK gibt eine `AssistantMessage` für jeden Aufruf aus.
46464. **Letzte Runde:** Claude erzeugt eine nur-Text-Antwort ohne Werkzeugaufrufe: „Behobener Auth-Bug, alle drei Tests bestehen jetzt." Das SDK gibt eine endgültige `AssistantMessage` mit diesem Text aus, gefolgt von einer [`ResultMessage`](#message-types) mit dem gleichen Text plus Kosten und Nutzung.4. **Letzte Runde:** Claude erzeugt eine nur-Text-Antwort ohne Werkzeugaufrufe: „Behobener Auth-Bug, alle drei Tests bestehen jetzt.“ Das SDK gibt eine endgültige `AssistantMessage` mit diesem Text aus, gefolgt von einer [`ResultMessage`](#message-types) mit dem gleichen Text plus Kosten und Nutzung.
47 47
48Das waren vier Runden: drei mit Werkzeugaufrufen, eine endgültige nur-Text-Antwort.48Das waren vier Runden: drei mit Werkzeugaufrufen, eine endgültige nur-Text-Antwort.
49 49
50Sie können die Schleife mit `max_turns` / `maxTurns` begrenzen, die nur Werkzeug-Nutzungsrunden zählt. Zum Beispiel würde `max_turns=2` in der obigen Schleife vor dem Bearbeitungsschritt gestoppt haben. Sie können auch `max_budget_usd` / `maxBudgetUsd` verwenden, um Runden basierend auf einem Ausgabenschwellenwert zu begrenzen.50Sie können die Schleife mit `max_turns` / `maxTurns` begrenzen, die nur Werkzeug-Nutzungsrunden zählt. Zum Beispiel würde `max_turns=2` in der obigen Schleife vor dem Bearbeitungsschritt gestoppt haben. Sie können auch `max_budget_usd` / `maxBudgetUsd` verwenden, um Runden basierend auf einem Ausgabenschwellenwert zu begrenzen.
51 51
5252Ohne Limits läuft die Schleife, bis Claude von selbst fertig ist, was für gut definierte Aufgaben in Ordnung ist, aber bei offenen Prompts lange laufen kann („verbessern Sie diese Codebasis"). Das Festlegen eines Budgets ist eine gute Standardeinstellung für Produktionsagenten. Siehe [Runden und Budget](#turns-and-budget) unten für die Optionsreferenz.Ohne Limits läuft die Schleife, bis Claude von selbst fertig ist, was für gut definierte Aufgaben in Ordnung ist, aber bei offenen Prompts lange laufen kann („verbessern Sie diese Codebasis“). Das Festlegen eines Budgets ist eine gute Standardeinstellung für Produktionsagenten. Siehe [Runden und Budget](#turns-and-budget) unten für die Optionsreferenz.
53 53
54<h2 id="message-types">54<h2 id="message-types">
55 Nachrichtentypen55 Nachrichtentypen
216| Option | Was es steuert | Standard |216| Option | Was es steuert | Standard |
217| :- | :- | :- |217| :- | :- | :- |
218| Max. Durchläufe (`max_turns` / `maxTurns`) | Maximale Tool-Use-Rundgänge | Keine Begrenzung |218| Max. Durchläufe (`max_turns` / `maxTurns`) | Maximale Tool-Use-Rundgänge | Keine Begrenzung |
219219| Max. Budget (`max_budget_usd` / `maxBudgetUsd`) | Maximale Kosten vor dem Stopp | Keine Begrenzung || Max. Budget (`max_budget_usd` / `maxBudgetUsd`) | Geschätzte Kosten, bei denen die Schleife stoppt | Keine Begrenzung |
220 220
221Wenn eine dieser Grenzen erreicht wird, gibt das SDK eine `ResultMessage` mit einem entsprechenden Fehler-Subtyp (`error_max_turns` oder `error_max_budget_usd`) zurück. Siehe [Handle the result](#handle-the-result) für die Überprüfung dieser Subtypen und [`ClaudeAgentOptions`](/docs/de/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/de/agent-sdk/typescript#options) für die Syntax.221Wenn eine dieser Grenzen erreicht wird, gibt das SDK eine `ResultMessage` mit einem entsprechenden Fehler-Subtyp (`error_max_turns` oder `error_max_budget_usd`) zurück. Siehe [Handle the result](#handle-the-result) für die Überprüfung dieser Subtypen und [`ClaudeAgentOptions`](/docs/de/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/de/agent-sdk/typescript#options) für die Syntax.
222 222
224 224
225Mit [Streaming-Eingabe](/docs/de/agent-sdk/streaming-vs-single-mode) bleibt eine Nachricht, die noch in der Warteschlange steht, wenn ein Durchlauf bei der max-turns-Grenze endet, in der Warteschlange. Claude Code fügt sie nicht zum letzten Modellaufruf dieses Durchlaufs hinzu. Es startet einen neuen Durchlauf für die Nachricht, und die max-turns-Zählung beginnt für diesen Durchlauf von vorne. Das Budget-Gesamtbudget wird über Nachrichten hinweg kumuliert, und sobald die Ausgaben `maxBudgetUsd` erreichen, enden spätere Nachrichten in derselben Konversation mit dem `error_max_budget_usd`-Ergebnis. Ein [`/clear`](/docs/de/agent-sdk/cost-tracking) startet das Budget neu.225Mit [Streaming-Eingabe](/docs/de/agent-sdk/streaming-vs-single-mode) bleibt eine Nachricht, die noch in der Warteschlange steht, wenn ein Durchlauf bei der max-turns-Grenze endet, in der Warteschlange. Claude Code fügt sie nicht zum letzten Modellaufruf dieses Durchlaufs hinzu. Es startet einen neuen Durchlauf für die Nachricht, und die max-turns-Zählung beginnt für diesen Durchlauf von vorne. Das Budget-Gesamtbudget wird über Nachrichten hinweg kumuliert, und sobald die Ausgaben `maxBudgetUsd` erreichen, enden spätere Nachrichten in derselben Konversation mit dem `error_max_budget_usd`-Ergebnis. Ein [`/clear`](/docs/de/agent-sdk/cost-tracking) startet das Budget neu.
226 226
227<h4 id="budget-headroom">
228 Budget-Spielraum
229</h4>
230
231Claude Code vergleicht die Ausgaben erst nach dem Eintreffen der Modellantworten mit der Obergrenze `max_budget_usd` / `maxBudgetUsd`, da sich die Kosten jeder Antwort aus der Token-Nutzung ergeben, die die API mit ihr zurückgibt. Die Antwort, die die Obergrenze erreicht, wird dennoch abgeschlossen und zählt zu [`total_cost_usd`](/docs/de/agent-sdk/cost-tracking#get-the-total-cost-of-a-query). Die Ausgaben können die Obergrenze daher um bis zu die Kosten dieser einen Antwort überschreiten, zuzüglich dessen, was zu diesem Zeitpunkt noch laufende Subagenten ausgeben, bevor sie stoppen. Planen Sie dafür beim Festlegen der Obergrenze Spielraum ein.
232
227<h3 id="effort-level">233<h3 id="effort-level">
228 Anstrengungsgrad234 Anstrengungsgrad
229</h3>235</h3>