Crie um agente que escreva suas próprias ferramentas


A terceira postagem do Construct Membership, nossa sessão semanal de construção ao vivo. O repositório GitHub complementar pode ser encontrado aquidocumentos aqui e você pode tentar o agente ao vivo no playground hospedado.

A estrutura do seu agente não é o gargalo. O gargalo é que cada novo sistema externo com o qual seu agente precisa se comunicar requer outro wrapper de ferramenta, outro servidor MCP, outro merchandise em um registro que está sempre duas etapas atrás da API que ele encapsula.

O modelo convencional é “agente mais registro de ferramenta com curadoria”. Ele é dimensionado linearmente com o número de integrações que seu agente precisa fazer, e a curadoria é um trabalho permanente. Você envia uma embalagem. O fornecedor altera seu endpoint. O invólucro flutua. O agente fica preso. Você envia outra embalagem.

Há um padrão emergente na produção que inverte essa abordagem. O novo modelo é “agente mais sandbox seguro mais especificações de API brutas”. As ferramentas não são pré-construídas. O agente os escreve instantaneamente, usando a especificação como única referência, executa-os em um limite confiável e descarta aqueles que se revelam errados. A função da estrutura não é fornecer ferramentas. O trabalho da estrutura é tornar segura a criação de ferramentas.

Luke Shulman, Diretor de Inovação de Agentes da DataRobot, abordou esse padrão em uma sessão recente do Construct Membership.

O público escolheu o problema: CODEOWNERS higiene no monorepo DataRobot. Cada monorepo de idade significativa acumula esse tipo de desvio à medida que as equipes se reorganizam, são renomeadas ou são absorvidas. Os arquivos acabam anotados com aliases que não apontam mais para lugar nenhum. A limpeza é mecânica, tediosa e um bom primeiro alvo para um agente. Um membro da equipe da plataforma apresentou-o como alvo de construção: verificar o repositório, encontrar arquivos pertencentes a equipes que não existem mais, propor reatribuições, abrir o PR.

Luke o construiu ao vivo, em uma hora, em um modelo modesto de 35B parâmetros. Ele não pré-construiu uma única ferramenta. O agente os escreveu.

Crie um agente que escreva suas próprias ferramentas

Este submit é a receita.

Exemplo de linguagem natural

Agente NL de Luke criando sua primeira ferramenta com base nas especificações OpenAPI do GitHub.

Luke chama esse padrão de agente de linguagem pure (NL), também conhecido como agente de linguagem pure. agente de contexto.

O enquadramento é importante porque inverte o rumo do seu esforço de engenharia. Na configuração convencional, você gasta seu tempo registrando a ferramenta. Em um agente NL, você passa seu tempo na sandbox.

O agente é executado em uma VM JavaScript baseada em Deno com um diretório restrito, uma lista de permissões de rede restrita e um conjunto restrito de variáveis ​​de ambiente. JavaScript é a superfície de execução certa para isso porque todo o ecossistema do navegador é baseado na execução segura de JavaScript não confiável. Deno reforça isso ainda mais com permissões explícitas para acesso a arquivos, rede e ambiente.

O agente recebe oito ferramentas para começar: cat, discover, grep, tree, write, search-and-replace, mkdir, e execute_code. Todo o resto, o agente tem que ser autor de si mesmo. O execute_code ferramenta é o desbloqueio. O agente lê um immediate do sistema de markdown, lê todos os documentos de referência em seu diretório e começa a escrever funções JavaScript para se comunicar com o sistema externo. Ele os experimenta. Isso os corrige quando eles falham. As funções que ele mantém são salvas como um arquivo instruments.js no diretório de trabalho. Na próxima vez que o agente for carregado, essas ferramentas já estarão lá.

A assimetria é favorável. A configuração é curta. A infraestrutura é pequena. O agente faz a integração funcionar sozinho em relação a uma especificação que é, por definição, mais completa do que qualquer wrapper que alguém iria manter. Você não precisa estar à frente das necessidades do agente. A especificação já é.

Tudo abaixo pressupõe que você tenha o tempo de execução do agente NL (código aberto em github.com/kindofluke/context-agent) e um Conta DataRobot. Se você preferir ver o padrão antes de construir, o playground hospedado executa o agente ao vivo em seu navegador em uma base de conhecimento de amostra.

Etapa 1: configurar o diretório e o sandbox

Comandos CLI

Crie um novo diretório de trabalho. Este é o único lugar onde o agente pode ler ou escrever. Configure o sandbox Deno para permitir apenas tipos de arquivo .js e .md nesse diretório. Configure a lista de permissões da rede para permitir apenas os domínios que você deseja que o agente atinja. Para esta compilação, isso significava api.github.com e nada mais.

Esta é a etapa de suporte de carga. Se você der a um agente a capacidade de escrever código sem um native seguro para executá-lo, você terá um agente propenso a recusas ou um incidente de segurança. O valor da estrutura é o sandbox, não o loop do agente.

Etapa 2: inserir a especificação OpenAPI como contexto

Baixe o Especificação OpenAPI do GitHub e coloque-o no diretório do agente como github-openapi.yaml. Não escreva um wrapper. Não pré-crie ferramentas. A especificação é todo o contexto que o agente precisa.

Especificação OpenAPI no diretório

Visão geral do diretório e contexto do agente durante a construção.

Este é o movimento que recebe maior resistência e é o mais importante. O instinto convencional é escrever um skinny shopper em torno da API e entregar o cliente ao agente. O padrão NL é entregar ao agente as especificações e deixá-lo escrever seu próprio skinny shopper, apenas para os endpoints que ele realmente precisa. A maioria dos invólucros cobre uma área de superfície que nunca é usada.

Etapa 3: gerar um token refinado como um env var prefixado

Token de acesso pessoal do GitHub

Gere um token de acesso pessoal refinado do GitHub com escopo para Contents: learn e Pull requests: write para o repositório de destino. Escopo mínimo exigido, nada mais.

O tempo de execução NL expõe variáveis ​​de ambiente ao agente somente quando elas carregam um prefixo específico (NL_ na configuração de Luke). Qualquer coisa sem o prefixo fica invisível para o agente. É assim que você evita que ele leia acidentalmente credenciais que não possuem leitura comercial. Definir NL_GITHUB_TOKEN= e o agente irá buscá-lo. Qualquer outra coisa em sua concha permanece fora de alcance.

Etapa 4: dê ao agente uma primeira tarefa pequena e com escopo definido

Na interface de chat, informe ao agente a que ele tem acesso e peça para confirmar a conectividade. A primeira coisa que ele fará é criar uma ferramenta de investigação, cinco ou dez linhas de JavaScript que atinja o ponto closing do limite de taxa. Quando isso funcionar, atribua a tarefa actual: “encontre todos os arquivos no monorepo de propriedade de @datarobot/cloud-operações no DR_CODEOWNERS arquivo.”

Converse com o Agente NL

O primeiro passo do agente foi criar uma ferramenta chamada getCodeownersFiles. Cerca de vinte linhas. Ele percorreu o repositório por meio da API GitHub, analisado CODEOWNERS padrões e retornou uma lista.

Ele executou a ferramenta, recuperou a lista e então, sem ser solicitado, escreveu uma segunda ferramenta para persistir a lista como um arquivo. cloud-ops-inventory.txt arquivo em seu diretório. O agente descobriu por si mesmo que um arquivo constitui uma memória de trabalho perfeitamente boa. O padrão de ferramentas como memória emergente saiu do tempo de execução sem que ninguém o projetasse.

Etapa 5: Adicionar um immediate do sistema de disciplina de escopo

O comportamento padrão do agente é fazer demais. Antes de permitir que ele proponha alterações no repositório, forneça um immediate do sistema que descreva uma linha rígida em torno do que ele pode modificar:

O CODEOWNERS diretrizes apenas atualizam CODEOWNERS referências. Não modifique o código actual em execução. Apenas PRs abertos. Esteja seguro.

Essa frase impede o agente de refatorar o código “de forma útil” enquanto ele está no arquivo. A disciplina de escopo é mais importante do que a capacidade quando você concede a um agente acesso de gravação a um repositório de produção. A partir daí, o agente analisou o inventário arquivo por arquivo, propondo reatribuições onde o histórico do git tornava o novo proprietário óbvio e sinalizando o restante para revisão humana. A etapa de criação de relações públicas permaneceu em andamento com um revisor humano, que é a resposta certa para uma primeira passagem.

Etapa 6: bloquear o agente no modo somente leitura

Depois que o agente tiver criado as ferramentas que funcionam, mude o tempo de execução para o modo somente leitura. O agente ainda pode chamar suas ferramentas existentes, ler arquivos e executar o JavaScript que já escreveu. Não pode escrever novas ferramentas. Ele não pode reescrever o immediate do sistema. O agente agora é um artefato.

O instruments.js e o immediate do sistema de redução são a entrega completa. Coloque-os no registro e workshop do DataRobot como um modelo personalizado e você terá um agente governado e implantável com uma superfície de código totalmente visível. A fase de exploração precisa de acesso de gravação. A fase de produção não.

A sessão foi agendada como curinga. Tornou-se a discussão interna mais limpa que já tivemos sobre o que uma plataforma de agente deveria oferecer. Três lições.

Contexto é o que você envia. Uma especificação completa e bem estruturada para uma API externa supera uma ferramenta enrolada manualmente e envolvida na mesma API, porque a especificação preserva a opcionalidade que o wrapper já descartou. A implicação é desconfortável para as equipes de produto: a coisa de maior aproveitamento que você pode oferecer para a period da agência não é um novo SDK ou um novo registro de ferramenta. É uma excelente documentação de cópia como redução. O botão “copiar página como redução” que alguns projetos de código aberto começaram a adicionar não é um floreio de UX. É uma concessão deliberada ao facto de o leitor ser, cada vez mais, um agente. Torne seus documentos carregáveis. Publique suas especificações OpenAPI. Mantenha-os atualizados. Os agentes cuidarão disso a partir daí.

A sandbox é o desbloqueio, não o loop. A maioria das estruturas de agentes compete em orquestração, memória e planejamento. O que determine se o padrão NL pode ser entregue não é nada disso. É se você pode dar ao agente um native para executar código em que você realmente confia. O modelo de permissão do Deno faz a maior parte do trabalho aqui. Tipos de arquivos restritos, diretórios restritos, saída de rede restrita, env vars prefixados. Nada disso é exótico. Tudo isso precisa estar em vigor antes que o ciclo do agente seja importante.

O melhor contexto da categoria supera as melhores estruturas da categoria. Os agentes que atuam na produção não são os que têm a orquestração mais elaborada. Eles são aqueles que possuem a documentação mais limpa, carregável e amigável ao agente. Cada minuto gasto em melhores descontos vale dez minutos gastos em uma estrutura de agente mais sofisticada. A maioria das equipes tem as prioridades invertidas e o custo aparece na forma de agentes que parecem impressionantes nas demonstrações e falham na implantação.

A implicação para a plataforma DataRobot é direta. O registro e o workshop já hospedam modelos customizados. A próxima etapa pure é um fluxo de trabalho de modelo personalizado que precisa apenas de um instruments.js e um immediate do sistema de markdown, com o tempo de execução NL fornecendo a sandbox abaixo. Nenhuma configuração de ambiente. O agente monta o que precisa a partir de uma especificação que você aponta, executa-o dentro de um limite que sua equipe de segurança já assinou e envia como um artefato congelado quando funciona.

O Construct Membership funciona semanalmente. Cada sessão leva um motorista voluntário, uma hora e uma ideia votada pelo público. O formato é deliberadamente não ensaiado: construímos ao vivo, a construção quebra ao vivo e consertamos ao vivo. Se você está desenvolvendo o DataRobot ou pensando em agentes prontos para empresas e quer inspiração, esta série é para isso.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *