Wann man dazu greift
- Viele Agenten asynchron beitragen.
- Gemeinsamer Zustand wichtiger ist als direkte Konversation.
- Zwischenergebnisse persistent bleiben müssen.
/pattern/blackboard/
Agenten koordinieren sich indirekt über eine gemeinsame Zustandsablage, in der Ergebnisse, Hypothesen und Aufgaben hinterlegt werden, anstatt direkte Nachrichten auszutauschen.
Wann man dazu greift
Wann es nach hinten losgeht
Die Abwägung
Hochgradig entkoppelte Zusammenarbeit wird auf Kosten anspruchsvoller Zustandsverwaltung und Konsistenzanforderungen erreicht.
Spezialisten lesen und schreiben ein gemeinsames Blackboard; jeder handelt, wenn seine Vorbedingung erfüllt ist. Keine feste Reihenfolge.
from typing import TypedDict, Any
from langgraph.graph import StateGraph, END
class State(TypedDict):
board: dict[str, Any]
def diagnostic(state):
if "hypothesis" not in state["board"]:
return {"board": {**state["board"], "hypothesis": diagnose(state["board"])}}
return state
def log_analyst(state):
if "hypothesis" in state["board"] and "evidence" not in state["board"]:
return {"board": {**state["board"], "evidence": fetch_logs(state["board"])}}
return state
def fix_specialist(state):
if "evidence" in state["board"] and "remediation" not in state["board"]:
return {"board": {**state["board"], "remediation": propose_fix(state["board"])}}
return state
def is_complete(state):
board = state["board"]
return "hypothesis" in board and "evidence" in board and "remediation" in board
g = StateGraph(State)
g.add_node("diagnostic", diagnostic)
g.add_node("log_analyst", log_analyst)
g.add_node("fix_specialist", fix_specialist)
# Each specialist loops back until completion
g.add_conditional_edges("diagnostic", lambda s: END if is_complete(s) else "log_analyst")
g.add_conditional_edges("log_analyst", lambda s: END if is_complete(s) else "fix_specialist")
g.add_conditional_edges("fix_specialist", lambda s: END if is_complete(s) else "diagnostic")
g.set_entry_point("diagnostic")
blackboard = g.compile()Das Blackboard erreicht nie einen Endzustand. Spezialisten durchlaufen endlose Schleifen und überschreiben dieselben Einträge.
Lösung · Ein 'complete'-Prädikat im Blackboard-Schema definieren. Wenn es gilt, zum END routen, unabhängig davon, welcher Knoten aktiv ist.
Jeder Spezialist schreibt alles, was er weiß, in den gemeinsamen Zustand. Das Schema bläht sich auf, und spätere Spezialisten finden nicht mehr, was sie brauchen.
Lösung · Ein typisiertes Schema pro Blackboard-Domäne erzwingen. Schreibvorgänge ablehnen, die nicht den deklarierten Feldern entsprechen.
Beide sind dezentral — kein zentraler Knoten besitzt den Kontrollfluss —, deshalb stehen sie am autonomen Ende des Spektrums nebeneinander und werden am häufigsten verwechselt. Der Unterschied liegt nicht darin, ob sie sich selbst organisieren, sondern im Koordinations-Substrat.
Swarm ist push, Blackboard ist pull.
Es ist die klassische Unterscheidung aus den verteilten Systemen: Swarm koordiniert per Nachrichtenaustausch — ein Agent benennt seinen Nachfolger und übergibt Kontrolle und Kontext; Blackboard koordiniert über gemeinsamen, stigmergischen Zustand — Agenten sprechen einander nie an, sie reagieren auf das, was auf einem gemeinsamen Board steht.
| Dimension | Blackboard | Swarm |
|---|---|---|
| Handoff-Vektor | Indirekt — ein Schreibzugriff auf den gemeinsamen Zustand | Direkt — transfer_to(named_peer) |
| Wer wird adressiert | Das Board (ein Zustandsprädikat) | Ein bestimmter Peer-Agent |
| Aktivierung | Datengetrieben („ich habe jetzt etwas beizutragen“) | Kontrollgetrieben (der aktive Agent gibt den Staffelstab weiter) |
| Wo der Kontext liegt | Bleibend und sichtbar auf dem Board | Reist mit jeder Übergabe mit |
| Agent hinzufügen | Ein Abo — bestehende Agenten bleiben unverändert | Muss in den transfer_to-Listen der Peers stehen |
| Synchronität | Ideal für asynchrone, langlaufende Arbeit | Staffelstab-Übergabe live; Kontrolle fließt kontinuierlich |
| Terminierung | Quiescence — kein Agent hat noch eine relevante Aktion | Ein Agent antwortet, oder max_handoffs ist erreicht |
mehrere Spezialisten inkrementell ein gemeinsames Artefakt aufbauen und Teilergebnisse weitere Arbeit freischalten, Beteiligte nicht gleichzeitig verfügbar sind, oder Spezialisten hinzukommen und wegfallen sollen, ohne die anderen umzuverdrahten.
eine einzelne Aufgabe live zwischen Spezialisten wandern muss, der nächste Spezialist davon abhängt, was der vorige herausgefunden hat, und sich kein statischer Plan im Voraus zeichnen lässt.
Beide geben die Garantien von Pipeline und Graph über Pfadlänge, Abdeckung und Kosten auf, und beide machen Tracing unverzichtbar. Der Fehlermodus von Swarm ist Hallucinated Routing und unbeschränkte Schleifen — max_handoffs begrenzen und Transfers schema-validieren; der von Blackboard ist Stillstand (Stall) und mühsames Debugging — einen Liveness-Check ergänzen und das Board nach Trust-Level partitionieren.
Patterns, Frameworks und Seiten durchsuchen.