logo
Entwicklung
Suchen
Agent-Schleifen-Engine

Agent-Schleifen-Engine

Überblick

Die Agent-Schleifen-Engine (Agent Loop) ist der zentrale Ausführungsmechanismus des Work-Moduls im Arbeitsbereich. Sie treibt den KI-Agenten durch eine autonome Denk-Ausführungs-Schleife: Aufgabe analysieren → Werkzeug auswählen → Aktion ausführen → Ergebnis bewerten → weiter denken, bis die Aufgabe abgeschlossen ist oder eine Abbruchbedingung ausgelöst wird.

Die Engine verwendet eine provider-agnostic Architektur und unterstützt über eine einheitliche LLM-Adapter-Schnittstelle verschiedene Modellanbieter.


Architektur

LLM-Adapter

AgentEngine │ ├── OpenAIAdapter │ ├── Responses API(增量状态管理) │ └── Chat Completions API(全量上下文) │ └── AnthropicAdapter └── Messages API(原生 streaming + thinking)
                      
                      AgentEngine
    │
    ├── OpenAIAdapter
    │   ├── Responses API(增量状态管理)
    │   └── Chat Completions API(全量上下文)
    │
    └── AnthropicAdapter
        └── Messages API(原生 streaming + thinking
                    
Dieser Codeblock im schwebenden Fenster

Der Adapter übernimmt automatisch:

  • Konvertierung des Nachrichtenformats (OpenAI ↔ Anthropic)
  • Konvertierung von Werkzeugdefinitionen
  • Verarbeitung von Think-Tags (automatisches Entfernen der <think>-Tags von Modellen wie DeepSeek)

Schleifenablauf

┌─ 预检验证 ──────────────────────────────────────────────┐ │ 拒绝超过输入预算 60% 的提示词,防止静默截断 │ └──────────────────────────┬──────────────────────────────┘ ▼ ┌─ 主循环(Round 0 → maxTurns-1)─────────────────────────┐ │ │ │ ① 上下文管理 │ │ - 预防性工具结果截断(Layer 1) │ │ - 检查是否需要压实(shouldPreemptiveCompact) │ │ │ │ ② LLM 调用 │ │ - 流式推理(text_delta + thinking + tool_use) │ │ - 事件实时推送到 UI │ │ │ │ ③ 工具执行 │ │ - validateToolCalls → 验证合法性 │ │ - 并发分区 → 按 concurrency 元数据分组 │ │ - 并行执行 → 结果归一化 │ │ │ │ ④ 退出判断 │ │ - 无工具调用 → 退出(end_turn) │ │ - 达到限制 → 退出(max_rounds/max_budget/deadline) │ │ - 异常 → 退出(circuit_breaker/fatal_error) │ │ - 有工具调用 → 继续下一轮 │ │ │ └──────────────────────────────────────────────────────────┘
                      
                      ┌─ 预检验证 ──────────────────────────────────────────────┐
│ 拒绝超过输入预算 60% 的提示词,防止静默截断              │
└──────────────────────────┬──────────────────────────────┘
                           ▼
┌─ 主循环(Round 0 → maxTurns-1)─────────────────────────┐
│                                                          │
│  ① 上下文管理                                            │
│     - 预防性工具结果截断(Layer 1)                        │
│     - 检查是否需要压实(shouldPreemptiveCompact)          │
│                                                          │
│  ② LLM 调用                                              │
│     - 流式推理(text_delta + thinking + tool_use)        │
│     - 事件实时推送到 UI                                   │
│                                                          │
│  ③ 工具执行                                              │
│     - validateToolCalls → 验证合法性                      │
│     - 并发分区 → 按 concurrency 元数据分组                │
│     - 并行执行 → 结果归一化                               │
│                                                          │
│  ④ 退出判断                                              │
│     - 无工具调用 → 退出(end_turn)                       │
│     - 达到限制 → 退出(max_rounds/max_budget/deadline)   │
│     - 异常 → 退出(circuit_breaker/fatal_error)          │
│     - 有工具调用 → 继续下一轮                             │
│                                                          │
└──────────────────────────────────────────────────────────┘

                    
Dieser Codeblock im schwebenden Fenster

Schleifenparameter

Parameter Standardwert Beschreibung
maxTurns 25 Maximale Anzahl an Schleifenrunden
maxErrors Schwellenwert für aufeinanderfolgende Werkzeugfehler
maxBudgetInputTokens Obergrenze des Eingabe-Token-Budgets
maxExecutionMs Obergrenze der Ausführungszeit (Millisekunden)
snapshotStrategy every_tool_round Strategie zum Speichern von Snapshots
resumeSessionId ID zur Wiederaufnahme einer unterbrochenen Sitzung

8 Abbruchbedingungen

Abbruchgrund Auslösebedingung
end_turn Der Agent hat die Aufgabe abgeschlossen, keine weiteren Werkzeugaufrufe
max_rounds Erreichen der Obergrenze maxTurns (standardmäßig 25 Runden)
circuit_breaker 5 aufeinanderfolgende fehlgeschlagene LLM-Aufrufe
no_tool_calls Keine Werkzeugaufruf-Anfrage in der LLM-Antwort
user_cancel Manueller Abbruch durch den Benutzer
context_overflow Kontext läuft nach der Komprimierung immer noch über
fatal_error Nicht behebbarer Fehler (Authentifizierungsfehler, Abrechnungsprobleme usw.)
compaction_exhausted Anzahl der Komprimierungsversuche erschöpft (maximal 5 Mal)

Circuit-Breaker-Mechanismus

Verhindert, dass aufeinanderfolgende LLM-Fehler zu endlosen Wiederholungsversuchen führen:

Parameter Wert Beschreibung
CIRCUIT_OPEN_THRESHOLD 5 5 aufeinanderfolgende Fehler lösen den Circuit Breaker aus
CIRCUIT_OPEN_WAIT_MS 60.000 Abkühlphase von 60 Sekunden nach Öffnen des Circuit Breakers

Fehlerklassifizierung und Wiederholungsstrategie:

Fehlertyp Strategie
rate_limit Wiederholung mit exponentiellem Backoff + zufälligem Jitter
timeout / overloaded Sofortige Wiederholung
context_overflow Löst Kontextkomprimierung aus
auth / billing / model_not_found Direkte Ausnahme (keine Wiederholung)

Streaming-Events

Der Ausführungsprozess des Agenten benachrichtigt die UI in Echtzeit über Streaming-Events:

Ereignistyp Daten Beschreibung
text_delta Textfragment Inkrementelle Übertragung der Textausgabe des Agenten
thinking Denkfragment Native Gedankenketten-Inhalte (Anthropic-Thinking-Modelle)
tool_use_start Werkzeugname + Parameter Beginn eines Werkzeugaufrufs
tool_result Ausführungsergebnis Werkzeugausführung abgeschlossen
error Fehlermeldung Fehler während des Ausführungsprozesses
done Abbruchgrund Ende der aktuellen Schleifenrunde

Die Ereignisse von Unter-Agenten werden an die UI-Oberfläche des übergeordneten Agenten durchgereicht.


EMA-Token-Kalibrierung

Die Engine verwendet den exponentiellen gleitenden Durchschnitt (EMA), um die Genauigkeit der Token-Schätzung dynamisch zu kalibrieren:

Parameter Wert Beschreibung
Anfangswert 3.0 chars/token Konservative Schätzung (angepasst an gemischte Szenarien aus Chinesisch + Code)
Erste 3 Male Mittelwertkonvergenz Schnelle Annäherung an den tatsächlichen Wert
Danach EMA α=0.15 Glättende Verfolgung des tatsächlichen Verbrauchs
Filter 0.5 < observed < 8 Ausschluss von Ausreißern

Nach jedem LLM-Aufruf wird der Kalibrierungsfaktor mit dem tatsächlichen Token-Verbrauch aktualisiert, um sicherzustellen, dass die Schätzung des Kontextbudgets immer genauer wird.


Sitzungs-Snapshots

Unterstützt die Persistierung des Sitzungszustands, um Fortschrittsverluste durch unerwartete Unterbrechungen zu verhindern:

Strategie Auslösezeitpunkt
every_tool_round(Standard) Nach jedem abgeschlossenen Werkzeugaufruf
every_round Nach jeder LLM-Interaktionsrunde
manual Nur manuelle Auslösung

Snapshots werden als JSON-Dateien gespeichert und verwenden atomares Schreiben (.tmp + rename), um Dateibeschädigungen zu verhindern. Über resumeSessionId können unterbrochene Sitzungen wiederhergestellt werden.



Was das für Benutzer bedeutet

Agent Loop ist die Fähigkeit, die du als „der Agent arbeitet kontinuierlich" wahrnehmen kannst. Wenn du sagst „Hilf mir, die Codestruktur dieses Projekts umzustrukturieren", antwortet der Agent nicht nur mit einem einzigen Vorschlag und hält dann an – er durchsucht automatisch Dateien, analysiert die Struktur, ändert einzelne Elemente und führt Tests aus, bis alles abgeschlossen ist.

Beobachtbare Phänomene:

  • Der Agent ruft nacheinander mehrere Werkzeuge auf (Dateien auflisten → Dateien lesen → Dateien ändern → Tests ausführen), und die Werkzeugaufrufe erscheinen der Reihe nach in der Oberfläche
  • Wenn der Agent 5 Mal hintereinander scheitert (z. B. API-Timeout), pausiert er 60 Sekunden statt endlos zu wiederholen – du siehst nach einer Wartezeit, wie der Agent dir mitteilt, dass ein Problem aufgetreten ist
  • Standardmäßig werden maximal 25 Runden ausgeführt; extrem komplexe Aufgaben können nach 25 Runden stoppen und dir mitteilen „Maximale Rundenzahl erreicht"

Was du tun kannst:

  • Du kannst jederzeit auf die Schaltfläche Stopp klicken, um die Ausführung des Agenten abzubrechen
  • Wenn der Agent in die falsche Richtung läuft, brich ab und gib eine klarere Anweisung
  • Bei besonders komplexen Aufgaben kannst du den Agenten zuerst einen Plan erstellen und dann ausführen lassen („Erstelle zuerst einen Plan und führe ihn erst nach meiner Bestätigung aus")

Verwandte Dokumente