Fehlerbehandlung und Wiederherstellung in Hermes Agent: Ein Deep Dive

Wenn LLM-Agenten von Prototypen in die Produktion überführt werden, sind die gefährlichsten Ausfälle selten falsche Antworten, sondern Systemabstürze um 2 Uhr morgens wegen eines 429-Fehlers, eines überlangen Logs oder eines abgelaufenen API-Keys. Viele Frameworks überlassen das dem try/except des Entwicklers. Hermes Agent baut die Wiederherstellung direkt in die Laufzeit ein.
Dieser Artikel zerlegt Hermes Agents sechsstufigen Fehlertoleranz-Stack: Fehlerklassifizierung, adaptive Wiederholung, Provider-Fallback, Kontextkomprimierung, Checkpoint-Rollback und Sitzungswiederherstellung. Sie werden genau sehen, wie Hermes sich selbst wieder auf die Beine stellt, wenn etwas schiefgeht.
1. Erst klassifizieren, dann entscheiden: Der Fehlerklassifikator
Hermes leitet jeden API-Fehler durch classify_api_error() in agent/error_classifier.py. Es behandelt nicht jede Ausnahme als generisches Netzwerkproblem, sondern ordnet sie einem konkreten FailoverReason zu: rate_limit, overloaded, context_overflow, payload_too_large, long_context_tier, auth, billing, content_policy_blocked, ssl_cert_verification, timeout, stream_drop, thinking_signature, model_incompatible und invalid_request.
Jeder Grund trägt drei Flags: retryable, should_fallback und should_compress. Die Wiederherstellungsschleife handelt auf Basis dieser Flags, nicht des rohen Fehlertexts. Das macht die Strategie vorhersagbar, testbar und erweiterbar.
2. Adaptive Wiederholung: Retry-After lesen, nicht nur schlafen
Hermes implementiert adaptive_rate_limit_backoff() in agent/retry_utils.py. Es handelt sich nicht um einen naiven exponentiellen Backoff. Es:
- Liest den HTTP-Header
Retry-After. - Begrenzt die Wartezeit auf 600 Sekunden, damit ein Provider die Sitzung nicht ewig blockiert.
- Verwendet spezielle Long-/Short-Backoff-Richtlinien für Z.AI-Coding-Überlastung.
- Fügt Jitter hinzu, damit mehrere gleichzeitige Hermes-Instanzen nicht gleichzeitig auf den Provider zurückschlagen.
Während der Wiederholungsschleife gibt Hermes einen kompakten Statusblock aus: Fehlertyp, Provider, Modell, verstrichene Zeit, Kontextgröße und Countdown. Diese Transparenz ist entscheidend für das Debugging von 24×7-Gateways oder Cron-Jobs.
3. Provider-Fallback: Vom lokalen Retry zum Cross-Provider-Escape
Hermes starrt nicht auf einen einzigen Provider. Es wählt den Pfad basierend auf dem Fehlertyp.
- Transparenter lokaler Retry: Bei Verbindungsabbrüchen, 5xx und 408 wird mehrmals auf demselben Provider wiederholt.
- Authentifizierungserneuerung und Credential-Pools: Bei
auth-Fehlern werden Credentials aktualisiert, Nous-Portal-Runtime erneuert und Keys rotiert, falls ein Pool konfiguriert ist. - Abrechnung und Rate Limits: Der aktuelle Provider wird als
unhealthymarkiert und die Fallback-Kette aktiviert: zuerst benutzerdefiniertefallback_chain, dann globalefallback_providers, dann interne Auto-Discovery-Kette. - Inhaltspolitik: Bei
content_policy_blockedwird nicht wiederholt; stattdessen bekommt der Nutzer eine klare Handlungsanweisung.
Bei Nous-Portal-429s schreibt Hermes einen sitzungsübergreifenden rate_limit-Datensatz, damit alle Worker denselben erschöpften Bucket nicht weiter belasten. Das ist ein Schutz für hochkonkurrente, langlaufende Deployments.
4. Kontextkomprimierung: Aus “Kontext-Explosion” wird Routine
Der häufigste Fehler in langen LLM-Gesprächen ist das Überschreiten des Kontextfensters. Hermes geht dabei ungewöhnlich präzise vor:
- Output-Cap-Fehler: Wenn
max_tokensdas Provider-Limit für das Modell übersteigt, wird der Nutzer aufgefordert,model.max_tokenszu senken, ohne Wiederholungen zu verschwenden. - Input-too-large: Hermes extrahiert das echte Limit aus der Fehlermeldung, aktualisiert die
context_lengthdes Kompressors und komprimiert die Nachrichten. - Minimax-Sonderfall: Wenn der Provider nur “um X Token überschritten” meldet, wird das Originalfenster beibehalten und komprimiert.
Die Komprimierung ist nicht einstufig: zuerst werden Nachrichten zusammengefasst, dann Bild-Payloads aus Tool-Nachrichten entfernt, und erst dann wird der Nutzer zu /new oder /compress aufgefordert. Bei Anthropic-Long-Context-Tier-Fehlern wird das Fenster temporär von 1M auf 200K reduziert und komprimiert, ohne den Downgrade zu persistieren.
5. Checkpoints und Rollbacks: Versicherung für Dateien und Zustand
Hermes enthält in tools/checkpoint_manager.py einen Dateisystem-Checkpoint-Manager. Jederzeit kann /rollback ausgeführt werden, um verfügbare Checkpoints aufzulisten und wiederherzustellen. Für Refactorings, Konfigurationsänderungen oder Batch-Dateioperationen ist das eine leichte Undo-Schicht.
Snapshots gehen weiter:
/snapshot create before-major-refactor
/snapshot restore 20260717_142030
/snapshot prune 10
/snapshot speichert Hermes-Konfiguration und Laufzeitstatus, während /rollback Arbeitsverzeichnis-Dateien sichert. Zusammen decken sie Zustand und Dateien ab.
6. Sitzungswiederherstellung: nahtloses Handoff zwischen CLI und Telegram
Hermes persistiert jede Konversation in einer SQLite-Datenbank unter ~/.hermes/state.db, inklusive vollständigem Nachrichtenverlauf, Tool-Calls, Token-Zählern, System-Prompt-Snapshots, Zeitstempeln und Parent-Sitzungs-IDs. Das bedeutet:
hermes --continueoderhermes -r <session_id>setzt die letzte CLI-Sitzung fort./new payments-refactorbenennt eine Sitzung, und/resume payments-refactorruft sie später ab.- Sitzungen können zwischen Plattformen übergeben werden: starten in der CLI, auf Telegram weitermachen, später mit
/resumeauf dem Desktop fortsetzen.
Beim Wiederherstellen zeigt Hermes eine kompakte Zusammenfassung, damit Sie den Thread nicht neu lesen müssen. Lange Sitzungen lassen sich mit /compress im Griff behalten.
7. Befehlsübersicht für Notfälle
| Befehl | Funktion |
|---|---|
/retry |
Letzte Nachricht erneut senden. |
/resume [name] |
Vorherige Sitzung fortsetzen. |
/new [name] / /reset |
Neue Sitzung starten, optional benennen. |
/compress [here [N] | focus topic] |
Kontext manuell komprimieren. |
/undo |
Letzten Austausch Nutzer/Assistant entfernen. |
/rollback [number] |
Dateisystem-Checkpoint auflisten oder wiederherstellen. |
/snapshot create/restore/prune |
Snapshots speichern, wiederherstellen oder aufräumen. |
/stop |
Alle Hintergrundprozesse beenden. |
hermes --continue |
Letzte CLI-Sitzung fortsetzen. |
hermes -r <id> |
Sitzung per ID fortsetzen. |
hermes -c "name" |
Sitzung per Name fortsetzen. |
8. Vergleich mit gängigen Frameworks
| Fähigkeit | Hermes Agent | OpenAI Agents | AutoGen/AG2 | CrewAI | LangGraph |
|---|---|---|---|---|---|
| Fehlerklassifizierung | Integriertes FailoverReason |
SDK-Basisfehler | Einfacher | Tool-Ebene | Selbst designen |
| Automatischer Provider-Fallback | Integrierte Fallback-Kette | Manuelle Implementierung | Teilweise | Nicht unterstützt | Manuelle Implementierung |
| Kontextkomprimierung | Integrierte Mehrstufigkeit | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt |
| Sitzungspersistenz/-wiederherstellung | SQLite + /resume |
Selbst speichern | Selbst speichern | Nicht unterstützt | State-Machine-Checkpoint |
| Dateisystem-Checkpoints | /rollback |
Nicht unterstützt | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt |
| Plattformübergreifendes Handoff | Integriert | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt |
Der Unterschied bei Hermes: Fehlerbehandlung ist kein optionales Plugin, sondern Teil des Agent-Runtimes. Sie schreiben keine try/except-Blöcke, pflegen keine Provider-Listen und kürzen keine Kontexte manuell. Das alles ist Standardverhalten.
9. Praktische Empfehlungen für Engineering-Teams
- Konfigurieren Sie einen Fallback-Provider. Mindestens einer in Produktion, damit 429 und 402 nicht zu nächtlichen Alerts werden.
- Benennen Sie wichtige Sitzungen. Mit
/new <task-name>können Sie später/resumenutzen und zwischen Plattformen wechseln. - Erstellen Sie Snapshots vor großen Änderungen.
/snapshot create <label>ermöglicht schnelles Zurückrollen. - Nutzen Sie cron no-agent für wiederholbare Aufgaben. Für wiederkehrende, kritische Jobs vermeiden
no_agent: true-Cron-Scripts mit direktem stdout die Unsicherheit der LLM-Inferenz. - Sichern Sie
~/.hermes/state.db. Dort lebt Ihr gesamter Konversationsverlauf.
Fazit
Hermes Agents Fehlerbehandlungssystem ist weit mehr als “ein paar Mal wiederholen und aufgeben”. Es greift die häufigsten Fehlermodi von LLM-Operationen aus sechs Richtungen an: Klassifizierung, Wiederholung, Fallback, Komprimierung, Checkpoints und Sitzungswiederherstellung. Für Teams, die Agenten in Produktion betreiben wollen, ist diese Selbstheilungsfähigkeit genauso wichtig wie die Reasoning-Fähigkeit des Modells selbst.
Wenn Sie noch Ad-hoc-Skripte für Provider-Ausfälle, Kontext-Blähung oder Modellwechsel schreiben, lassen Sie Hermes diese Drecksarbeit übernehmen. Konfigurieren Sie Ihren Fallback, drücken Sie /resume und machen Sie weiter.