Multi-Agent-Chaos: Wenn zu viele Agenten konkurrieren

Multi-Agent-Chaos entsteht, wenn zu viele Agenten ohne klare Rollen, Limits oder Koordination zusammenarbeiten. Warum Systeme dadurch instabil werden.
Auf dieser Seite
  1. Das Problem
  2. Warum das passiert
  3. Welche AusfÀlle am hÀufigsten auftreten
  4. RollenĂŒberlappung (Role overlap)
  5. Delegationsschleife (Delegation loop)
  6. Duplizierte Arbeit zwischen Agenten (Cross-agent duplicate work)
  7. Unbegrenzter Fan-out (Unbounded fan-out)
  8. Wie man diese Probleme erkennt
  9. Wie man Multi-Agent-Chaos von nĂŒtzlicher Spezialisierung unterscheidet
  10. Wie man solche AusfÀlle stoppt
  11. Wo das in der Architektur umgesetzt wird
  12. Checkliste
  13. FAQ
  14. Verwandte Seiten

Das Problem

Die Anfrage wirkt normal: einen Kundenfall prĂŒfen und eine kurze Antwort vorbereiten.

In Traces sieht man etwas anderes: Der Orchestrator startete 5 Agenten, drei davon bearbeiteten fast dieselbe Subtask, die Zahl der handoffs zwischen Agenten stieg auf 14 in einem Run, und die finale Antwort wurde bis zum timeout nicht gebildet.

Das System stĂŒrzt nicht sofort ab.

Es beginnt zu rauschen: Duplikate, handoffs, queue und latency wachsen.

Analogie: Stell dir eine Restaurant-Schicht vor, in der die Kellner die Tische nicht aufgeteilt haben. Drei Personen nehmen dieselbe Bestellung auf, wĂ€hrend andere Tische warten. Es gibt mehr AktivitĂ€t, aber ein schlechteres Ergebnis. Multi-Agent-Chaos in AI-Systemen funktioniert genauso: mehr Aktionen, aber weniger nĂŒtzlicher Fortschritt.

Warum das passiert

Multi-Agent-Chaos entsteht nicht durch die reine Anzahl an Agenten, sondern durch fehlende strikte Koordination zwischen ihnen.

In production ist es typischerweise so:

  1. Rollen der Agenten ĂŒberlappen, und eine Subtask hat mehrere Owner;
  2. Delegation lĂ€uft ohne klare Grenzen fĂŒr Tiefe und Anzahl der Übergaben;
  3. es gibt keine einheitliche Regel fĂŒr arbitration, wer final entscheidet;
  4. duplizierte tool_call von verschiedenen Agenten vervielfachen Last;
  5. ohne stop reasons und budget gates konvergiert der Run zu lange nicht.

Das Problem liegt nicht im Multi-Agent-Ansatz selbst.

Mehrere Agenten handeln ohne gemeinsamen Kontrollkreis.

Welche AusfÀlle am hÀufigsten auftreten

In production sieht man am hÀufigsten vier Muster von Multi-Agent-Chaos.

RollenĂŒberlappung (Role overlap)

Zwei oder mehr Agenten ĂŒbernehmen dieselbe Subtask und liefern unterschiedliche Zwischenresultate.

Typische Ursache: keine role map und kein expliziter Owner der Subtask.

Delegationsschleife (Delegation loop)

Agent A delegiert an B, B delegiert an C, C delegiert zurĂŒck an A. Von außen wirkt der Run "aktiv", aber es gibt keinen Fortschritt.

Typische Ursache: kein Limit fĂŒr Delegationstiefe und Handoff-Budget.

Duplizierte Arbeit zwischen Agenten (Cross-agent duplicate work)

Verschiedene Agenten rufen dasselbe tool mit identischen oder fast identischen Argumenten auf. Das wird schnell zu tool spam.

Typische Ursache: dedupe fehlt auf Run-Ebene, nicht nur pro einzelner Agent.

Unbegrenzter Fan-out (Unbounded fan-out)

Ein Agent erzeugt viele Child-Tasks, und das System verbraucht Ressourcen schneller, als es nĂŒtzliche Arbeit abschließt.

Typische Ursache: keine Caps fĂŒr aktive Agenten und parallele Tasks.

Wie man diese Probleme erkennt

Multi-Agent-Chaos ist gut sichtbar ĂŒber die Kombination aus orchestration- und runtime-Metriken.

MetrikSignal fĂŒr Multi-Agent-ChaosWas tun
agent_handoffs_per_runviele Übergaben ohne Abschlussmax_handoffs und stop reason einfĂŒhren
delegation_depth_p95Delegationsketten werden zu tiefTiefe begrenzen und RĂŒckgabe an orchestrator erzwingen
duplicate_subtask_ratemehrere Agenten bearbeiten dieselbe SubtaskOwner-Lock + dedupe signatures
cross_agent_tool_overlap_rateWachstum identischer tool_call zwischen Agentenshared cache, per-run dedupe, bounded fan-out
multi_agent_chaos_stop_ratehĂ€ufige multi_agent_chaos:* stop reasonsAgent-Rollen und arbitration policy prĂŒfen

Wie man Multi-Agent-Chaos von nĂŒtzlicher Spezialisierung unterscheidet

Nicht jeder lange Multi-Agent-Run bedeutet Chaos. Die Kernfrage: liefert jeder Agent einen einzigartigen Beitrag zum finalen Ergebnis.

Normal, wenn:

  • eine Subtask genau einen Owner und klare Verantwortung hat;
  • ein handoff den Task-Zustand Ă€ndert und nicht nur weiterreicht;
  • Zahl von Agenten und Aufrufen zusammen mit AntwortqualitĂ€t steigt.

GefÀhrlich, wenn:

  • eine Subtask mehrere Owner hat;
  • Agenten Aufgaben ohne neues Signal hin- und herschieben;
  • Kosten und latency steigen, wĂ€hrend der Run nicht zu final_answer konvergiert.

Wie man solche AusfÀlle stoppt

Praktisch bedeutet das:

  1. eine role map definieren: wer was tut und wer jede Subtask besitzt;
  2. Limits fĂŒr aktive Agenten, Anzahl Übergaben und Delegationstiefe setzen;
  3. vor jeder neuen Delegation einen arbitration step einfĂŒhren;
  4. bei Konflikten oder BudgetĂŒberschreitung auf fallback umschalten (single-agent oder partielle Antwort).

Minimaler Guard fĂŒr Multi-Agent-Koordination:

PYTHON
from dataclasses import dataclass
import json


def task_signature(task: dict) -> str:
    return json.dumps(task, sort_keys=True, ensure_ascii=False)


@dataclass(frozen=True)
class MultiAgentLimits:
    max_agents_per_run: int = 4
    max_handoffs: int = 8
    max_delegation_depth: int = 3
    max_parallel_subtasks: int = 6
    max_duplicate_signature: int = 2


class MultiAgentChaosGuard:
    def __init__(self, limits: MultiAgentLimits = MultiAgentLimits()):
        self.limits = limits
        self.seen_agents: set[str] = set()
        self.handoffs = 0
        self.in_flight_signatures: set[str] = set()
        self.signature_claims: dict[str, int] = {}
        self.owner_by_signature: dict[str, str] = {}

    def register_agent(self, agent_id: str) -> str | None:
        self.seen_agents.add(agent_id)
        if len(self.seen_agents) > self.limits.max_agents_per_run:
            return "multi_agent_chaos:agent_fanout"
        return None

    def on_handoff(self, _from_agent: str, to_agent: str, depth: int) -> str | None:
        self.handoffs += 1
        if self.handoffs > self.limits.max_handoffs:
            return "multi_agent_chaos:handoff_budget"
        if depth > self.limits.max_delegation_depth:
            return "multi_agent_chaos:delegation_depth"
        return self.register_agent(to_agent)

    def claim_subtask(self, agent_id: str, task: dict) -> str | None:
        sig = task_signature(task)

        owner = self.owner_by_signature.get(sig)
        if owner is not None and owner != agent_id:
            return "multi_agent_chaos:ownership_conflict"
        self.owner_by_signature.setdefault(sig, agent_id)

        self.signature_claims[sig] = self.signature_claims.get(sig, 0) + 1
        if self.signature_claims[sig] > self.limits.max_duplicate_signature:
            return "multi_agent_chaos:duplicate_subtask"

        if sig not in self.in_flight_signatures:
            if len(self.in_flight_signatures) >= self.limits.max_parallel_subtasks:
                return "multi_agent_chaos:parallel_fanout"
            self.in_flight_signatures.add(sig)
        return None

    def finish_subtask(self, task: dict) -> None:
        self.in_flight_signatures.discard(task_signature(task))

Das ist ein Basis-Guard. In dieser Version zĂ€hlt seen_agents auch Versuche, den fan-out zu erweitern, nicht nur bereits zugelassene Agenten. max_agents_per_run begrenzt hier die Anzahl einzigartiger Agenten innerhalb eines Runs. In production ergĂ€nzt man das meist durch shared state store, priority queue fĂŒr Subtasks und expliziten fallback in single-agent mode. on_handoff(...) wird vor Übergabe an einen anderen Agenten aufgerufen, claim_subtask(...) vor Start der Arbeit, damit Chaos bereits am Eingang gestoppt wird.

Wo das in der Architektur umgesetzt wird

In production ist die Kontrolle von Multi-Agent-Chaos ĂŒblicherweise auf drei Systemschichten verteilt.

Orchestration Topologies definiert, wie Agenten interagieren, wer den Zustand besitzt und wo arbitration stattfindet. Ohne diese Schicht ist Chaos zwischen Agenten fast unvermeidlich.

Agent Runtime steuert execution limits, stop reasons (multi_agent_chaos:*) und fallback-ÜbergĂ€nge. Genau hier setzt man handoff/depth budgets und Bedingungen fĂŒr erzwungenes Stoppen.

Tool Execution Layer begrenzt duplizierte Tool-Aufrufe zwischen Agenten: dedupe, retries, timeout und shared caching innerhalb des Runs.

Checkliste

Bevor du ein Multi-Agent-Szenario in production shipst:

  • [ ] role map und Owner fĂŒr jede Subtask sind explizit definiert;
  • [ ] max_agents_per_run, max_handoffs, max_delegation_depth sind gesetzt;
  • [ ] Owner-Lock und per-run dedupe signatures sind vorhanden;
  • [ ] bounded fan-out fĂŒr parallele Subtasks ist aktiviert;
  • [ ] stop reasons decken multi_agent_chaos:* ab;
  • [ ] es gibt fallback: single-agent mode oder partielle Antwort;
  • [ ] Alerts auf agent_handoffs_per_run, duplicate_subtask_rate, queue_backlog;
  • [ ] Runbook beschreibt, wie Rollenkonflikte im Incident eingegrenzt werden.

FAQ

Q: Bedeutet mehr Agenten immer bessere QualitÀt?
A: Nein. Ohne Koordination fĂŒhren mehr Agenten oft zu mehr Duplikaten und Konflikten statt besseren Ergebnissen.

Q: Kann man Chaos nur durch Prompt-Änderung entfernen?
A: Nein. Prompt hilft, aber die Ursache liegt in orchestration-Kontrolle: Rollen, Task-Ownership, budgets und arbitration.

Q: Was tun, wenn Chaos schon in production gestartet ist?
A: VorĂŒbergehend fan-out begrenzen, aktive Agenten reduzieren, single-agent fallback einschalten und stop reasons in Traces prĂŒfen.

Q: Wer sollte in einem Multi-Agent-System final entscheiden?
A: Üblicherweise ein orchestrator oder ein arbitration step. Ohne einen Owner der finalen Entscheidung gerĂ€t das System schnell in Konflikte oder Duplikate.


Multi-Agent-Chaos sieht fast nie wie ein einzelner großer Defekt aus. Meist ist es eine AnhĂ€ufung kleiner Konflikte zwischen Agenten. Darum brauchen production-Systeme nicht nur "smarte" Agenten, sondern auch strikte orchestration-Disziplin.

Verwandte Seiten

Wenn dieses Problem in production auftritt, helfen auch diese Seiten:

⏱ 7 Min. Lesezeit ‱ Aktualisiert 12. MĂ€rz 2026Schwierigkeit: ★★☆
In OnceOnly umsetzen
Guardrails for loops, retries, and spend escalation.
In OnceOnly nutzen
# onceonly guardrails (concept)
version: 1
budgets:
  max_steps: 25
  max_tool_calls: 12
  max_seconds: 60
  max_usd: 1.00
policy:
  tool_allowlist:
    - search.read
    - http.get
controls:
  loop_detection:
    enabled: true
    dedupe_by: [tool, args_hash]
  retries:
    max: 2
    backoff_ms: [200, 800]
stop_reasons:
  enabled: true
logging:
  tool_calls: { enabled: true, store_args: false, store_args_hash: true }
Integriert: Production ControlOnceOnly
Guardrails fĂŒr Tool-Calling-Agents
Shippe dieses Pattern mit Governance:
  • Budgets (Steps / Spend Caps)
  • Kill switch & Incident Stop
  • Audit logs & Nachvollziehbarkeit
  • Idempotenz & Dedupe
  • Tool-Permissions (Allowlist / Blocklist)
Integrierter Hinweis: OnceOnly ist eine Control-Layer fĂŒr Production-Agent-Systeme.
Beispiel-Policy (Konzept)
# Example (Python — conceptual)
policy = {
  "budgets": {"steps": 20, "seconds": 60, "usd": 1.0},
  "controls": {"kill_switch": True, "audit": True},
}
Autor

Diese Dokumentation wird von Engineers kuratiert und gepflegt, die AI-Agenten in der Produktion betreiben.

Die Inhalte sind KI-gestĂŒtzt, mit menschlicher redaktioneller Verantwortung fĂŒr Genauigkeit, Klarheit und Produktionsrelevanz.

Patterns und Empfehlungen basieren auf Post-Mortems, Failure-Modes und operativen Incidents in produktiven Systemen, auch bei der Entwicklung und dem Betrieb von Governance-Infrastruktur fĂŒr Agenten bei OnceOnly.