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)
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) │
│ - 有工具调用 → 继续下一轮 │
│ │
└──────────────────────────────────────────────────────────┘
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
- 5-Ebenen-Strategie zur Kontextkomprimierung — Detaillierte Erläuterung der Kontextverwaltung
- Dreidimensionales Gedächtnissystem — Gedächtnisinjektion und -abfrage
- Work-Dialoginteraktion — Das Agent-Loop-Erlebnis in der Benutzeroberfläche
