Aula 11 · cooperação

Agente que encontra trabalho sozinho

"O próprio agente encontra trabalho." Não são necessários humanos para despachar pedidos; o trabalho será realizado no quadro de tarefas.

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

De “ser acordado” a “encontrar seu próprio emprego”

O companheiro de s09/s10 é passivo: alguém precisa enviar uma mensagem pela caixa de correio antes que ela comece a funcionar; quando terminar, ele fica inativo e é ativado novamente.

Companheiro de equipe autônomo do S11 Ativo: Ele realmente não para quando não há trabalho. Ele verificará o diretório .tasks/ a cada 5 segundos - quando encontrar uma tarefa sem proprietário, claim_task irá reivindicá-la e começar a trabalhar.

Ciclo de vida do companheiro de equipe:
  +-------+
  | desovar |
  +---+---+
      |
      v
  +-------+
  | TRABALHO | <-- Loop tool_use do LLM
  +---+---+
      |
      | stop_reason != tool_use OU tool_use("ocioso")
      v
  +-------+
  | Ocioso | pesquisa a cada 5s, 12 vezes no total = tempo limite de 60s
  +---+---+
      |
      +--> Novas notícias na caixa de entrada?  → retomar o TRABALHO
      |
      +--> digitalizar .tasks/, encontrado não reclamado → reivindicação → retomar TRABALHO
      |
      +--> Anos 60, nada esperando → status = desligamento, thread sai

Reivindicação automática · "Aceitar pedidos" no quadro de tarefas

Funções principais:

def scan_unclaimed_tasks() -> lista:
    não reclamado = []
    para f em classificado(TASKS_DIR.glob("task_*.json")):
        tarefa = json.loads(f.read_text())
        if (task.get("status") == "pendente"
                e não task.get("proprietário")
                e não task.get("blockedBy")):
            não reclamado.append(tarefa)
    devolução não reclamada

Três filtros = pendente + sem proprietário + sem bloqueadoBy. Ambos são indispensáveis.

A própria ação de reivindicação tem um bloqueio (_claim_lock) para evitar que dois agentes capturem a mesma tarefa não reivindicada ao mesmo tempo - leia o bloqueio novamente, verifique se o proprietário ainda está vazio e, em seguida, grave a marca "in_progress" + proprietário no disco.

Simule vários agentes para verificar o quadro de tarefas ao mesmo tempo

3 companheiros de equipe estão inativos e 3 tarefas aguardam para serem reivindicadas. Clique em "Scan Next Round" para ver quem recebe primeiro.

Reinjeção de identidade · Você ainda sabe quem você é após a compressão

s06 mencionou que auto_compact substituirá mensagens por resumo. O agente autônomo pode ser facilmente acionado após horas de execução - após a compactação, o modelo não sabe seu nome ou função.

O truque do S11: Ao reivindicar uma nova tarefa, se len(messages) ≤ 3 (indicando que ela acabou de ser compactada), insira automaticamente o bloco de identidade no cabeçalho:

se len(mensagens) <= 3:
    mensagens.insert(0, {
        "função": "usuário",
        "content": f"<identity>Você é 'alice', função: codificadora, equipe: minha-equipe. Continue seu trabalho.</identity>",
    })
    messages.insert(1, {"role":"assistente", "content": f"Eu sou Alice. Continuando."})

Esse modo é chamado de reinjeção de identidade - ele usa uma rodada de diálogo construída artificialmente para "dizer ao modelo quem ele é" para que ele possa recuperar seu senso de caráter.

Interativo

Widget 1 · Scanner de Tarefas · 3 agentes pegam 3 tarefas

Alice / Bob / Charlie estão todos ociosos. Clique em Digitalizar para ver quem reivindica a primeira tarefa não reivindicada em ordem alfabética.

.tasks/ 目录
Teammates 状态
所有人都 idle,等着扫
Interativo

Widget 2 · Desvio de identidade · Após a compactação, o agente ainda se lembra de si mesmo?

Comparação da resposta do agente a "Quem é você?" antes e depois da compactação do contexto de simulação. O que acontece sem reinjeção de identidade?

没有 identity 重注入
有 identity 重注入
Interativo

Widget 3 · Autônomo vs Assistido · Quais funções são adequadas para autonomia

Decida se deseja deixar esta função executar um ciclo autônomo ou ficar passivamente em espera. Pense no “custo da perda de controle” e na “frequência da intervenção humana”.

答对 0 / 5