Handshake-Protokoll zwischen zwei Agenten
Agenten müssen auch untereinander „Verträge abschließen“. request_id ist die Vertragsnummer.
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: truebedeutet.
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).