FlowAgent System Dokumentation¶
1. System-Architektur Übersicht¶
FlowAgent ist ein autonomes Agentensystem, das auf einer modularen V3-Architektur basiert. Der Fokus liegt auf Token-Effizienz, Sicherheit durch Isolation (Sub-Agents) und gelerntem Verhalten (Skills).
graph TD
User[User Query] --> Engine[Execution Engine V3]
Engine --> Skills[Skills Manager]
Engine --> Tools[Tool Manager]
Engine --> VFS[VFS V2]
Engine -- Spawns --> SubAgent[Sub-Agent Manager]
SubAgent -- Restricted Write --> VFS
Skills -- Matches --> Context[Execution Context]
Tools -- Dynamic Loading --> Context
Context --> LLM[LLM Interface]
2. Execution Engine V3¶
Die ExecutionEngine (execution_engine.py) orchestriert den Denkprozess des Agenten. Sie löst das Problem des "Context Overflow" und der "Looping Agents".
Kern-Features¶
-
Dynamic Tool Loading (Slots)
- Der Agent hat ein Limit von (standardmäßig) 5 aktiven Tool-Slots.
- Tools werden basierend auf Relevanz-Scores (Keyword-Overlap zwischen Query und Tool-Beschreibung) geladen.
- Wenn das Limit erreicht ist, wird das Tool mit der niedrigsten Relevanz automatisch entladen.
- Validiert in
TestExecutionContext.test_add_remove_tool.
-
History Separation & Compression
- Working History: Temporärer Verlauf für den aktuellen Thought-Loop.
- Permanent History: Langzeitgedächtnis.
- Compression Triggers:
final_answer: Komprimiert den gesamtenworking_historyin eine Zusammenfassung und speichert sie permanent.load_tools(bei Kategorie-Wechsel): Führt eine partielle Kompression durch, um Token zu sparen, wenn der Agent das Thema wechselt.
- Validiert in
TestHistoryCompressor.
-
Auto Focus Tracker
- Verhindert, dass kleine Modelle vergessen, was sie gerade getan haben.
- Injiziert eine kurze Liste der letzten 5 Aktionen (z.B. "✏️ Wrote /app.py (45 lines)") direkt vor die User-Query im Prompt.
- Validiert in
TestAutoFocusTracker.
-
Loop Detector
- Erkennt zwei Muster:
- Exact Repeat: 3x das gleiche Tool mit exakt gleichen Argumenten.
- Ping-Pong: Alternierende Calls (A -> B -> A -> B).
- Intervention: Injiziert eine System-Warnung, die den Agenten auffordert, den Ansatz zu ändern oder ehrlich aufzugeben.
- Validiert in
TestLoopDetector.
- Erkennt zwei Muster:
3. Skills System¶
Der SkillsManager (skills.py) ersetzt starre Regelwerke durch dynamisch gelernte oder vordefinierte Verhaltensmuster.
Funktionsweise¶
- Hybrid Matching: Sucht Skills zuerst per Keyword (schnell), dann per Embedding (falls Memory verfügbar).
- Instruction Injection: Wenn ein Skill passt (z.B. "Daten speichern"), wird eine spezifische Anleitung in den System-Prompt injiziert (z.B. "Nutze
vfs_writeund bestätige den Pfad"). - Auto-Learning: Nach erfolgreichen Runs analysiert der Agent seinen eigenen Erfolg und erstellt bei Bedarf einen neuen Skill (startet mit niedriger Confidence).
Wichtige Predefined Skills¶
Das System kommt mit 12 vordefinierten Skills (_init_predefined_skills):
* parallel_subtasks: Anleitung zur Nutzung von Sub-Agents.
* vfs_knowledge_base: Strukturierte Ablage von Wissen in /info/.
* error_recovery: Strategien bei Fehlern.
* user_preference_save: Merken von Nutzerdaten.
4. Sub-Agent System¶
Das SubAgentSystem (sub_agent.py) ermöglicht echte Parallelisierung und Aufgaben-Isolation.
Architektur & Einschränkungen¶
- Max Depth = 1: Ein Sub-Agent kann keine weiteren Sub-Agents starten (verhindert Rekursions-Explosionen).
- Write Isolation: Ein Sub-Agent darf NUR in sein zugewiesenes Verzeichnis schreiben (
/sub/<task_id>/). Schreibversuche woanders werden vomRestrictedVFSWrapperblockiert. - Global Read: Sub-Agents können das gesamte VFS lesen (Kontext-Zugriff).
- Keine Rückfragen: Sub-Agents sind "Fire-and-Forget". Sie können den User nicht um Klärung bitten.
Workflow¶
- Main Agent ruft
spawn_sub_agent(task="...", output_dir="res_a", wait=False)auf. - Engine startet einen isolierten Prozess mit eigenem
ExecutionEngineKontext. - Main Agent macht weiter (z.B. startet zweiten Sub-Agent).
- Main Agent ruft
wait_for(["sub_id_1", "sub_id_2"]). - Ergebnisse werden aus den
result.mdDateien der Sub-Agents zusammengeführt.
Validiert in TestSubAgentManager und TestRestrictedVFSWrapper.
5. Virtual File System V2¶
Das VFS (vfs_v2.py) wurde massiv erweitert, um wie ein echtes Dateisystem zu agieren.
Neue Features¶
- Hierarchien: Echte Verzeichnisse (
mkdir,rmdir,mvfunktionieren rekursiv). - Shadow Mounts: Lokale Ordner können ins VFS "gemountet" werden. Änderungen werden synchronisiert (
FileBackingType.SHADOW). - LSP Integration: Dateien haben Typen (
FileTypeInfo). Wennenable_lsp=True, werden Syntax-Fehler und Warnungen (viaLSPManager) direkt im VFS-Objekt gespeichert. - System Context: Dateien wie
/system_contextund/active_rulessind read-only und enthalten dynamische Agenten-Metadaten.
6. Verfügbare Tools¶
Der Agent unterscheidet zwischen statischen (immer verfügbar) und dynamischen (müssen geladen werden) Tools.
Statische Tools (Core)¶
| Tool | Beschreibung |
|---|---|
think |
Reasoning-Schritt. Wird im AutoFocus getrackt. |
final_answer |
Abschluss der Aufgabe. Triggert History Compression. |
list_tools |
Zeigt verfügbare dynamische Tools (nach Kategorie). |
load_tools |
Lädt dynamische Tools in die Slots. |
vfs_read/write/... |
Voller VFS-Zugriff (Read, Write, List, Mkdir, Mv). |
spawn_sub_agent |
(Nur Main Agent) Startet parallele Tasks. |
wait_for |
(Nur Main Agent) Wartet auf Sub-Agents. |
Dynamische Tools¶
Diese werden über den ToolManager registriert (lokal, MCP oder A2A) und müssen vom Agenten bei Bedarf geladen werden.
* Beispiel: discord_send, github_pull, web_search.
7. Python API Beispiele¶
Initialisierung des Builders¶
from toolboxv2.mods.isaa.base.Agent.builder import FlowAgentBuilder
agent = await (FlowAgentBuilder()
.with_name("DevBot")
.with_models("claude-3-haiku", "gpt-4o")
.with_developer_persona() # Lädt Persona-Regeln in RuleSet
.with_checkpointing(enabled=True)
.with_vfs_window_lines(300)
.build())
Manuelle Ausführung (Low-Level)¶
from toolboxv2.mods.isaa.base.Agent.execution_engine import ExecutionEngine
engine = ExecutionEngine(agent)
# Startet eine Session und führt Query aus
result = await engine.execute(
query="Analysiere die Logs in /logs und erstelle einen Report",
session_id="session_dev_1",
max_iterations=20
)
Streaming Response¶
# Für UI/Voice Integration
stream_gen, ctx = await engine.execute_stream(
query="Erstelle eine Python Datei",
session_id="stream_sess"
)
async for chunk in stream_gen(ctx):
if chunk["type"] == "content":
print(chunk["chunk"], end="")
elif chunk["type"] == "tool_start":
print(f"\n[Tool: {chunk['name']}]")
8. Checkpoints & State¶
Das System nutzt den CheckpointManager für volle Persistenz:
* VFS State: Alle Dateien (Memory & Shadow Mount Configs).
* Skills: Gelernte Skills und Confidence-Scores.
* Session State: Chat History und aktive Tool-Einschränkungen.
Validiert in TestCheckpointManager.