Agent-Schleife & Fehlerbehebung
Die zentrale agentenbasierte Schleife: Nachricht empfangen, LLM aufrufen, Tools ausführen, iterieren, antworten.
Ablauf der Agent-Schleife
- Benutzernachricht speichern — wird mit Wichtigkeitsbewertung gespeichert
- Modell automatisch routen — Anfragekomplexität klassifizieren (falls nicht überschrieben)
- System-Prompt erstellen — Basis-Prompt + passende Skills + bekannte Fakten
- Kontext abrufen — Tri-Hybrid-Speicherabruf
- Iterieren (bis zu
max_iterations):- Angeheftete alte Erinnerungen + aktuelle Nachrichten sammeln (dedupliziert)
- OpenAI-Format-Nachrichtenliste erstellen
- LLM mit fehlerklassifizierter Wiederherstellung aufrufen
- Bei Tool-Aufrufen → jeden ausführen, Ergebnisse speichern, Schleife fortsetzen
- Bei keinen Tool-Aufrufen ODER letzter Iteration → Textantwort zurückgeben
- Maximale Iterationen erreicht → Timeout-Nachricht zurückgeben
Dynamisches Iterationsbudget
Der Agent verfügt über ein eingebautes request_more_iterations-Tool, das das Schleifenbudget erweitert, wenn das aktuelle Limit nicht ausreicht:
- Erweitert das Budget um 10 Iterationen pro Aufruf
- Harte Obergrenze verhindert unbegrenzte Erweiterung (typischerweise 25 insgesamt)
- Erfordert einen
reason-Parameter, der erklärt, was noch zu tun ist - Wird verwendet, wenn der Agent einen klaren Plan hat, aber sonst mitten in der Aufgabe die Iterationen ausgehen würden
Strategie zur Fehlerbehebung
Die Methode call_llm_with_recovery klassifiziert Fehler und reagiert entsprechend:
| Fehlertyp | Strategie |
|---|---|
| Auth / Billing | Sofort an den Benutzer zurückgeben — kein Retry |
| Rate Limit | retry_after_secs abwarten (max. 60s), einmal wiederholen |
| Timeout / Netzwerk / Serverfehler | 2s warten, einmal wiederholen; bei Fehlschlag auf vorheriges Modell zurückfallen |
| Not Found (falsches Modell) | Sofort zum Fallback-Modell wechseln |
| Unbekannt | Als Fehler weiterleiten |
Last Known Good
Nach jedem erfolgreichen LLM-Aufruf wird die aktuelle Konfiguration als
config.toml.lastgood gespeichert. Dies ermöglicht eine automatische Wiederherstellung nach fehlerhaften Konfigurationsänderungen.Korrektur der Nachrichtenreihenfolge
Um Einschränkungen bei Gemini-, Anthropic- und OpenAI-Anbietern zu erfüllen, führt aidaemon vor jedem LLM-Aufruf eine dreistufige Korrektur der Nachrichtenhistorie durch:
- Durchlauf 1: Aufeinanderfolgende Nachrichten gleicher Rolle zusammenführen (tool_calls-Arrays kombinieren)
- Durchlauf 2: Verwaiste Tool-Ergebnisse entfernen (kein passender assistant tool_call) und verwaiste tool_calls bereinigen (kein passendes Tool-Ergebnis)
- Durchlauf 3: Erneut zusammenführen, da nach dem Entfernen verwaister Einträge neue aufeinanderfolgende Nachrichten gleicher Rolle entstehen können
Tool-Ausführung
Während der Schleife erhält jeder Tool-Aufruf:
_session_id— wird automatisch für die Sitzungsverfolgung injiziert_untrusted_source— Flag, das für Trigger-basierte Sitzungen gesetzt wird
Stall- & Wiederholungserkennung
Die Agent-Schleife enthält Schutzmaßnahmen gegen Blockierungen:
- Stall-Erkennung — wenn dasselbe Tool 3+ Mal hintereinander mit ähnlichen Argumenten aufgerufen wird, wird die Schleife abgebrochen
- Wiederholungserkennung — erkennt wiederholten Antworttext und erzwingt einen Abbruch
- Harte Iterationsgrenze — Standard 10, erweiterbar auf 25 über
request_more_iterations
Sitzungstypen
| Sitzungstyp | Format | Trusted |
|---|---|---|
| Telegram-Chat | Chat-ID als String | Ja |
| Slack-Kanal | slack:{channel_id} oder slack:{channel_id}:{thread_ts} | Ja |
| Discord-Kanal | discord:{channel_id} | Ja |
| E-Mail-Trigger | email_trigger | Nein |
| Event-Trigger | event_{uuid} | Nein |
| Sub-Agent | sub-{depth}-{uuid} | Geerbt |