Agentes administradores
Deixe um agente gerenciar e treinar outros com a ferramenta manage_agent, dentro de um escopo can_manage direcionado.
Um agente pode administrar e treinar outros agentes. Com a ferramenta manage_agent
ele define a persona, o modelo, as ferramentas e a memória de outro agente, ou cria
agentes novos do zero. A autoridade é uma lista de permissões direcionada, por
agente, chamada can_manage, então você pode ter vários administradores ao mesmo
tempo, cada um com escopo sobre um conjunto diferente de agentes.
O escopo can_manage
can_manage |
O que significa |
|---|---|
ausente, ou nil |
Apenas ele mesmo. É o padrão. |
[] |
Ninguém, nem ele mesmo. Um agente de cliente trancado. |
[a, b] |
Exatamente esses agentes. Inclua o próprio nome para incluir a si mesmo. |
["*"] |
Todos os agentes. Um superadministrador explícito. |
# boss passa a administrar o "sales"
pepe agent manage boss sales
# um superadministrador sobre todos os agentes
pepe agent manage boss "*"
# um agente trancado, que não pode alterar a si mesmo
pepe agent add child --can-manage none
Assim como no roteamento, can_manage é uma lista direcionada e deliberadamente não é
simétrica. Dar ao boss autoridade sobre o sales não concede ao sales nada sobre o
boss. A autoridade só flui no sentido em que você a escreveu, e é isso que permite
colocar um agente trancado, voltado ao cliente, na frente de um administrador sem que o
agente de cliente consiga reconfigurar o administrador nem a si mesmo.
O que o manage_agent faz
| Ação | O que faz |
|---|---|
list |
Lista os agentes no escopo. |
get |
Lê a configuração de um agente. |
create |
Cria um agente novo. |
set_persona |
Reescreve o prompt de sistema do agente alvo. |
set_model |
Aponta o agente alvo para outra conexão de modelo. |
set_utility_model |
Define a conexão barata em que rodam as tarefinhas do agente alvo, como dar nome a uma conversa. Um valor vazio desliga isso, e as tarefinhas passam a ser feitas sem modelo. |
set_flag |
Liga ou desliga um interruptor do agente alvo (on/off): trust_untrusted_content (deixar que ele aja sobre o que estranhos mandam), exempt_message_limit, midrun_fold (deixar uma correção no meio do turno direcionar o turno em andamento em vez de sempre esperar; usa o triage_model se houver um, senão o próprio modelo do agente, ao custo de uma chamada a mais por mensagem no meio do turno), commitments (perceber um follow-up declarado depois de cada turno e acompanhá-lo, sem que seja pedido), session_search_project_wide (deixar o session_search ver todas as conversas do projeto do agente alvo, não só as do próprio chamador; veja Busca de sessões. Desligado é o certo para um agente que fala com vários clientes finais diferentes), ou capability_nudge (deixar que ele mencione uma funcionalidade relacionada - Watches, tarefas agendadas, Goals, uma skill instalada - numa frase curta logo depois de ajudar com algo, quando ela realmente se aplica). Ligar o trust_untrusted_content ou o session_search_project_wide não pode ser feito a partir de uma execução que ela mesma ingeriu conteúdo de fora, então um documento injetado não consegue virar nenhum dos dois. |
add_tool |
Concede mais uma ferramenta ao agente alvo. |
remove_tool |
Revoga uma ferramenta do agente alvo. |
remember |
Acrescenta um fato à memória do agente alvo. |
Você não precisa dos nomes técnicos das flags. O set_flag é conduzido pelo modelo, então você pede com suas palavras (“deixa o agente de atendimento agir nos arquivos que os clientes mandam”, “para de limitar as mensagens desse agente”) e ele escolhe o interruptor certo.
A persona e a memória ficam no workspace do agente alvo. As ferramentas e o modelo ficam na entrada dele no arquivo de configuração.
A barreira de permissão
manage_agent é uma ferramenta de risco, então cada uso dela é autorizado através da
barreira de permissão. O agente propõe a alteração, você aprova, e só então ela é
gravada. Um agente só pode mexer nos agentes dentro do seu próprio escopo can_manage,
e um pedido para administrar algo fora desse escopo é recusado.