Lektion 09 · Zusammenarbeit

Mehrere Agenten kommunizieren über Dateipostfächer

Vom Subagenten zum Teamkollegen: einmalig → dauerhaft; namenlos → benannt; keine Kommunikation → Dateipostfach.

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

Was ist der Unterschied zwischen Subagent und Teammate?

Der Subagent von S04 ist einfach und grob: spawnen → ausführen → zur Zusammenfassung zurückkehren → sterben. Ein Einzelfall, kein Name, keine wechselseitige Kommunikation zwischen Vater und Sohn.

s09s Teamkollege ist ein unabhängiger Agent, der einen Namen hat, wiederholt geweckt werden kann und Nachrichten senden und empfangen kann:

subagent (s04): spawn -> ausführen -> zurück -> zerstört
Teamkollege (s09): spawn -> Arbeit -> Leerlauf -> Arbeit -> ... -> Herunterfahren

Die beiden Mechanismen dienen unterschiedlichen Zwecken:

  • Der Subagent eignet sich für die „Durchführung einer bestimmten Erkundung“ (z. B. die Überprüfung einer PR).
  • Teammate eignet sich dazu, „kontinuierlich eine Rolle einzunehmen“ (z. B. ein Langzeitprüfer, der jedes Mal geweckt wird, wenn es einen neuen Commit gibt).

Das Postfach ist eine JSONL-Datei

Wie kommunizieren Teammitglieder miteinander? s09 verwendet den primitivsten Mechanismus: JSONL-Datei nur anhängen.

.team/
  config.json # Teamliste
  Posteingang/
    alice.jsonl # Briefe an Alice werden hier angehängt
    bob.jsonl
    Lead.jsonl

send is open("alice.jsonl", "a").write(msg); read bedeutet, die gesamte Datei zu lesen, JSONL zu analysieren und dann zum Löschen zu truncate (Semantik entleeren).

Warum Dateien anstelle von Speicherwarteschlangen verwenden? Dokumente sind von Natur aus langlebig. Agent-Neustarts, Prozesse stürzen ab, sogar Maschinen-Neustarts – die E-Mails sind immer noch da. Außerdem ist es lesbar und grep-fähig, und das Debugging-Erlebnis ist sehr gut.

Sehen Sie sich den gesamten Prozess einer Nachricht vom Lead an Alice an

Mit dem folgenden Widget können Sie eine Nachricht an Alice senden und sehen, was bei jedem Schritt auf der Festplatte passiert.

5 Nachrichtentypen

s09 definiert 5 Nachrichtentypen (VALID_MSG_TYPES), aber nur die ersten beiden sind implementiert und die letzten drei werden in der s10-Protokollklasse hinzugefügt:

  • message – normale Textnachricht.
  • Broadcast – wird an alle Teamkollegen außer Ihnen selbst gesendet.
  • shutdown_request / shutdown_response – Anfrage/Antwort für ordnungsgemäßes Herunterfahren (s10).
  • plan_approval_response – Plangenehmigung (s10).

Warum wird es deklariert, aber nicht implementiert? Da s09 die „Protokollerweiterung“ öffnen möchte, ist der Nachrichtentyp eine Aufzählung. Um einen neuen hinzuzufügen, müssen Sie nur einen Eintrag im Wörterbuch hinzufügen und ihn in der Route _exec verarbeiten.

Interaktiv

Widget 1 · Nachrichtenfluss · Eine Nachricht von Lead an Alice

Klicken Sie auf Senden und verfolgen Sie jeden Schritt im Dateisystem: Lead.send → append alice.jsonl → alice next read inbox → truncate.

Interaktiv

Widget 2 · Teamkonfiguration · Wer ist online und welchen Status hat er?

.team/config.json ist die Teamliste. Führen Sie ein paar Vorgänge aus (Spawn / Nachricht / Herunterfahren) und sehen Sie, wie sich die Konfiguration ändert.

操作
.team/config.json

        
Interaktiv

Widget 3 · Subagent vs. Teamkollege · Entscheiden, welcher verwendet werden soll

6 Missionsszenarien, entscheiden Sie, ob Sie einen Subagenten (spawn-then-sterb) oder einen Teamkollegen (spawn-then-live) verwenden möchten. Überlegen Sie, ob es sich bei der Aufgabe um eine „einmalige Angelegenheit“ handelt.

答对 0 / 6