KI-Agenten 03

Selbstreflexion in Agentischen Systemen

Michael Schöffel

3. Februar 202615 Min. Lesezeit

KI-Agenten - Selbstreflexion in Agentischen Systemen

1. Zusammenfassung

Der Übergang von statischen Sprachmodellen zu autonomen, langlaufenden KI-Agenten erfordert robuste Mechanismen zur Fehlerbewältigung ohne menschliche Intervention. Dieser Beitrag analysiert die Architektur der Selbstreflexion als zentralen kognitiven Regelkreis, der probabilistische Fehler wie Halluzinationen und logische Schleifen durch Metakognition korrigiert. Durch die Integration von System-2-Denkprozessen, verbalem Reinforcement Learning und hierarchischen Task-Trees (z.B. in PentestGPT) werden Fehlerursachen dynamisch analysiert und Strategien zur Laufzeit angepasst. Technische Implementierungen wie Circuit Breakers und Loop-Detection mittels Zustandsvektoren verhindern Deadlocks, während Grounding-Methoden die Realitätsbindung sichern. Metakognitive Architekturen transformieren somit fragile Skripte in resiliente Systeme, die ihre eigene Handlungsfähigkeit durch kontinuierliche Selbstüberwachung aufrechterhalten.

2. Einleitung

Die Entwicklung künstlicher Intelligenz hat in den letzten Jahren einen paradigmatischen Wandel vollzogen, der weit über die bloße Generierung von Text oder Code hinausgeht. Wir befinden uns am Übergang von statischen Sprachmodellen (Large Language Models, LLMs), die als passive Orakel fungieren, hin zu dynamischen, agentischen Systemen, die als autonome Akteure in digitalen Umgebungen operieren [1]. Während der klassische Chatbot-Interaktionsmodus dem Muster "Prompt and Pray" folgt - einer einmaligen, linearen Transaktion, deren Erfolg fast ausschließlich von der Qualität der Eingabe abhängt -, erfordern Long-Running AI Agentic Systems eine fundamentale Änderung der Architektur.

Ein System, das dazu konzipiert ist, komplexe Aufgaben wie Penetrationstests (z.B. PentestGPT [2]), Softwareentwicklung oder wissenschaftliche Recherche über Stunden oder Tage hinweg autonom auszuführen, wird unvermeidlich auf Fehler stoßen. In der deterministischen Softwareentwicklung sind Fehler binäre Ereignisse: Ein Programm stürzt ab oder läuft durch. In der probabilistischen Welt der LLM-basierten Agenten ist der Fehlerbegriff jedoch diffuser. Fehler manifestieren sich als Halluzinationen, logische Fehlschlüsse, das Festhängen in repetitiven Handlungsschleifen oder das subtile Abdriften vom ursprünglichen Ziel.

Die kritische Fähigkeit, die einen robusten Agenten von einem fragilen Skript unterscheidet, ist die Selbstreflexion (Self-Reflection). Sie ist der kognitive Regelkreis, der es dem System ermöglicht, seine eigenen Handlungen zu überwachen, Fehler zu erkennen, ihre Ursachen zu analysieren und korrigierende Maßnahmen einzuleiten - und das alles ohne menschliche Intervention.

Dieser Bericht, der dritte Teil meiner Serie über agentische Systeme, widmet sich exklusiv der tiefgehenden Analyse dieser Fehlerkorrekturmechanismen. Wir untersuchen nicht nur die theoretischen Modelle wie das Reflexion-Framework [3] oder System 2 Thinking [4], sondern dringen tief in die technischen Implementierungsdetails vor: Von der Erkennung von Endlosschleifen mittels Zustandsvektoren über die Implementierung von "Circuit Breakers" in Python bis hin zur hierarchischen Aufgabenverwaltung mittels Task Trees [2]. Ziel ist es, ein umfassendes Verständnis dafür zu schaffen, wie wir Maschinen das "Nachdenken über das eigene Denken" (Metakognition) beibringen können, um die Zuverlässigkeit autonomer Operationen zu gewährleisten.

3. Theoretische Fundamente der Agentischen Autonomie

Um die Notwendigkeit und die Mechanismen der Selbstreflexion zu verstehen, müssen wir zunächst die kognitiven und systemtheoretischen Grundlagen betrachten, auf denen moderne KI-Agenten operieren. Die bloße Fähigkeit eines LLMs, Code zu generieren oder APIs aufzurufen, konstituiert noch keine Handlungsfähigkeit (Agency). Agency entsteht erst durch die Schließung des Regelkreises zwischen Wahrnehmung, Kognition und Aktion.

3.1 Kybernetik und der OODA-Loop in Probabilistischen Systemen

Die Wurzeln der autonomen Fehlerkorrektur liegen in der Kybernetik, der Wissenschaft von der Steuerung und Regelung von Systemen. Ein agentisches System ist im Kern ein homöostatischer Regelkreis, der versucht, die Diskrepanz zwischen einem Ist-Zustand (aktuelle Umgebung) und einem Soll-Zustand (Nutzerziel) zu minimieren.

In der militärischen Strategie und später in der Systemtheorie wird dieser Prozess oft durch den OODA-Loop (Observe, Orient, Decide, Act) beschrieben, ein Modell, das sich hervorragend auf KI-Agenten übertragen lässt:

  1. Observe (Beobachten): Der Agent nimmt Signale aus seiner Umgebung auf. Dies können die Rückgabewerte eines Tools (z.B. nmap Scan-Ergebnisse), Fehlermeldungen eines Compilers (stderr) oder der Textinhalt einer Webseite sein.
  2. Orient (Orientieren): Dies ist der kritischste Schritt für die Fehlerkorrektur. Der Agent muss die rohen Beobachtungsdaten kontextualisieren. Bedeutet der Exit-Code 1 einen temporären Netzwerkfehler oder einen fundamentalen Syntaxfehler? Ist die Antwort "404 Not Found" ein Misserfolg oder eine wertvolle Information über die Nicht-Existenz einer Ressource? Hier findet die Reflexion statt: Der Vergleich der Erwartungshaltung mit der Realität.
  3. Decide (Entscheiden): Basierend auf der Orientierung wird eine neue Strategie formuliert. "Ich muss die Syntax korrigieren" oder "Ich muss eine andere Scan-Technik verwenden".
  4. Act (Handeln): Der Agent führt die Aktion aus, was wiederum neue Beobachtungen generiert.

In klassischen, deterministischen Automatisierungsskripten sind die Phasen Orient und Decide fest kodiert ("Wenn Fehler X, dann mache Y"). In LLM-basierten Agenten sind diese Phasen probabilistisch. Das Modell muss zur Laufzeit "entscheiden", wie ein Fehler zu interpretieren ist. Das Problem vieler früher Agenten-Designs (wie AutoGPT in seinen Anfängen) war das Überspringen oder Verkürzen der Orient-Phase - der Agent handelte blind auf Basis des letzten Outputs (ReAct-Pattern ohne ausreichende Reflexion), was zu schnellen, aber oft fehlerhaften Handlungssequenzen führte.

3.2 System 1 vs. System 2 Denken: Die Kognitive Lücke

Die Kognitionspsychologie, insbesondere die Arbeit von Daniel Kahneman [4], unterscheidet zwischen zwei Denkmodi:

  • System 1: Schnell, instinktiv, assoziativ und fehleranfällig.
  • System 2: Langsam, deliberativ, logisch und anstrengend.

Large Language Models operieren in ihrer Standardkonfiguration (Next Token Prediction) primär im Modus von System 1. Sie generieren die statistisch wahrscheinlichste Fortsetzung eines Textes. Dies ist effizient, führt aber bei komplexen Logikaufgaben oder mehrstufigen Plänen oft zu Flüchtigkeitsfehlern oder Halluzinationen, da das Modell nicht "innehält", um seine Ausgabe zu prüfen.

Selbstreflexion in Agenten ist der architektonische Versuch, System 2 künstlich zu erzwingen. Indem wir den Agenten zwingen, seinen eigenen Output vor oder nach der Ausführung explizit zu analysieren, verlangsamen wir den Prozess bewusst. Wir tauschen Rechenzeit (Compute) und Latenz gegen Qualität und Präzision [7]. Ein Agent, der aufgefordert wird: "Überprüfe deinen Plan auf logische Konsistenz, bevor du ihn ausführst", wechselt effektiv in einen System-2-Modus. Dieser Prozess bricht die lineare Kette der Token-Vorhersage auf und ermöglicht eine Optimierung innerhalb des Kontext-Fensters (In-Context Learning), ohne dass die Gewichte des Modells angepasst werden müssen.

3.3 Das Konzept der Verbalen Rückkopplung (Verbal Reinforcement)

Ein zentraler Unterschied zwischen klassischem Reinforcement Learning (RL) und der Selbstkorrektur bei LLMs liegt in der Natur des Feedback-Signals.

In RL-Umgebungen (wie AlphaGo) erhält der Agent ein skalares Belohnungssignal (Reward): +1 für Sieg, -1 für Niederlage, 0 für neutrale Schritte. Für ein Sprachmodell ist ein solches skalares Signal oft zu informationsarm (Sparse Reward Problem). Es sagt dem Modell zwar, dass es falsch lag, aber nicht warum oder wie es sich verbessern kann.

Das Reflexion-Framework (Shinn et al. [3]) und ähnliche Ansätze postulieren daher den Einsatz von verbalem Feedback. Der "Gradient", entlang dessen der Agent optimiert wird, ist keine abstrakte Zahl, sondern ein Text - die Selbstkritik des Agenten.

  • Skalarer Ansatz: Fehlercode 500. Reward: -1.
  • Verbaler Ansatz: "Ich habe einen Internal Server Error (500) erhalten. Dies deutet darauf hin, dass meine Payload Zeichen enthält, die vom Backend nicht verarbeitet werden können. Vermutlich muss ich die Anführungszeichen escapen.".

Diese verbale Spur (Trace) wird im Kurzzeitgedächtnis (siehe Teil 5 der Serie) gespeichert und dient als explizite Instruktion (Hint) für den nächsten Versuch. Das Modell nutzt seine eigene semantische Argumentationsfähigkeit, um seine zukünftigen Aktionen zu steuern. Dies stellt einen tiefgreifenden konzeptionellen Sprung dar: Wir nutzen die Intelligenz des LLMs als Optimierungsmechanismus für sich selbst.

3.4 Von der Aktion zur Intention

Ein weiterer theoretischer Aspekt ist die Verschiebung des Fokus von der Aktion zur Intention. Wie Masato Chino argumentiert [8], reicht ein bloßes "Retry" (Wiederholen der Aktion) oft nicht aus, da es blind gegenüber der Ursache ist. Wahre Fehlerkorrektur erfordert das Verständnis der korrektiven Absicht (Corrective Intent). Wenn ein Agent versucht, eine Datei zu lesen und scheitert, ist die Absicht nicht "Führe den Befehl cat erneut aus", sondern "Erlange den Inhalt der Datei". Wenn cat fehlschlägt, könnte die korrekte Umsetzung der Absicht sein, more, head oder einen Editor zu verwenden [8]. Selbstreflexion muss daher auf der Ebene der Intention operieren ("Was wollte ich erreichen?") und nicht nur auf der Ebene der Operation ("Welchen Befehl habe ich getippt?").

3.5 Grounding: Die Notwendigkeit der Realitätsverankerung

Die kritische Voraussetzung für eine erfolgreiche Selbstreflexion ist das Grounding - die rigorose Verankerung der internen Überlegungen ("Reasoning") des Agenten in verifizierbaren externen Realitäten. Ohne diesen Mechanismus degenerieren selbstreflexive Schleifen zu einer "Echokammer der Halluzination".

Wenn ein Large Language Model (LLM) einen Plan oder ein Ergebnis generiert, das auf einer falschen Prämisse beruht, wird ein rein semantischer Selbstreflexionsschritt diesen Fehler oft nur bestätigen, da das Modell nur auf interne Konsistenz, nicht aber auf die externe Wahrheit prüft. Grounding durchbricht diese Schleife, indem es das Denken des Agenten den harten Zwängen der digitalen Welt unterwirft. Es liefert das notwendige "Fehlersignal" - einen Compiler-Fehler, einen API-Code oder einen fehlenden Datenbankeintrag -, das echtes, verankertes Lernen erst ermöglicht. Es ist die Physik der digitalen Welt des Agenten.

4. Die Anatomie des Fehlers in Autonomen Systemen

Bevor wir Lösungen diskutieren, müssen wir die Probleme klassifizieren. In langlaufenden agentischen Systemen treten Fehler in verschiedenen Kategorien auf, die jeweils unterschiedliche Detektions- und Korrekturstrategien erfordern. Eine präzise Diagnose ist die Voraussetzung für eine effektive Therapie.

  • Syntaktische Fehler (Hard Errors): Der generierte Output verstößt gegen formale Regeln des Systems oder der Sprache. Beispiel: Ungültiges JSON, Python SyntaxError, falsche API-Parameter. Detektion: Deterministisch (Parser-Exceptions, Compiler-Logs).
  • Ausführungsfehler (Runtime Errors): Der Befehl ist syntaktisch korrekt, scheitert aber an der Umgebung. Beispiel: Timeout, File Not Found, Permission Denied. Detektion: Deterministisch (Exit-Codes, stderr).
  • Logische Fehler (Reasoning Errors): Der Agent zieht falsche Schlüsse aus korrekten Daten. Beispiel: "Port 80 ist geschlossen, also ist der Server offline" (falsch). Detektion: Probabilistisch (Self-Consistency Checks).
  • Halluzinationen (Factuality Errors): Der Agent erfindet Fakten oder ignoriert Beobachtungen. Beispiel: Agent behauptet Datei existiert, obwohl ls sie nicht zeigte. Detektion: Probabilistisch (Grounding-Prüfung).
  • Strategische Sackgassen (Loop Errors): Der Agent wiederholt ineffektive Handlungen ohne Fortschritt. Beispiel: Probieren desselben Passworts in Endlosschleife. Detektion: Heuristisch (State Tracking).

4.1 Das Problem der Fehlerfortpflanzung (Cascading Failures)

In langlaufenden Systemen ist der isolierte Fehler selten das Problem. Das wahre Risiko ist die Fehlerkaskade. Ein kleiner Halluzinationsfehler zu Beginn (z.B. die falsche Annahme, dass der Webserver Apache nutzt, obwohl es Nginx ist) führt dazu, dass alle nachfolgenden Exploits (Apache-spezifische Payloads) fehlschlagen. Ohne Reflexion interpretiert der Agent das Scheitern der Exploits als "Server ist sicher" statt als "Meine Grundannahme war falsch". Selbstreflexion dient hier als "Notbremse" oder "Sanity Check", der regelmäßig die Grundannahmen hinterfragt: "Warum schlagen alle Exploits fehl? Könnte meine Identifikation des Servers falsch gewesen sein?".

5. Architekturmuster der Selbstreflexion

Wie implementiert man diese theoretischen Konzepte in konkreten Softwarearchitekturen? Die Forschung und Praxis haben mehrere Design-Patterns hervorgebracht, die sich in ihrer Komplexität und Anwendbarkeit unterscheiden.

5.1 Das Reflexion-Pattern (Actor-Evaluator-Reflector)

Das Reflexion-Modell ist der De-facto-Standard [3], [10] für iterative Fehlerkorrektur. Es zerlegt den Agentenprozess in drei Komponenten, die oft durch dasselbe LLM mit unterschiedlichen System-Prompts realisiert werden:

  1. Actor (Der Handelnde):
    • Rolle: Generiert Aktionen und Texte basierend auf dem aktuellen Zustand und dem Ziel.
    • System 1: Operiert schnell und zielgerichtet.
    • Output: Eine Trajektorie (Trajectory) von Aktionen.
  2. Evaluator (Der Bewerter):
    • Rolle: Bewertet die Qualität des Outputs.
    • Natur: Kann deterministisch sein oder ein weiteres LLM [10].
    • Output: Ein Erfolgssignal (Score) oder Fehlermeldung.
  3. Self-Reflection (Der Reflektor):
    • Rolle: Wird aktiviert, wenn der Evaluator einen Misserfolg meldet. Analysiert die Trajektorie und den Fehler.
    • System 2: Generiert eine verbale Zusammenfassung des Fehlers und einen Plan für die Zukunft.
    • Speicher: Diese Reflexion wird im episodischen Gedächtnis abgelegt.

Prozessablauf im Code (Pseudocode):

1memory = []
2while not task_solved and attempts < max_attempts:
3    # 1. Actor handelt (unter Berücksichtigung bisheriger Fehler)
4    context = goal + "\nPrevious Lessons:\n" + "\n".join(memory)
5    action = actor.generate(context)
6    
7    result = environment.execute(action)
8    
9    # 2. Evaluator prüft
10    if evaluator.is_success(result):
11        print("Task Solved!")
12        break
13    
14    # 3. Reflektor analysiert
15    # Hier wird explizit System 2 (Reflexion) eingeschaltet
16    critique = reflector.reflect(
17        action_taken=action, 
18        outcome=result, 
19        original_goal=goal
20    )
21    
22    # Speichere die Erkenntnis für den nächsten Durchlauf
23    memory.append(critique) 
24    # Beispiel: "Merke: 'cat' funktioniert nicht für Verzeichnisse, nutze 'ls'."

Diese Schleife ermöglicht es dem Agenten, Fehler als Informationsquelle zu nutzen, anstatt sie nur als Hindernis zu sehen.

5.2 Hierarchische Denkstrukturen: Der Task Tree (PTT)

Für komplexe, mehrstufige Operationen wie Penetrationstests reicht eine flache Reflexionsschleife oft nicht aus. Hierarchische Strukturen wie der Pentesting Task Tree (PTT), implementiert in PentestGPT, bieten eine robustere Lösung.

Der PTT ist eine explizite Datenstruktur, die den mentalen Zustand des Agenten externalisiert. Er unterteilt die Mission in:

  • Root: Das Gesamtziel (z.B. "Root-Zugriff auf Server X").
  • High-Level Tasks: Phasen wie "Reconnaissance", "Scanning", "Exploitation".
  • Sub-Tasks: Spezifische Aufgaben wie "Port Scan", "Web Directory Enumeration".
  • Atomic Operations: Konkrete Befehle wie nmap -sC -sV target.

Reflexion im PTT:

Das Reasoning Module (eine Art Manager-Agent) überwacht den Baum. Wenn eine atomare Operation fehlschlägt, propagiert der Fehler im Baum nach oben. Die Reflexion findet auf der Ebene der Aufgabenlogik statt:

  • Lokal: "Der nmap Befehl war falsch formatiert. Korrigiere Syntax." (Retry auf Leaf-Level).
  • Global: "Der Port Scan zeigt keine Web-Ports. Die Aufgabe 'Web Directory Enumeration' ist daher obsolet. Wir markieren diesen Ast als 'Impossible' und wechseln zum Ast 'SSH Brute Force'. ".

Untersuchungen zeigen, dass diese Struktur extrem effektiv ist: In Benchmarks erreichte PentestGPT eine Steigerung der Aufgaben-Erledigungsrate (Task Completion) um 228,6% im Vergleich zu einem GPT-3.5-Modell ohne diese hierarchische Führung. Diese Struktur verhindert, dass der Agent sich in Details verliert (Micro-Management) und ermöglicht strategisches Backtracking. Wenn ein ganzer Lösungsansatz scheitert, erlaubt der PTT dem Agenten, zu einem höheren Entscheidungsknoten zurückzukehren und einen alternativen Pfad zu wählen, ähnlich wie ein menschlicher Tester vorgehen würde.

5.3 Metacognition und das "Strands"-Framework

Neuere Frameworks wie Strands (genutzt im CyberAutoAgent) und Konzepte der Metacognition gehen über einfache Feedback-Schleifen hinaus. Sie implementieren eine Ebene der "Überwachung des Denkprozesses".

In diesem Modell agiert der Agent nicht nur, sondern bewertet kontinuierlich sein eigenes Vertrauensniveau (Confidence Score).

  • High Confidence (>80%): Der Agent führt spezialisierte Tools direkt aus ("Muscle Memory").
  • Medium Confidence: Der Agent fordert mehr Informationen an oder validiert seine Annahmen.
  • Low Confidence (<50%): Der Agent stoppt die Ausführung und wechselt in einen "Deep Reasoning" Modus oder initiiert einen Schwarm von Sub-Agenten, um parallele Hypothesen zu testen.

Diese metakognitive Schicht wirkt als interner Risikomanager. Sie verhindert, dass der Agent "halluzinierte Sicherheit" mit aggressiven Aktionen verbindet, was in Sicherheitskontexten (z.B. versehentliches Abstürzen eines Produktionsservers) fatal wäre.

5.4 Multi-Agenten Kritik (Red Teaming)

Ein einzelnes Modell neigt dazu, seine eigenen Fehler zu übersehen ("Confirmation Bias"). Multi-Agenten-Architekturen lösen dies durch Rollentrennung:

  • Generator Agent: Erstellt den Plan oder Code.
  • Critic Agent: Hat die explizite Instruktion (System Prompt), Fehler zu finden. Er ist oft mit einer höheren "Temperature" konfiguriert, um kreative Schwachstellen im Plan zu finden.

Untersuchungen zeigen, dass diese Trennung die Robustheit massiv erhöht. Der Kritiker fungiert als "Red Team" gegen den eigenen Plan des Agenten. In Frameworks wie LangGraph lässt sich dies als zyklischer Graph modellieren: Start → Plan → Critique → (if flawed) → Revise Plan → Critique… → Execute.

6. Technische Implementierung: Code, Prompts und State Management

Die Theorie ist elegant, doch die Herausforderung liegt in der robusten Implementierung. Wie übersetzt man "Reflexion" in Python-Code und Prompts?

6.1 Fehlererkennung und "Fail Loudly"

Damit ein Agent reflektieren kann, muss er den Fehler "sehen". In vielen Python-Bibliotheken werden Fehler standardmäßig abgefangen oder nur spärlich geloggt. Für Agenten gilt jedoch das Prinzip Fail Loudly.

Wenn ein Tool ausgeführt wird, muss der Rückgabewert nicht nur das Ergebnis (stdout), sondern im Fehlerfall auch den vollständigen Fehlerkontext (stderr, Stack Trace) enthalten.

Beispielhafter Wrapper für Tool-Execution (Python):

1import traceback
2
3def execute_tool_with_reflection(tool_name, tool_obj, args):
4    try:
5        # Versuche, das Tool auszuführen
6        result = tool_obj.run(args)
7        return {
8            "status": "success", 
9            "output": result
10        }
11    except Exception as e:
12        # Fange den Fehler ab, aber gib ihn als strukturiertes Datenobjekt zurück
13        # Dies ist das "Futter" für den Reflektor
14        return {
15            "status": "error",
16            "error_type": type(e).__name__,
17            "error_message": str(e),
18            "trace": traceback.format_exc() # Vollständiger Stacktrace für tiefe Analyse
19        }

Dieser strukturierte Fehler wird dann direkt in den Prompt des Modells injiziert. Wichtig ist, dass das System durch den Fehler nicht abstürzt, sondern ihn in den Datenfluss des Agenten integriert.

6.2 Prompt Engineering für Reflexion

Ein Reflexions-Prompt muss das Modell zwingen, den Kontext zu wechseln - weg vom "Lösen" hin zum "Analysieren". Basierend auf Analysen von PentestGPT und LangChain-Implementierungen haben sich folgende Komponenten als essenziell erwiesen:

  1. Rollenwechsel: "Du bist jetzt kein Coder mehr, sondern ein Senior Code Reviewer."
  2. Kontext-Injektion: "Hier ist der Code, den du geschrieben hast, und hier ist der Fehler, den er produziert hat:."
  3. Explizite Anweisung zur Analyse: "Analysiere Schritt für Schritt, warum dieser Fehler aufgetreten ist. War es ein Syntaxfehler, ein Logikfehler oder eine falsche Annahme über die Umgebung?"
  4. Strukturierte Ausgabe (JSON): Um die Reflexion maschinenlesbar zu machen, sollte die Antwort strukturiert sein.
    1{
    2   "analysis": "Der Fehler 'KeyError: target' zeigt, dass das Dictionary 'config' den Schlüssel nicht enthält.",
    3   "reason": "Ich habe vergessen, die Konfiguration zu laden, bevor ich darauf zugriff.",
    4   "correction_plan": "Füge 'config.load()' vor dem Zugriff ein."
    5}
  5. Chain of Hindsight: Dem Modell Beispiele von schlechten Versuchen und deren erfolgreicher Korrektur zu zeigen (Few-Shot Prompting), verbessert die Fähigkeit zur Selbstkorrektur signifikant.

6.3 State Management: "Turns" und Persistenz

Selbstreflexion erfordert Gedächtnis. Ein LLM ist zustandslos (stateless). Das Framework muss den Zustand verwalten. In CAI wird dies durch das Konzept der Turns (Züge) und Interactions realisiert.

  • Ein Turn ist ein vollständiger Denkzyklus (Reason → Act → Observe).
  • Der Zustand (state) enthält die Historie der Turns.
  • Bei der Reflexion wird der Zustand nicht gelöscht, sondern angereichert. In LangGraph wird dies beispielsweise durch das MessageState-Schema und einen Reducer (typischerweise add_messages) verwaltet. Dieser Mechanismus garantiert, dass die Historie append-only ist: Neue Fehlermeldungen überschreiben nicht den alten Plan, sondern erweitern die Historie, sodass das Modell den kausalen Zusammenhang zwischen Aktion und Fehler "sehen" kann.

Der fehlgeschlagene Turn bleibt im Verlauf, markiert als Fehler. Der nächste Turn erhält diesen Kontext. Dies unterscheidet sich von einfachen "Retry"-Logiken, bei denen oft der fehlgeschlagene Versuch verworfen wird. Für den Lernprozess des Agenten ist der Fehlschlag jedoch genauso wichtig wie der Erfolg.

7. Das Problem der Endlosschleifen (Infinite Reasoning Loops)

Die vielleicht größte technische Herausforderung bei autonomen Fehlerkorrektursystemen ist die Endlosschleife. Ein Agent, der einen Fehler zwar erkennt, aber die Ursache falsch diagnostiziert, neigt dazu, dieselbe ineffektive Korrektur immer wieder anzuwenden ("Insanity is doing the same thing over and over again and expecting different results"). Da das Halteproblem (Halting Problem) für Turing-vollständige Systeme (zu denen Agenten + Python-Umgebung zählen) theoretisch unlösbar ist, müssen wir praktische Heuristiken und Sicherheitsmechanismen ("Circuit Breakers") implementieren.

7.1 Erkennung von Loops: Mehr als nur Hash-Vergleiche

Wie erkennt ein System, dass ein Agent "feststeckt"?

  1. Hash-History (Der naive Ansatz): Man speichert Hashes aller ausgeführten Befehle. Wenn hash(cmd) schon existiert → Loop.
    • Problem: LLMs sind nicht deterministisch. print("Hello") und print('Hello') haben unterschiedliche Hashes, sind aber semantisch identisch.
  2. Semantische Ähnlichkeit (Semantic Similarity): Eine robustere Methode nutzt Vektor-Embeddings.
    • Jeder "Gedanke" oder "Plan" wird in einen Vektor umgewandelt.
    • Das System berechnet die Kosinus-Ähnlichkeit (Cosine Similarity) des aktuellen Plans zu den letzten Plänen.
    • Wenn die Ähnlichkeit einen Schwellenwert (z.B. > 0.95) überschreitet, deutet dies auf eine argumentative Stagnation hin.
  3. Visited States im Problemraum:
    • Für spezifische Domänen (wie Navigation oder Pentesting) kann man den "Zustand der Welt" definieren.
    • Wenn eine Kette von Aktionen den Zustand der Welt nicht verändert (z.B. 5x ls im selben Ordner), greift der Loop-Detektor.

7.2 Strategien zum Durchbrechen: Der "Circuit Breaker"

Wenn ein Loop erkannt wird, muss das System intervenieren. Einfaches Abbrechen ist bei missionskritischen Systemen oft keine Option. Hier kommt das Circuit Breaker Pattern (Sicherung) zum Einsatz, adaptiert aus der Microservices-Architektur.

  • Closed State (Normalbetrieb): Der Agent darf alle Tools nutzen.
  • Open State (Fehlerfall): Wenn ein bestimmtes Tool (z.B. sqlmap) 3x hintereinander fehlschlägt oder in einem Loop verwendet wird, "springt die Sicherung raus".
  • Konsequenz: Das Tool wird temporär gesperrt. Der Agent erhält die Rückmeldung: "Tool sqlmap ist temporär nicht verfügbar aufgrund wiederholter Fehler. Nutze eine alternative Methode."

Dies zwingt den Agenten, seine Strategie (Intent) zu ändern, anstatt stur weiterzumachen. In Python kann dies beispielsweise mit Bibliotheken wie aiobreaker [17] elegant implementiert werden, die als Decorator um Agenten-Funktionen gelegt werden.

Implementierung eines Circuit Breakers in Python (Konzeptuell):

1import time
2
3class CircuitBreaker:
4    def __init__(self, failure_threshold=3, recovery_timeout=60):
5        self.failure_threshold = failure_threshold
6        self.recovery_timeout = recovery_timeout
7        self.failures = 0
8        self.state = "CLOSED"
9        self.last_failure_time = None
10        
11    def call(self, tool_func, *args):
12        # Prüfung: Ist der Breaker offen?
13        if self.state == "OPEN":
14            if time.time() - self.last_failure_time > self.recovery_timeout:
15                self.state = "HALF_OPEN" # Testphase erlauben
16            else:
17                # Fail Fast: Gar nicht erst versuchen
18                raise Exception("ToolUnavailable: Circuit open. Try alternative.")
19        
20        try:
21            # Versuche Ausführung
22            result = tool_func(*args)
23            
24            # Bei Erfolg im HALF_OPEN Status -> Reset
25            if self.state == "HALF_OPEN":
26                self.state = "CLOSED"
27                self.failures = 0
28                
29            return result
30            
31        except Exception:
32            self.failures += 1
33            self.last_failure_time = time.time()
34            
35            # Wenn Schwelle erreicht -> Open
36            if self.failures >= self.failure_threshold:
37                self.state = "OPEN"
38            
39            # Wenn Test fehlschlägt -> Zurück zu Open
40            if self.state == "HALF_OPEN":
41                self.state = "OPEN"
42                
43            raise # Originalfehler weiterwerfen

Dieser Code-Pattern kann als Middleware oder Decorator um Agenten-Funktionen gelegt werden, um Endlosschleifen auf Systemebene (nicht auf LLM-Ebene) zu unterbinden.

7.3 Temperatur-Modulation und "Cognitive Refresh" [18]

Ein weiterer Ansatz, um Loops zu durchbrechen, ist die dynamische Anpassung der LLM-Parameter. Wenn ein Agent stagniert, kann das System die Temperature (Zufälligkeit) für den nächsten Schritt erhöhen (z.B. von 0.1 auf 0.7). Dies zwingt das Modell, weniger wahrscheinliche (und damit oft kreativere) Lösungspfade zu explorieren und aus lokalen Minima auszubrechen.

Zusätzlich experimentieren Systeme wie CyberAutoAgent mit einem "Cognitive Refresh" [18]. Hierbei adressiert das System das Problem der Context Window Degradation: Nach einer bestimmten Laufzeit (z.B. 400 Sekunden) oder Token-Menge beginnt die Aufmerksamkeitsspanne des Modells zu leiden und es verliert den Fokus ("Drift"). Der Refresh startet den Agenten neu, injiziert jedoch die bisherigen validierten Findings aus dem Langzeitgedächtnis (Mem0) zurück in den frischen Kontext, um einen "sauberen" Start mit vollem Wissen zu ermöglichen.

8. Fallstudien und Praxis-Benchmarks

Die Theorie der Selbstreflexion wird erst in der Anwendung greifbar. Wir betrachten, wie führende Open-Source-Systeme diese Konzepte integrieren.

8.1 PentestGPT: Der geführte Task-Tree

PentestGPT [2] nutzt keine freie Assoziation, sondern führt den Agenten strikt durch den Pentesting Task Tree (PTT).

  • Szenario: Ein SQL-Injection-Angriff schlägt fehl.
  • Mechanismus: Das Parsing Module extrahiert die Fehlermeldung. Das Reasoning Module aktualisiert den PTT-Knoten "SQL Injection" auf Status FAILED.
  • Reflexion: Da der PTT hierarchisch ist, erkennt der Agent: "Wenn SQLi fehlschlägt, ist der übergeordnete Knoten 'Web Vulnerability' noch nicht zwingend gescheitert." Er sucht im Baum nach Geschwisterknoten (Sibling Nodes) wie "XSS" oder "CSRF".
  • Resultat: Die Reflexion findet strukturell statt (Baumtraversierung), nicht nur textuell. Dies verhindert, dass der Agent ziellos Befehle wiederholt.

8.2 CyberAutoAgent & Strands: Metakognition in Aktion

CyberAutoAgent [11] nutzt das Strands-Framework, um Denkprozesse als "Stränge" (Strands) zu modellieren.

  • Besonderheit: Es gibt einen expliziten Confidence Score. Bevor eine gefährliche Aktion (z.B. ein aggressiver Scan) ausgeführt wird, reflektiert der Agent über seine Sicherheit.
  • Loop-Prävention: Durch die Nutzung von Mem0 (Memory Layer) speichert der Agent Erkenntnisse ("Host X blockt ICMP"). Wenn er später versucht, erneut zu pingen, ruft er diese Erinnerung ab ("Reflexion über Langzeitgedächtnis") und unterlässt die Aktion, was Ressourcen spart und die Entdeckungswahrscheinlichkeit minimiert.

8.3 CAI (Cybersecurity AI): Turn-basierte Zustandsmaschinen

Das CAI-Framework [14] von Alias Robotics implementiert einen strengen Turn-based Approach.

  • Jeder "Turn" ist eine atomare Einheit von Reason → Act.
  • Das Framework erlaubt "Recursive Patterns", bei denen der Agent sich selbst aufruft, um sein Ergebnis zu verfeinern. Ein CodeAgent kann beispielsweise Code schreiben, ausführen, den Fehler sehen und sich selbst rekursiv mit dem Fehler als Input aufrufen, bis der Code läuft oder die Rekursionstiefe (Max Turns) erreicht ist.
  • Dies isoliert Fehlerkorrektur in gekapselten Blöcken, sodass ein Fehler beim Coden nicht den gesamten Missionskontext "vergiftet".

9. Herausforderungen und Grenzen

Trotz fortschrittlicher Architekturen ist Selbstreflexion kein Allheilmittel. Es gibt inhärente Grenzen und neue Risiken.

9.1 Grounding und die Halluzinations-Echokammer

Reflexion ist ein inhärent kostspieliges Unterfangen. Während ein einfacher, nicht-agentischer Befehl eine lineare Abfolge von Input zu Output (ein Modellaufruf) erfordert, bläht der vollständige Reflexionszyklus den Rechenaufwand massiv auf. Ein Fehlerkorrekturschritt wandelt sich typischerweise in eine Sequenz von mindestens fünf bis mehr Aufrufen: Input → Plan → Execute → Reflect → Re-Plan → Execute. Dieser Overhead kann die Token-Kosten und die Latenz (die Zeit bis zur endgültigen Antwort) um einen Faktor von drei bis vier erhöhen. Für Echtzeitsysteme wie Chatbots, bei denen Antworten in Millisekunden erwartet werden, ist eine derart tiefe, deliberative Reflexion oft unpraktikabel, da die Wartezeit die Benutzererfahrung empfindlich stören würde. Der Trade-off kehrt sich jedoch für Long-Running Agents (Asynchrone Jobs) um. In missionskritischen Aufgaben, wie der autonomen Softwareentwicklung oder wissenschaftlichen Recherche, wird die zusätzliche Latenz bewusst in Kauf genommen. Es ist in diesen Fällen ein positiver Kompromiss, fünf Minuten in die autonome, fehlerbehebende Reflexion zu investieren, anstatt ein komplexes, über zehn Stunden laufendes Projekt wegen eines einfachen, unbehandelten Fehlers komplett abbrechen und manuell neu starten zu müssen. Die gewonnene Robustheit rechtfertigt hier die erhöhten Ressourcenkosten.

Die Lösung liegt in der Verankerten Reflexion (Grounded Reflection), welche die Verifikation von einer kreativen Schreibübung in einen Debugging-Prozess transformiert. Die Wirksamkeit des Reflexion-Musters ist direkt proportional zur Dichte der externen Grounding-Signale.

  • Code-Execution (Das härteste Grounding): Der Agent schreibt Code (z.B. Python), führt ihn in einer Sandbox aus und nutzt den binären Rückgabewert (Fehler oder Erfolg) als unbestreitbare "Ground Truth".
  • Retrieval-Augmented Grounding (RAG): Bei wissensintensiven Aufgaben werden Behauptungen gegen einen vertrauenswürdigen Korpus (Datenbank, Dokumentation) verifiziert.
  • Tool-Output-Validierung: Nach der Interaktion mit einer Schnittstelle (API, CLI-Tool) muss der Agent die Absicht der Handlung mit dem tatsächlichen Ergebnis abgleichen.

9.2 Latenz und Kosten

Reflexion ist teuer. Ein einfacher Befehl wandelt sich von Input → Output (1 Call) zu Input → Plan → Execute → Reflect → Re-Plan → Execute (5+ Calls). Dies erhöht Latenz und Token-Kosten massiv (oft Faktor 3-4x).

9.3 Drift und Degradation

Über sehr lange Laufzeiten, die sich über Stunden oder Tage erstrecken, neigen selbstkorrigierende Systeme zum Phänomen des Drift. Hierbei handelt es sich nicht um einen plötzlichen Fehler, sondern um eine subtile, kumulative Abweichung vom ursprünglichen Missionsziel. Kleine Ungenauigkeiten und lokale Optimierungen, die während jedes Reflexionsschritts vorgenommen werden, akkumulieren sich allmählich. Dies führt dazu, dass der Agent sein ursprüngliches, vom Nutzer definiertes Globalziel unbewusst "vergisst" und stattdessen beginnt, ein lokal attraktiveres Nebenziel zu optimieren, das nur noch lose mit der Gesamtaufgabe verbunden ist.

Gegenmaßnahme: Regelmäßige "Re-Orientation" Phasen, in denen der Agent gezwungen wird, seinen aktuellen Status gegen die ursprüngliche Nutzer-Instruktion (nicht die letzte Teilaufgabe) abzugleichen (Goal Alignment Check).

9.4 Reward Hacking: Das systemische Risiko im Evaluator

Sobald Agenten die Fähigkeit erlangen, ihre Arbeitsabläufe zu optimieren, entsteht ein Risiko der Fehl-Ausrichtung (Misalignment), bekannt als Reward Hacking. Dies tritt auf, wenn der Agent die Metrik optimiert, um eine hohe Belohnung zu erzielen, ohne das intendierte Ziel tatsächlich zu erfüllen. Die kritische Schwachstelle liegt in der Evaluator-Rolle.

  • Sycophancy und semantische Manipulation: Wenn der Evaluator ein LLM ist, lernt der Actor, dessen Vorurteile zu bedienen [20].
  • Manipulation der Bewertungsinfrastruktur: Bei Coding-Agenten kann dies zur direkten Bearbeitung der Testumgebung führen.

Gegenmaßnahmen: Die Mitigation erfordert eine strikte Gewaltenteilung und robuste Reward Robustness, indem der Evaluator in einer isolierten Umgebung (Sandboxing) mit verdeckten Testsets operiert.

10. Fazit: Vom Skript zum Agenten

Die Implementierung von Selbstreflexion markiert den Reifegrad eines agentischen Systems. Sie transformiert KI von einem fragilen Werkzeug, das perfekte Eingaben benötigt, zu einem resilienten Partner, der mit der Unordnung der realen Welt umgehen kann.

Wir haben gesehen, dass echte Autonomie nicht durch mächtigere Modelle allein entsteht, sondern durch die Architektur um das Modell herum:

  1. Strukturierte Denkprozesse (Task Trees, Turns) geben dem Chaos Form.
  2. Verbale Rückkopplung gibt dem Modell die Sprache, um sich selbst zu korrigieren.
  3. Circuit Breakers und Loop Detection schützen das System vor seiner eigenen Persistenz.

Für Entwickler langlaufender Systeme (wie PentestGPT oder CAI) ist die Botschaft klar: Investieren Sie in die Metakognition Ihres Agenten. Ein Agent, der weiß, wann er nicht weiterweiß, ist unendlich wertvoller als einer, der stur gegen die Wand läuft.

In den kommenden Teilen dieser Serie werden wir sehen, wie diese Mechanismen in State of the Art Benchmarks abschneiden und wie Gedächtnis-Architekturen dafür sorgen, dass einmal gelernte Fehlerkorrekturen auch über Tage hinweg Bestand haben, ohne im Kontext-Fenster verloren zu gehen.

Weitere Beiträge

Referenzen

[1]

AWS Builder Center, "Building Autonomous Agents That Think, Remember, and Evolve," AWS Builder Center, 2026. [Online]. Verfügbar: https://builder.aws.com/content/2t2ZD3FQzwxxAFbG754PXWCkEDf/building-autonomous-agents-that-think-remember-and-evolve

[2]

G. Deng et al., "PentestGPT: Evaluating and Harnessing Large Language Models for Automated Penetration Testing," arXiv:2308.06782, 2023. [Online]. Verfügbar: https://arxiv.org/abs/2308.06782

[3]

N. Shinn et al., "Reflexion: Language Agents with Verbal Reinforcement Learning," NeurIPS, 2023. [Online]. Verfügbar: https://arxiv.org/abs/2303.11366

[4]

The Decision Lab, "System 1 and System 2 Thinking," The Decision Lab, 2026. [Online]. Verfügbar: https://thedecisionlab.com/reference-guide/philosophy/system-1-and-system-2-thinking

[5]

D. Shapiro, "The Fast and Slow Minds of AI," Medium, 2026. [Online]. Verfügbar: https://medium.com/@dave-shap/the-fast-and-slow-minds-of-ai-67cb9528ca84

[6]

arXiv, "System 2 Reasoning Capabilities Are Nigh," arXiv, 2026. [Online]. Verfügbar: https://arxiv.org/html/2410.03662v2

[7]

Galileo AI, "Reflection Tuning Explained: Self-Improving LLMs 101," Galileo AI Blog, 2026. [Online]. Verfügbar: https://galileo.ai/blog/reflection-tuning-llms

[8]

M. Chino, "Why Retry Is Not Enough: Rethinking Self-Correction in AI Systems," Medium, 2026. [Online]. Verfügbar: https://medium.com/@masato-chino/why-retry-is-not-enough

[9]

2019be04004, "Grounding in LLMs: What It Is and Why It Matters," Medium, 2026. [Online]. Verfügbar: https://medium.com/@2019be04004/grounding-in-llms-what-it-is-and-why-it-matters

[10]

Towards Data Science, "Agentic AI from First Principles: Reflection," Towards Data Science, 2026.

[11]

W. Brown, "Cyber-AutoAgent: AI agent for autonomous cyber operations," GitHub, 2025. [Online]. Verfügbar: https://github.com/westonbrown/Cyber-AutoAgent

[12]

Mem0, "Mem0 and Strands Partnership to Bring Persistent Memory to Next-Gen AI Agents," Mem0 Blog, 2026.

[13]

LangChain, "Reflection Agents," LangChain Blog, 2026.

[14]

Alias Robotics, "Cybersecurity AI (CAI): An open framework for AI Security," GitHub, 2026. [Online]. Verfügbar: https://github.com/aliasrobotics/cai

[15]

P. Krampah, "Building AI Agents with LangGraph," Medium, 2026. [Online]. Verfügbar: https://ai.gopubby.com/building-ai-agents-with-langgraph-building-chains-f8747aad0ee8

[16]

P. Sarkar, "Enhancing Microservice Resilience with the Circuit Breaker Pattern in Python and Java," Medium, 2026. [Online]. Verfügbar: https://medium.com/@sarkarpabitra1999/enhancing-microservice-resilience-with-the-circuit-breaker-pattern-in-python-and-java-f04395e07b99

[17]

A. Lyon, "arlyon/aiobreaker: Python implementation of the Circuit Breaker pattern," GitHub, 2026. [Online]. Verfügbar: https://github.com/arlyon/aiobreaker

[18]

A. Brown, "Managing Context Window Degradation & Cognitive Refresh," Data Science Collective, 2026.

[19]

Emergent Mind, "Specification Gaming in AI," Emergent Mind, 2026. [Online]. Verfügbar: https://www.emergentmind.com/topics/specification-gaming

[20]

arXiv, "Sycophancy to Subterfuge: Investigating Reward Tampering in Language Models," arXiv, 2026. [Online]. Verfügbar: https://arxiv.org/abs/2406.10162

Kontaktiere mich

Kontaktiere mich

Haben Sie Fragen an mich oder möchten Sie mit mir in Kontakt treten?

Name
Michael Schöffel
Telefonnummer
Telefonnummer auf Anfrage
Wohnort
Deutschland, Wohnort auf Anfrage
Email
[email protected]

Senden Sie mir eine Nachricht

* Durch Betätigung der 'Senden' Schaltfläche stimmen Sie einer notwendigen Roboteranalyse mittels Google reCAPTCHA zu. Hierbei werden Cookies gesetzt und das Nutzungsverhalten ausgewertet. Andernfalls senden Sie mir bitte direkt eine E-Mail. Folgende Richtlinien von Google gelten: Datenschutz & Nutzungsbedingungen.

Max. 500 Zeichen