Plusieurs agents communiquent via des boîtes aux lettres de fichiers
Du sous-agent au coéquipier : ponctuel → persistant ; sans nom → nommé; aucune communication → boîte aux lettres de fichiers.
Quelle est la différence entre un sous-agent et un coéquipier ?
Le sous-agent de S04 est simple et rudimentaire : apparaître → courir → revenir au résumé → mourir. Une communication ponctuelle, sans nom, sans bidirectionnelle entre père et fils.
Le coéquipier de s09 est un agent indépendant qui a un nom, peut être réveillé à plusieurs reprises et peut envoyer et recevoir des messages :
sous-agent (s04) : spawn -> exécuter -> retour -> détruit
coéquipier (s09) : spawn -> travail -> inactif -> travail -> ... -> arrêt
Les deux mécanismes ont des objectifs différents :
- Le sous-agent convient pour "effectuer une exploration spécifique" (telle que l'examen d'une demande de tirage).
- Un coéquipier convient pour "assumer un rôle en continu" (comme un réviseur à long terme qui est réveillé à chaque fois qu'il y a un nouveau commit).
La boîte aux lettres est un fichier JSONL
Comment les membres de l'équipe communiquent-ils entre eux ? s09 utilise le mécanisme le plus primitif : fichier JSONL avec ajout uniquement.
.team/ config.json # Liste de l'équipe boîte de réception/ alice.jsonl # Les lettres à Alice sont ajoutées ici bob.jsonl lead.jsonl
envoyer est open("alice.jsonl", "a").write(msg); read consiste à lire le fichier entier, à analyser JSONL, puis à truncate pour effacer (vider la sémantique).
Pourquoi utiliser des fichiers plutôt que des files d’attente mémoire ? Les documents sont naturellement durables. Redémarrages d'agents, plantages de processus, voire redémarrages de machines : les e-mails sont toujours là. De plus, il est lisible et grep-able, et l'expérience de débogage est très bonne.
Regardez le processus complet d'un message de Lead à Alice
Le widget suivant vous permet d'envoyer un message à Alice et de voir ce qui se passe sur le disque à chaque étape.
5 types de messages
s09 définit 5 types de messages (VALID_MSG_TYPES), mais seuls les deux premiers sont implémentés, et les trois derniers sont ajoutés dans la classe de protocole s10 :
message— message texte ordinaire.diffusion: envoyée à tous les coéquipiers sauf vous-même.shutdown_request/shutdown_response— Demande/réponse pour un arrêt progressif (s10).plan_approval_response— Approbation du plan (s10).
Pourquoi est-il déclaré mais pas implémenté ? Parce que s09 veut ouvrir une "extension de protocole", le type de message est une énumération. Pour en ajouter une nouvelle, il vous suffit d'ajouter une entrée dans le dictionnaire et de la traiter dans la route _exec.