Aula 09 · cooperação

Vários agentes se comunicam por meio de caixas de correio de arquivos

De subagente a companheiro de equipe: único → persistente; sem nome → nomeado; sem comunicação → caixa de correio de arquivo.

⏱ ~12 min · 📝 3 componentes interativos · 🧑‍💻 Baseado em shareAI-lab · s09_agent_teams.py

Qual é a diferença entre Subagente e companheiro de equipe?

O subagente do S04 é simples e rudimentar: spawn → run → return to summary → die. Uma comunicação única, sem nome, sem comunicação bidirecional entre pai e filho.

O companheiro de equipe de s09 é um agente independente que tem um nome, pode ser despertado repetidamente e pode enviar e receber mensagens:

subagent (s04): spawn -> executar -> retornar -> destruído
companheiro de equipe (s09): spawn -> trabalho -> ocioso -> trabalho -> ... -> desligamento

      

Os dois mecanismos têm finalidades diferentes:

  • O Subagent é adequado para "fazer uma exploração específica" (como revisar um PR).
  • Teammate é adequado para "assumir continuamente uma função" (como um revisor de longo prazo que é acordado toda vez que há um novo commit).

A caixa de correio é um arquivo JSONL

Como os membros da equipe se comunicam entre si? s09 usa o mecanismo mais primitivo: arquivo JSONL somente anexado.

.team/
  config.json # Lista da equipe
  caixa de entrada/
    alice.jsonl # Cartas para alice estão anexadas aqui
    bob.jsonl
    lead.jsonl

enviar é open("alice.jsonl", "a").write(msg); read é ler o arquivo inteiro, analisar JSONL e então truncate para limpar (drenar a semântica).

Por que usar arquivos em vez de filas de memória? Os documentos são naturalmente duráveis. O agente reinicia, os processos travam e até a máquina reinicia - os e-mails ainda estão lá. Além disso, é legível e compatível com grep, e a experiência de depuração é muito boa.

Veja o processo completo de uma mensagem do lead para Alice

O widget a seguir permite enviar uma mensagem para Alice e ver o que está acontecendo no disco em cada etapa.

5 tipos de mensagens

s09 define 5 tipos de mensagens (VALID_MSG_TYPES), mas apenas os dois primeiros são implementados e os três últimos são adicionados na classe de protocolo s10:

  • mensagem — mensagem de texto comum.
  • transmissão — enviado para todos os colegas de equipe, exceto você.
  • shutdown_request / shutdown_response — Solicitação/resposta para desligamento normal (s10).
  • plan_approval_response — Aprovação do plano (s10).

Por que é declarado, mas não implementado? Como s09 deseja abrir a "extensão de protocolo" - o tipo de mensagem é uma enumeração. Para adicionar um novo, você só precisa adicionar uma entrada no dicionário e processá-la na rota _exec.

Interativo

Widget 1 · Fluxo de mensagens · Uma mensagem do lead para Alice

Clique em Enviar e rastreie cada etapa no sistema de arquivos: lead.send → anexar alice.jsonl → alice next read inbox → truncar.

Interativo

Widget 2 · Team Config · Quem está online e qual é o seu status?

.team/config.json é a lista da equipe. Faça algumas operações (spawn/message/shutdown) e veja como a configuração muda.

操作
.team/config.json

        
Interativo

Widget 3 · Subagente vs companheiro de equipe · Decidindo qual usar

6 cenários de missão, decida se deseja usar subagente (spawn-then-die) ou companheiro de equipe (spawn-then-live). Considere se a tarefa é um “acordo único”.

答对 0 / 6