Wie lässt sich eine 'Self-Correction'-Schleife technisch implementieren, bei der ein LLM seinen eigenen Code-Output mittels eines Compilers/Interpreters validiert und iterativ korrigiert?

Die technische Implementierung einer Self-Correction-Schleife basiert auf einem geschlossenen Feedback-Loop zwischen dem LLM und einer isolierten Laufzeitumgebung. Wir strukturieren diesen Prozess in vier definierte Phasen:

  1. Code-Extraktion: Das LLM liefert den Code in einem Markdown-Block. Wir nutzen Regular Expressions, um den reinen Quelltext vom erklärenden Text zu isolieren.
  2. Sandboxed Execution: Der Code wird in einem isolierten Container, beispielsweise via Docker oder gVisor, ausgeführt. Dies verhindert Sicherheitsrisiken durch beliebig ausführbaren Code auf dem Host-System.
  3. Error Capture: Der Compiler oder Interpreter gibt entweder einen Exit-Code 0 (Erfolg) oder eine detaillierte Fehlermeldung über den Standard Error Stream (stderr) zurück.
  4. Prompt-Augmentation: Bei Fehlern wird die Fehlermeldung zusammen mit dem fehlerhaften Code und dem ursprünglichen Prompt an das LLM zurückgegeben. Der Prompt wird dabei so angepasst, dass das Modell explizit auf die Fehlerquelle hingewiesen wird.

Die folgende Tabelle beschreibt die technischen Komponenten der Pipeline:

KomponenteFunktionTechnologie-Beispiel
OrchestratorSteuert den Loop und die IterationsgrenzePython / LangGraph
SandboxIsolierte AusführungsumgebungDocker / WebAssembly
ValidatorPrüft Syntax und Logik (Unit Tests)Pytest / JUnit
Feedback-LoopFormatiert Fehlermeldungen für das LLMPrompt Templates

Um die Stabilität zu erhöhen, implementieren wir eine maximale Iterationsanzahl (z. B. 3-5 Durchläufe), um Endlosschleifen bei unlösbaren Problemen zu vermeiden. Die Integration solcher automatisierten Workflows ist ein Kernbestandteil moderner Data Engineering Pipelines, da sie die manuelle Fehlerbehebung reduziert und die Code-Qualität automatisiert steigert.

Die Effektivität der Schleife hängt maßgeblich von der Präzision der Fehlermeldungen ab. Wir empfehlen, nicht nur den Compiler-Fehler, sondern auch spezifische Unit-Test-Ergebnisse in den Feedback-Prompt zu integrieren. Ein reiner Syntax-Check reicht nicht aus, um logische Fehler zu korrigieren. Die Implementierung sollte daher auf einer Kombination aus statischer Analyse und dynamischen Tests basieren, um eine funktionale Validierung zu gewährleisten.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt