Lektion 10 · Zusammenarbeit

Handshake-Protokolle zwischen zwei Agents

Auch Agents brauchen "Verträge". Die request_id ist die Vertragsnummer.

⏱ ~10 Min · 📝 3 interaktive Widgets · 🧑‍💻 Basiert auf shareAI-lab · s10_team_protocols.py

Warum Protokolle?

In s09 kann send_message beliebige Inhalte übermitteln. Wenn zwei Agents aber in einer bestimmten Sache eine Einigung erzielen müssen (z.B. "darf ich dich jetzt herunterfahren?"), reicht ein einfacher String nicht aus — du brauchst:

  • Eindeutige Anfrage-ID (request_id), damit Antworten zugeordnet werden können.
  • Zustandsmaschine (FSM): pending → approved | rejected, jeder Zustand hat klare Konsequenzen.
  • Konsistente Felder: Beide Seiten wissen, was approve: true bedeutet.

Dafür gibt es shutdown_request / shutdown_response / plan_approval / plan_approval_response.

Shutdown-Protokoll vollständig

lead möchte alice herunterfahren:

lead:
  # shutdown_request senden, request_id auf Server speichern
  req_id = uuid4()[:8]
  shutdown_requests[req_id] = {"target": "alice", "status": "pending"}
  send("alice", "shutdown_request", extra={"request_id": req_id})

alice:
  # nächste Loop-Runde: Postfach lesen, shutdown_request sehen
  # entscheidet: erst aktuelle Aufgabe fertigstellen, dann zustimmen
  tool_use("shutdown_response", request_id=req_id, approve=True)

lead:
  # shutdown_response empfangen, Tracker auf approved aktualisieren
  shutdown_requests[req_id]["status"] = "approved"
  # alice erkennt Shutdown-Zustimmung, setzt status=shutdown und beendet Loop

Shutdown FSM visualisiert

FSM Schritt für Schritt durchgehen. alice kann auch ablehnen — "ich bin mitten in einer kritischen Aufgabe".

Plan Approval · Gleiches Muster, andere Domäne

Teammate übermittelt einen Plan zur Genehmigung, bevor er eine große Aktion durchführt:

alice:
  tool_use("plan_approval", plan="Ich plane, das auth-Modul komplett auf JWT umzuschreiben")
  # alice wartet idle auf lead

lead:
  # alices plan_approval_response-Anfrage sehen
  tool_use("plan_approval", request_id="...", approve=False,
           feedback="auth noch nicht anfassen, nächsten Monat kommt ein Gesamt-Refactor")

Im s10-Quellcode fällt auf: Beide Protokolle verwenden exakt dasselbe request_id-Tracking-Muster — nur die Dictionary-Namen unterscheiden sich (shutdown_requests vs. plan_requests). Ein Muster, zwei Domänen.

Warum keine gemeinsame Protocol-Basisklasse? s10 abstrahiert bewusst nicht. Bei nur zwei Protokollen ist der Gewinn noch nicht klar; jedes ist für sich allein verständlich. Wenn ein viertes oder fünftes Protokoll kommt, lohnt die Abstraktion (rule of three).
Interaktiv

Widget 1 · Shutdown FSM · Gesamte Zustandsmaschine durchlaufen

Next klicken, um einen Schritt voranzugehen. Beobachte, wie request_id die Zuordnung zwischen zwei Agents herstellt.

🧑‍💼 Lead
👩‍💻 Alice
shutdown_requests Zustandstabelle
{}
Interaktiv

Widget 2 · request_id Zuordnung · Keine Verträge verwechseln

Mehrere Anfragen gleichzeitig pending — eine Antwort anklicken und beobachten, welche Anfrage aktualisiert wird. Das ist der Schlüssel für parallelen Betrieb.

Ausstehende Anfragen
Simulierte Antworten (klicken zum Auslösen)
Interaktiv

Widget 3 · Protocol Design · Dein eigenes drittes Protokoll

Neues Szenario — das request_id-Muster auf einen Handshake anwenden. Nur die richtige Antwort besteht.

0 / 5 richtig