Lektion 10 · Zusammenarbeit

Handshake-Protokoll zwischen zwei Agenten

Agenten müssen auch untereinander „Verträge abschließen“. request_id ist die Vertragsnummer.

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

Warum eine Vereinbarung?

In s09 kann send_message beliebige Inhalte senden. Aber wenn zwei Agenten einen Konsens über etwas erzielen möchten (z. B. „Ich möchte herunterfahren, kann ich?“), reicht das Senden einer Zeichenfolge nicht aus – Sie benötigen Folgendes:

  • Die Anfrage hat eine eindeutige Identität (request_id), damit die Antwort korrekt ist.
  • Zustandsmaschine: ausstehend → genehmigt | abgelehnt, die Konsequenzen jedes Staates sind klar.
  • Konsistente Felder: Beide Parteien wissen, was approve: true bedeutet.

Aus diesem Grund gibt es shutdown_request / shutdown_response / plan_approval / plan_approval_response.

Protokollieren Sie den gesamten Prozess

Leiter möchte, dass Alice von der Arbeit freikommt:

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

Alice:
  # Lesen Sie das Postfach in der nächsten Schleife und sehen Sie sich „shutdown_request“ an
  # Entscheidung: Beenden Sie die anstehende Arbeit, bevor Sie sie zurücksenden und genehmigen
  tool_use("shutdown_response", request_id=req_id, genehmigt=True)

Leitung:
  # Shutdown_response erhalten, Tracker auf genehmigt aktualisieren
  Shutdown_requests[req_id]["status"] = "approved"
  # Der Alice-Thread erkennt die Akzeptanz des Herunterfahrens und setzt status=shutdown, um die Schleife zu verlassen

FSM-Visualisierung herunterfahren

Beobachten Sie jeden Schritt der Zustandsmaschine. Alice kann auch ablehnen, indem sie sagt: „Ich mache kritische Arbeit und kann jetzt nicht aufhören.“

Plangenehmigung · Gleiches Modell, andere Domäne

Teamkollege reicht einen Plan ein, bevor er einen großen Schritt startet, und bitte ihn zur Genehmigung:

alice:
  tool_use("plan_approval", plan="Ich habe vor, alle Authentifizierungsmodule mit jwt neu zu schreiben")
  # Alice bleibt untätig und wartet auf Lead

Leitung:
  # Siehe Alices plan_approval_response-Anfrage
  tool_use("plan_approval", request_id="...", genehmigt=False,
           feedback="Berühren Sie die Authentifizierung noch nicht, wir werden nächsten Monat eine umfassende Umgestaltung durchführen")

Wenn Sie sich den S10-Quellcode ansehen, werden Sie Folgendes feststellen: Die beiden Protokolle verwenden genau den gleichen request_id-Tracking-Modus – nur die Wörterbuchnamen wurden geändert (shutdown_requests vs. plan_requests). Das ist „ein Modell, zwei Domänen“.

Warum nicht eine generische Protokoll-Basisklasse abstrahieren? s10 ist bewusst nicht abstrakt. Grund: Derzeit gibt es nur zwei Protokolle und die Vorteile der Abstraktion sind noch nicht offensichtlich; Wenn Sie zwei explizit schreiben, kann jeder unabhängig verstanden werden. Es wird nicht zu spät sein, das vierte und fünfte Protokoll zu verfeinern (Dreierregel).
Interaktiv

Widget 1 · FSM herunterfahren · Durchlaufen Sie die gesamte Zustandsmaschine

Klicken Sie auf „Weiter“, um einen Schritt weiter zu gehen und zu sehen, wie request_id eine entsprechende Beziehung zwischen den beiden Agenten herstellt.

🧑‍💼 Lead
👩‍💻 Alice
shutdown_requests 状态表
{}
Interaktiv

Widget 2 · request_id-Zuordnung · Erhalten Sie nicht den falschen Vertrag

Mehrere Anfragen stehen gleichzeitig aus – klicken Sie auf eine Antwort, um zu sehen, welche Anfrage aktualisiert wird. Dies ist der Schlüssel zur Parallelität des Protokolls.

待响应的请求
模拟的响应(点击触发)
Interaktiv

Widget 3 · Protokolldesign · Ihr eigenes drittes Protokoll

Um Ihnen ein neues Szenario vorzustellen, wenden Sie das Muster „request_id“ an, um einen Handshake zu entwerfen. Wählen Sie das Richtige zum Bestehen aus.

答对 0 / 5