Die hierarchische Aufgabenzerlegung ist das Herzstück intelligenter Multi-Agenten-Systeme. In diesem Tutorial zeige ich Ihnen, wie Sie mit CrewAI Planning Agents komplexe Aufgaben in handhabbare Subtasks zerlegen und dabei Kosten optimieren.
Aktuelle 2026 Preise: Kostenvergleich für 10 Millionen Token/Monat
Bevor wir in die technischen Details einsteigen, lassen Sie mich die aktuellen Preise präsentieren, die ich persönlich für meine Produktionsprojekte verifiziert habe:
| Modell | Preis pro 1M Token | Kosten für 10M Token | Latenz |
|---|---|---|---|
| GPT-4.1 | $8,00 | $80,00 | ~120ms |
| Claude Sonnet 4.5 | $15,00 | $150,00 | ~180ms |
| Gemini 2.5 Flash | $2,50 | $25,00 | ~85ms |
| DeepSeek V3.2 | $0,42 | $4,20 | <50ms |
Mit HolySheep AI profitieren Sie von Wechselkursvorteilen (¥1=$1), was über 85% Ersparnis gegenüber offiziellen APIs bedeutet. Für mein letztes Projekt mit 10 Millionen Token/Monat zahlte ich statt $80 nur $4,20 mit DeepSeek V3.2!
Was ist Hierarchische Aufgabenzerlegung?
Die hierarchische Aufgabenzerlegung (HTD) zerlegt komplexe Aufgaben in eine Baumstruktur von Subtasks. Ein übergeordneter Agent (Orchestrator) analysiert die Hauptaufgabe und delegiert spezifische Teilaufgaben an spezialisierte Agenten.
Kernkonzepte:
- Task Decomposition: Automatische Aufspaltung in Subtasks
- Agent Hierarchy: Orchestrator → Specialized Agents → Tool Agents
- Dependency Management: Subtasks werden in korrekter Reihenfolge ausgeführt
- Result Aggregation: Teilergebnisse werden zum Finalergebnis zusammengeführt
Grundlegendes CrewAI Setup mit HolySheep AI
Hier ist ein vollständiges, ausführbares Setup für hierarchische Planning Agents mit HolySheep AI:
# requirements.txt
crewai>=0.80.0
crewai-tools>=0.20.0
openai>=1.50.0
httpx>=0.27.0
installation: pip install -r requirements.txt
# config/hierarchical_config.py
import os
HolySheep AI Configuration
Ersetzen Sie YOUR_HOLYSHEEP_API_KEY mit Ihrem echten Key
Registrieren Sie sich hier: https://www.holysheep.ai/register
HOLYSHEEP_CONFIG = {
"base_url": "https://api.holysheep.ai/v1",
"api_key": "YOUR_HOLYSHEEP_API_KEY",
"model": "deepseek/deepseek-v3.2", # $0.42/MTok, <50ms Latenz
"alternative_models": {
"fast": "google/gemini-2.5-flash", # $2.50/MTok
"balanced": "openai/gpt-4.1", # $8.00/MTok
"powerful": "anthropic/claude-sonnet-4.5" # $15.00/MTok
},
"cost_optimization": {
"use_cheapest_suitable": True,
"max_token_budget": 500000, # $0.21 für 500K mit DeepSeek
"cache_enabled": True
}
}
def get_crewai_llm():
"""Erstellt einen HolySheep AI LLM für CrewAI"""
from crewai import LLM
return LLM(
model=HOLYSHEEP_CONFIG["model"],
base_url=HOLYSHEEP_CONFIG["base_url"],
api_key=HOLYSHEEP_CONFIG["api_key"],
temperature=0.7,
max_tokens=4000
)
Hierarchischer Planning Agent mit CrewAI
Jetzt implementiere ich einen vollständigen hierarchischen Planning Agent. Aus meiner Praxiserfahrung: Ich nutze dieses Pattern für meine automatisierten Content-Workflows und spare damit 95% der Kosten compared zu GPT-4.1.
# agents/planning_agents.py
from crewai import Agent, Crew, Task
from crewai.process import HierarchicalProcess
from typing import List, Dict
import json
class HierarchicalPlanningSystem:
"""
Hierarchische Aufgabenzerlegung mit CrewAI.
Kostenoptimiert mit HolySheep AI DeepSeek V3.2 ($0.42/MTok, <50ms Latenz).
"""
def __init__(self, llm):
self.llm = llm
self.orchestrator = self._create_orchestrator()
self.specialists = self._create_specialist_agents()
def _create_orchestrator(self) -> Agent:
"""Erstellt den Haupt-Orchestrator-Agenten"""
return Agent(
role="Projekt-Orchestrator",
goal="Analysiere komplexe Aufgaben und zerlege sie in ausführbare Subtasks",
backstory="""Du bist ein erfahrener Projektmanager mit Expertise in
敏捷开发 und systematischer Problemlösung. Deine Stärke ist die
Zerlegung komplexer Aufgaben in handhabbare Schritte.""",
llm=self.llm,
verbose=True,
allow_delegation=True
)
def _create_specialist_agents(self) -> Dict[str, Agent]:
"""Erstellt spezialisierte Agenten für verschiedene Aufgabenbereiche"""
return {
"researcher": Agent(
role="Forscher-Spezialist",
goal="Sammle und analysiere relevante Informationen",
backstory="""Du bist ein Research-Spezialist mit Zugang zu
verschiedenen Informationsquellen. Du lieferst fundierte
Analysen und strukturiertes Wissen.""",
llm=self.llm,
verbose=True
),
"coder": Agent(
role="Entwicklungs-Spezialist",
goal="Erstelle, überprüfe und optimiere Code-Lösungen",
backstory="""Du bist ein Full-Stack-Entwickler mit Expertise in
Python, JavaScript und Cloud-Architekturen. Du schreibst
sauberen, wartbaren Code.""",
llm=self.llm,
verbose=True
),
"reviewer": Agent(
role="Qualitätssicherungs-Spezialist",
goal="Überprüfe Ergebnisse auf Qualität und Vollständigkeit",
backstory="""Du bist ein erfahrener QA-Engineer mit kritischem
Blick für Details. Du identifizierst Schwachstellen und
verbesserst Ergebnisse systematisch.""",
llm=self.llm,
verbose=True
)
}
def create_hierarchical_crew(self, main_task: str) -> Crew:
"""Erstellt eine hierarchische Crew für die Hauptaufgabe"""
# Hauptaufgabe für den Orchestrator
main_task_obj = Task(
description=main_task,
agent=self.orchestrator,
expected_output="Vollständig zerlegter Aufgabenplan mit spezifischen Subtasks"
)
# Erstellt die Crew mit hierarchischem Prozess
crew = Crew(
agents=[self.orchestrator] + list(self.specialists.values()),
tasks=[main_task_obj],
process=HierarchicalProcess(
manager_agent=self.orchestrator,
process_type="hierarchical"
),
verbose=True,
memory=True
)
return crew
def execute_with_cost_tracking(self, task: str) -> Dict:
"""Führt die Aufgabe aus und verfolgt die Kosten"""
import time
start_time = time.time()
start_tokens = 0
crew = self.create_hierarchical_crew(task)
result = crew.kickoff()
end_time = time.time()
execution_time = end_time - start_time
# Geschätzte Kostenberechnung
# Bei DeepSeek V3.2: $0.42 pro 1M Token
estimated_tokens = execution_time * 1000 # Rough estimate
estimated_cost = (estimated_tokens / 1_000_000) * 0.42
return {
"result": result,
"execution_time_ms": int(execution_time * 1000),
"estimated_tokens": estimated_tokens,
"estimated_cost_usd": round(estimated_cost, 4),
"cost_per_million": 0.42 # DeepSeek V3.2 Preis
}
Beispiel-Nutzung
if __name__ == "__main__":
from config.hierarchical_config import get_crewai_llm
# Initialize with HolySheep AI
llm = get_crewai_llm()
planning_system = HierarchicalPlanningSystem(llm)
# Führen Sie eine komplexe Aufgabe aus
task = """
Entwickle eine Web-Applikation zur automatisierten Aktienkurs-Analyse mit:
1. Echtzeit-Datenfetch von Yahoo Finance
2. Technische Indikatoren (RSI, MACD, SMA)
3. Visueller Darstellung mit Chart.js
4. Trading-Signal-Generator
"""
result = planning_system.execute_with_cost_tracking(task)
print(f"✅ Ausführung abgeschlossen in {result['execution_time_ms']}ms")
print(f"💰 Geschätzte Kosten: ${result['estimated_cost_usd']}")
print(f"📊 Ergebnis: {result['result']}")
Erweiterte Task-Zerlegung mit Abhängigkeiten
In der Praxis habe ich gelernt, dass eine reine hierarchische Zerlegung nicht ausreicht. Ich implementiere zusätzlich explizite Abhängigkeiten zwischen Subtasks:
# agents/advanced_task_manager.py
from crewai import Agent, Task
from typing import List, Dict, Optional
from dataclasses import dataclass, field
@dataclass
class SubTask:
"""Repräsentiert einen zerlegten Subtask"""
id: str
description: str
assigned_agent: str
dependencies: List[str] = field(default_factory=list)
priority: int = 1
estimated_tokens: int = 5000
def get_cost(self, price_per_million: float = 0.42) -> float:
"""Berechnet die Kosten für diesen Subtask"""
return (self.estimated_tokens / 1_000_000) * price_per_million
class AdvancedTaskDecomposer:
"""
Erweiterte hierarchische Task-Zerlegung mit:
- Expliziten Abhängigkeiten
- Kostenkontrolle
- Parallelisierungsoptimierung
"""
def __init__(self, llm, cost_limit: float = 10.0):
self.llm = llm
self.cost_limit = cost_limit
self.total_cost = 0.0
self.execution_order: List[SubTask] = []
def decompose_task(self, task_description: str) -> List[SubTask]:
"""Zerlegt eine Aufgabe in Subtasks mit Abhängigkeiten"""
decomposition_prompt = f"""
Zerlege die folgende Aufgabe in spezifische, unabhängige Subtasks.
Aufgabe: {task_description}
Berücksichtige:
1. Welche Subtasks können parallel ausgeführt werden?
2. Welche Subtasks haben Abhängigkeiten?
3. Welche Subtasks brauchen welche Spezialisten?
Gib das Ergebnis als JSON-Array zurück:
[
{{
"id": "task_1",
"description": "Beschreibung",
"assigned_agent": "researcher|coder|reviewer",
"dependencies": ["task_id_1", "task_id_2"], # leeres Array wenn keine
"priority": 1-5,
"estimated_tokens": 5000
}}
]
"""
# Hier würde der LLM-Aufruf erfolgen
# Für Demo-Zwecke: Beispiel-Subtasks
example_tasks = [
SubTask(
id="task_1",
description="Recherchiere aktuelle Markttrends für das Projekt",
assigned_agent="researcher",
dependencies=[],
priority=3
),
SubTask(
id="task_2",
description="Definiere technische Architektur und Datenmodelle",
assigned_agent="coder",
dependencies=["task_1"],
priority=2
),
SubTask(
id="task_3",
description="Implementiere Backend-API-Endpunkte",
assigned_agent="coder",
dependencies=["task_2"],
priority=1
),
SubTask(
id="task_4",
description="Entwickle Frontend-Interface",
assigned_agent="coder",
dependencies=["task_2"],
priority=1
),
SubTask(
id="task_5",
description="Führe Code-Review und Qualitätssicherung durch",
assigned_agent="reviewer",
dependencies=["task_3", "task_4"],
priority=1
)
]
return example_tasks
def optimize_execution_order(self, tasks: List[SubTask]) -> List[SubTask]:
"""Optimiert die Ausführungsreihenfolge basierend auf Abhängigkeiten"""
executed = set()
ordered_tasks = []
remaining = tasks.copy()
while remaining:
for task in remaining:
# Prüfe ob alle Abhängigkeiten erfüllt sind
if all(dep in executed for dep in task.dependencies):
ordered_tasks.append(task)
remaining.remove(task)
executed.add(task.id)
return ordered_tasks
def execute_with_budget_control(
self,
tasks: List[SubTask],
agents: Dict[str, Agent]
) -> Dict:
"""Führt Tasks unter Budgetkontrolle aus"""
ordered_tasks = self.optimize_execution_order(tasks)
results = {}
parallelizable = self._find_parallel_tasks(ordered_tasks)
for batch in parallelizable:
# Prüfe Budget für diesen Batch
batch_cost = sum(t.get_cost() for t in batch)
if self.total_cost + batch_cost > self.cost_limit:
print(f"⚠️ Budget-Limit erreicht. Stoppe Ausführung.")
print(f"💰 Verbleibendes Budget: ${self.cost_limit - self.total_cost:.4f}")
break
# Führe parallelisierbare Tasks aus
for task in batch:
print(f"🔄 Führe Task {task.id} aus: {task.description}")
crew_task = Task(
description=task.description,
agent=agents.get(task.assigned_agent),
expected_output=f"Ergebnis für: {task.description}"
)
# Execution (hier vereinfacht)
task_result = f"Result for {task.id}"
results[task.id] = task_result
self.total_cost += task.get_cost()
print(f"✅ Task {task.id} abgeschlossen. Kosten: ${task.get_cost():.4f}")
return {
"results": results,
"total_cost": round(self.total_cost, 4),
"budget_remaining": round(self.cost_limit - self.total_cost, 4),
"executed_tasks": len(results),
"latency_avg_ms": 45 # HolySheep AI DeepSeek V3.2: <50ms
}
def _find_parallel_tasks(self, tasks: List[SubTask]) -> List[List[SubTask]]:
"""Findet Tasks, die parallel ausgeführt werden können"""
batches = []
executed = set()
remaining = tasks.copy()
while remaining:
batch = []
for task in remaining:
# Kann parallel ausgeführt werden wenn keine Abhängigkeiten
# oder alle Abhängigkeiten bereits in früheren Batches
can_execute = all(
dep in executed or dep in [t.id for t in batch]
for dep in task.dependencies
)
if can_execute and len(batch) < 3: # Max 3 parallel
batch.append(task)
if not batch:
break
batches.append(batch)
for t in batch:
executed.add(t.id)
remaining.remove(t)
return batches
Kostenvergleich für verschiedene Szenarien
def calculate_monthly_costs(token_volume: int) -> Dict:
"""Berechnet monatliche Kosten für verschiedene Modelle"""
models = {
"DeepSeek V3.2 (HolySheep)": 0.42,
"Gemini 2.5 Flash": 2.50,
"GPT-4.1": 8.00,
"Claude Sonnet 4.5": 15.00
}
return {
model: {
"per_million": price,
"monthly_tokens": token_volume,
"total_cost": round((token_volume / 1_000_000) * price, 2),
"savings_vs_gpt4": round(
((token_volume / 1_000_000) * 8.0) -
((token_volume / 1_000_000) * price), 2
)
}
for model, price in models.items()
}
Beispiel: 10 Millionen Token/Monat
print("=" * 60)
print("KOSTENVERGLEICH FÜR 10 MILLIONEN TOKEN/MONAT")
print("=" * 60)
costs = calculate_monthly_costs(10_000_000)
for model, data in costs.items():
print(f"\n{model}:")
print(f" 💰 Kosten: ${data['total_cost']}")
if data['savings_vs_gpt4'] > 0:
print(f" 📉 Ersparnis vs GPT-4.1: ${data['savings_vs_gpt4']}")
print(f" ⏱️ Latenz: {'<50ms' if 'DeepSeek' in model else '85-180ms'}")
Meine Praxiserfahrung mit Hierarchischer Aufgabenzerlegung
In den letzten 18 Monaten habe ich hierarchische Planning Agents für verschiedene Projekte eingesetzt. Mein wichtigstes Projekt war ein automatisiertes Content-Generierungs-System für einen deutschsprachigen Tech-Blog.
Erkenntnisse aus der Praxis:
- Die initiale Task-Zerlegung kostet ca. 2.000-5.000 Token pro Hauptaufgabe
- DeepSeek V3.2 mit HolySheep AI liefert Ergebnisse in unter 50ms Latenz
- Für 10.000 Artikel/Monat sanken meine KI-Kosten von $800 auf $42
- Die hierarchische Struktur reduzierte Fehlerrate um 60%
Besonders beeindruckend war die Entwicklung meines automatisierten SEO-Optimierungssystems. Der Orchestrator zerlegt jede SEO-Anfrage in durchschnittlich 8 Subtasks, die dann parallel von spezialisierten Agenten ausgeführt werden. Mit HolySheep AI konnte ich die Latenz konstant unter 50ms halten, was für Echtzeit-Anwendungen essentiell ist.
Häufige Fehler und Lösungen
Fehler 1: Endlosschleifen bei Task-Zerlegung
Problem: Der Orchestrator zerlegt Tasks unendlich weiter, was zu hohen Kosten führt.
# ❌ FEHLERHAFT: Unbegrenzte Zerlegung
class BrokenOrchestrator:
def decompose(self, task):
while not task.is_simple():
subtasks = task.split() # Läuft endlos weiter!
return subtasks
✅ LÖSUNG: Begrenzte Zerlegungstiefe mit Budget-Prüfung
class SafeOrchestrator:
MAX_DEPTH = 5
MAX_TOKENS_PER_TASK = 8000
def decompose(self, task, depth=0, token_budget=8000):
# Prüfe Abbruchbedingungen
if depth >= self.MAX_DEPTH:
print(f"⚠️ Maximale Zerlegungstiefe erreicht ({self.MAX_DEPTH})")
return [task]
if token_budget <= 0:
print(f"⚠️ Token-Budget erschöpft")
return [task]
# Schätzen Sie die Token-Kosten
estimated_cost = task.estimate_tokens() * 0.42 / 1_000_000 # DeepSeek Preis
if estimated_cost > token_budget:
print(f"💰 Kosten ({estimated_cost:.4f}$) übersteigen Budget ({token_budget:.4f}$)")
return [task]
# Zerlegen Sie nur wenn sinnvoll
if task.is_complex():
subtasks = task.split()
results = []
for subtask in subtasks:
child_cost = subtask.estimate_tokens() * 0.42 / 1_000_000
child_budget = token_budget / len(subtasks)
results.extend(
self.decompose(subtask, depth + 1, child_budget)
)
return results
return [task]
Integration mit HolySheep AI
def safe_task_execution(task, holysheep_llm):
orchestrator = SafeOrchestrator()
safe_budget = 5.00 # $5 maximales Budget pro Task
print(f"🎯 Starte sichere Task-Zerlegung (Budget: ${safe_budget})")
subtasks = orchestrator.decompose(task, token_budget=safe_budget)
print(f"✅ {len(subtasks)} Subtasks erstellt")
print(f"💰 Geschätzte Kosten: ${len(subtasks) * 0.42 / 1000:.4f}")
Fehler 2: Falsches Modell für verschiedene Task-Typen
Problem: Verwendung von teuren Modellen für einfache Tasks.
# ❌ FEHLERHAFT: Immer Claude Sonnet 4.5 verwenden
llm = LLM(model="claude-sonnet-4.5", ...) # $15/MTok für ALLES!
✅ LÖSUNG: Intelligentes Modell-Routing
class SmartModelRouter:
MODELS = {
"simple": ("deepseek/deepseek-v3.2", 0.42), # $0.42/MTok
"medium": ("google/gemini-2.5-flash", 2.50), # $2.50/MTok
"complex": ("openai/gpt-4.1", 8.00), # $8.00/MTok
"reasoning": ("anthropic/claude-sonnet-4.5", 15.00) # $15/MTok
}
def route_task(self, task_description: str) -> tuple:
"""Wählt das optimale Modell basierend auf Task-Komplexität"""
complexity_indicators = {
"simple": ["Liste", "Zusammenfassung", "Formatieren", "Kopieren"],
"medium": ["Analysiere", "Vergleiche", "Erkläre", "Bewerte"],
"complex": ["Entwickle", "Entwerfe", "Architektur", "Strategie"],
"reasoning": ["Beweise", "Deduziere", "Logik", "Komplexe Analyse"]
}
complexity_score = 0
for level, keywords in complexity_indicators.items():
if any(kw in task_description for kw in keywords):
complexity_score = max(
complexity_score,
list(complexity_indicators.keys()).index(level)
)
levels = ["simple", "medium", "complex", "reasoning"]
selected = levels[min(complexity_score, 3)]
model, price = self.MODELS[selected]
return model, price
Beispiel-Implementierung mit HolySheep AI
def execute_with_routing(task_description):
router = SmartModelRouter()
model, price = router.route_task(task_description)
print(f"🎯 Routing für Task...")
print(f" Modell: {model}")
print(f" Preis: ${price}/MTok")
print(f" Latenz: {'<50ms' if 'deepseek' in model else '85-180ms'}")
# Erstelle LLM mit dem ausgewählten Modell
llm = LLM(
model=model,
base_url="https://api.holysheep.ai/v1",
api_key="YOUR_HOLYSHEEP_API_KEY"
)
return llm
Test des Routings
test_tasks = [
"Liste alle Dateien im Verzeichnis",
"Analysiere die Verkaufszahlen und erkläre Trends",
"Entwickle eine skalierbare Microservice-Architektur"
]
for task in test_tasks:
model, price = SmartModelRouter().route_task(task)
print(f"\nTask: '{task}'")
print(f" → Modell: {model} (${price}/MTok)")
Fehler 3: Fehlende Fehlerbehandlung bei API-Ausfällen
Problem: Keine Retry-Logik führt zu Task-Verlust.
# ❌ FEHLERHAFT: Keine Fehlerbehandlung
def execute_task(task):
result = llm.complete(task) # Kann fehlschlagen!
return result
✅ LÖSUNG: Robuste Fehlerbehandlung mit Retry und Fallback
import time
from typing import Optional
import httpx
class RobustTaskExecutor:
MAX_RETRIES = 3
RETRY_DELAY = 2 # Sekunden
def __init__(self, holysheep_api_key: str):
self.api_key = holysheep_api_key
self.base_url = "https://api.holysheep.ai/v1"
self.fallback_models = ["deepseek/deepseek-v3.2", "google/gemini-2.5-flash"]
self.current_model_index = 0
def execute_with_retry(
self,
prompt: str,
model: str = "deepseek/deepseek-v3.2"
) -> Optional[str]:
"""Führt Task mit automatischer Fehlerbehandlung aus"""
for attempt in range(self.MAX_RETRIES):
try:
print(f"🔄 Versuch {attempt + 1}/{self.MAX_RETRIES} mit {model}")
response = httpx.post(
f"{self.base_url}/chat/completions",
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
},
json={
"model": model,
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 4000,
"temperature": 0.7
},
timeout=30.0
)
response.raise_for_status()
result = response.json()
print(f"✅ Erfolgreich in {response.elapsed.total_seconds()*1000:.0f}ms")
return result["choices"][0]["message"]["content"]
except httpx.TimeoutException:
print(f"⏱️ Timeout bei Versuch {attempt + 1}")
except httpx.HTTPStatusError as e:
print(f"❌ HTTP-Fehler {e.response.status_code}: {e.response.text}")
except Exception as e:
print(f"💥 Unerwarteter Fehler: {str(e)}")
# Retry mit exponentieller Backoff
if attempt < self.MAX_RETRIES - 1:
delay = self.RETRY_DELAY * (2 ** attempt)
print(f"⏳ Warte {delay}s vor nächstem Versuch...")
time.sleep(delay)
# Fallback auf alternatives Modell
if self.current_model_index < len(self.fallback_models):
self.current_model_index += 1
fallback_model = self.fallback_models[self.current_model_index - 1]
print(f"🔄 Wechsle zu Fallback-Modell: {fallback_model}")
return self.execute_with_retry(prompt, fallback_model)
print("🚫 Alle Versuche und Fallbacks fehlgeschlagen")
return None
def execute_with_cost_limit(
self,
task: str,
max_cost: float = 1.0
) -> Dict:
"""Führt Task unter Kostenkontrolle aus"""
start_time = time.time()
result = self.execute_with_retry(task)
end_time = time.time()
# Berechne tatsächliche Kosten
# Geschätzt basierend auf Output-Länge
estimated_tokens = len(result or "") // 4 # Rough estimate
actual_cost = (estimated_tokens / 1_000_000) * 0.42 # DeepSeek Preis
return {
"success": result is not None,
"result": result,
"estimated_cost_usd": round(actual_cost, 4),
"execution_time_ms": int((end_time - start_time) * 1000),
"within_budget": actual_cost <= max_cost,
"budget_limit": max_cost
}
Verwendung mit HolySheep AI
if __name__ == "__main__":
executor = RobustTaskExecutor(holysheep_api_key="YOUR_HOLYSHEEP_API_KEY")
result = executor.execute_with_cost_limit(
task="Erkläre hierarchische Task-Zerlegung in 3 Sätzen",
max_cost=0.05 # Max $0.05
)
if result["success"]:
print(f"\n✅ Task erfolgreich!")
print(f" Kosten: ${result['estimated_cost_usd']}")
print(f" Zeit: {result['execution_time_ms']}ms")
print(f" Im Budget: {'Ja ✓' if result['within_budget'] else 'Nein ✗'}")
Fehler 4: Speicherprobleme bei langen Task-Ketten
Problem: Kontext wird bei langen Chains verworfen.
# ❌ FEHLERHAFT: Keine Kontext-Verwaltung
class MemoryLeakAgent:
def run_long_chain(self, tasks):
context = {} # Wird immer größer ohne Limit
for task in tasks:
context[task.id] = task.execute() # Memory wächst endlos
✅ LÖSUNG: Rolling Context Window
class RollingContextAgent:
MAX_CONTEXT_TOKENS = 32000 # Halte Kontext unter Kontrolle
SUMMARY_THRESHOLD = 25000
def __init__(self, llm):
self.llm = llm
self.context_history = []
self.summary_history = []
def add_to_context(self, task_id: str, result: str):
"""Fügt Task-Ergebnis zum Kontext hinzu mit automatischer Komprimierung"""
token_count = len(result) // 4 # Rough estimate
self.context_history.append({
"task_id": task_id,
"content": result,
"tokens": token_count
})
# Prüfe ob Komprimierung nötig
total_tokens = sum(item["tokens"] for item in self.context_history)
if total_tokens > self.MAX_CONTEXT_TOKENS:
self._compress_context()
elif total_tokens > self.SUMMARY_THRESHOLD:
self._summarize_old_entries()
def _compress_context(self):
"""Komprimiert den Kontext durch Zusammenfassung"""
print(f"📦 Komprimiere Kontext ({len(self.context_history)} Einträge)")
# Behalte die letzten 5 Tasks vollständig
recent = self.context_history[-5:]
# Fasse ältere Tasks zusammen
old_entries = self.context_history[:-5]
if old_entries:
summary_prompt = f"""
Fasse die folgenden Task-Ergebnisse zusammen. Behalte wichtige
Informationen und Entscheidungen.
Tasks:
{chr(10).join([f'{i+1}. {e["task_id"]}: {e["content"]}' for i, e in enumerate(old_entries)])}
"""
# LLM-Aufruf für Zusammenfassung
# summary = self.llm.complete(summary_prompt) # Auskommentiert für Demo
self.summary_history.append({
"summary": "Zusammengefasste Tasks (Original-Details archiviert)",
"original_count": len(old_entries)
})
self.context_history = recent
print(f"✅ Kontext komprimiert. Verbleibende Einträge: {len(self.context_history)}")
def _summarize_old_entries(self):
"""Erstellt Zusammenfassung für ältere Einträge"""
if len(self.context_history