O GitHub não foi feito para agentes de IA (então a Cloudflare criou o seu próprio)

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00Então, a Cloudflare está trabalhando em algo chamado Artifacts, um sistema de arquivos distribuído que
00:00:05é compatível com Git e foi criado primeiro para agentes, e permite criar, ramificar
00:00:10ou excluir milhares de repositórios programaticamente, não importa o tamanho, para coisas como
00:00:15revisões de PR em paralelo, refatoração automatizada de grandes bases de código e espaços de trabalho de agentes por sessão.
00:00:20Mas, como isso é construído sobre objetos duráveis, significa que você tem que usar JavaScript
00:00:25e não pode ter acesso a um comando de shell para executar o Git?
00:00:28Inscreva-se e vamos descobrir!
00:00:33O GitHub foi criado para humanos, não para agentes, o que significa que eles não precisam de nenhum dos aspectos
00:00:37sociais, como seguidores ou iniciar discussões, mas os agentes são muito bons com Git, isso está nos
00:00:42dados de treinamento deles.
00:00:43Então, a Cloudflare criou uma implementação básica de Git em Zig, compilou para Wasm e colocou em um
00:00:49objeto durável para atuar como um servidor Git.
00:00:52Enquanto isso, o próprio cliente pode ser o que você quiser, como um Worker usando isomorphic-git
00:00:57dentro de um Worker ou usando o protocolo Git e até mesmo o cliente HTTP, para que você possa se conectar
00:01:03a ele para coisas que não usam JavaScript.
00:01:05Infelizmente, no momento desta gravação, não tenho acesso ao Artifacts, já que está
00:01:10em versão beta privada, mas há muita documentação sobre isso, o que significa que posso criar uma demonstração com
00:01:15código dessa documentação e, talvez, quando for lançado em versão beta pública, você possa verificar
00:01:19se o meu código realmente funciona.
00:01:20Então, o que vamos fazer é construir uma ferramenta que recebe uma lista de tarefas para um repositório específico
00:01:24e executa todas essas tarefas em paralelo, ramificando o repositório várias vezes e executando
00:01:29cada tarefa em seu próprio artefato em um repositório na nuvem, em um objeto durável.
00:01:34Vamos ver como isso funciona.
00:01:35Comecei seguindo a documentação do Artifacts em "primeiros passos para Workers",
00:01:39então usei este comando, e este texto aqui após o comando é apenas o nome do projeto
00:01:44e pode ser qualquer um.
00:01:45Segui todos esses passos, o que me deu este código básico de Worker.
00:01:49E os Workers para Artifacts são um pouco mais performáticos do que usar a API REST, já que eles
00:01:53fazem menos idas e vindas.
00:01:55Depois disso, você precisará adicionar as vinculações do Artifacts ao seu arquivo wrangler.jsonc ou toml,
00:02:00e então executar os tipos novamente.
00:02:02A documentação aqui foca em criar um novo repositório, então usa a vinculação Artifacts
00:02:07com o método "create" e um nome de repositório.
00:02:09Ele cria o nome, o que fornece o token e o remoto.
00:02:13Então, o remoto é o local do artefato, e o token, ou token de autenticação, também é necessário
00:02:17para te dar acesso a ele.
00:02:18E, claro, você pode usar o protocolo Git usando o remoto e o token para interagir
00:02:22com seu artefato.
00:02:23Mas vamos fazer algo diferente.
00:02:25Em vez de criar um novo repositório em um objeto durável de Artifacts, primeiro vamos
00:02:29verificar se existe um chamado "baseline".
00:02:31Então, se não existir, o que faremos é importar um repositório Git e então eu
00:02:35dei a ele o nome de "baseline" e retornei esse valor aqui.
00:02:39E, claro, se você verificar a documentação da API para a vinculação de Workers, verá mais
00:02:43parâmetros que podem ser adicionados ao método "import".
00:02:45Mas então, depois de termos retornado o repositório existente, podemos fazer coisas bem legais
00:02:49com ele.
00:02:50Então, aqui estão as tarefas que eu gostaria de fazer no repositório, e é claro que eu as codifiquei
00:02:53de forma fixa, mas elas podem ser adicionadas em uma entrada ou algum tipo de interface.
00:02:56E aqui dentro da exportação padrão do Worker, tenho o SDK da Anthropic, bem como meu
00:03:00repositório "baseline".
00:03:02E vou percorrer todas as tarefas e, aqui, estou ramificando o repositório com
00:03:06este nome.
00:03:07Então temos esta função, que explicarei mais tarde, mas que executa a tarefa dentro
00:03:10do repositório ramificado e faz o agente realizar a alteração, retornando o resumo do agente.
00:03:15Então, a última coisa que o agente disse, e depois de cada loop for, retorno essas
00:03:19informações.
00:03:20Vou colocar o nome da tarefa, o nome da ramificação, o remoto e o token
00:03:23para que possamos acessá-lo sempre que quisermos verificar se a alteração foi boa e o resumo
00:03:27do que foi feito.
00:03:28Então, no momento, a vinculação de Workers não oferece a capacidade de dar pull, commit e push.
00:03:33Portanto, no meu código, tive que fazer isso com o fetch isomórfico e usar um sistema de armazenamento
00:03:38em memória para armazenar as alterações temporariamente.
00:03:39Então, de volta ao código do agente, estamos criando nosso sistema de arquivos em memória, e depois temos
00:03:43um prompt de sistema que diz ao agente para fazer as alterações relevantes e então realizar o commit
00:03:47do código.
00:03:48Então, vamos clonar o repositório ramificado usando o remoto que foi fornecido, bem como
00:03:51o token.
00:03:52E então definimos algumas ferramentas, como leitura, escrita e commit.
00:03:55Aqui selecionamos o modelo e damos ao nosso modelo um prompt de sistema, e então passamos a tarefa
00:03:59como uma mensagem do usuário.
00:04:00E o resto do código é o seu loop agentic padrão.
00:04:02Então, se houver uma chamada de ferramenta, pare o raciocínio e execute a chamada da ferramenta; no nosso caso, ler, escrever
00:04:07ou fazer commit, que também faz o push do código após o commit.
00:04:10E o benefício de ter um artefato é que todo esse código existirá no objeto durável,
00:04:14armazenado no banco de dados SQLite do objeto, e se o objeto durável cair, a informação
00:04:20pode ser recuperada do banco de dados SQLite a qualquer momento, caso ele volte a funcionar.
00:04:23E então, aqui abaixo, continuamos o raciocínio do modelo após a chamada da ferramenta, antes de retornar
00:04:27a última mensagem do modelo.
00:04:29Sei que é muito difícil visualizar tudo isso acontecendo sem que eu consiga
00:04:32executar o código, mas espero que você possa ver o que pode ser feito com os artefatos e
00:04:37seu potencial total.
00:04:38Imagine se você pudesse ter uma interface para ver todas as alterações que estão acontecendo nesses artefatos
00:04:42e pudesse se comunicar com agentes individuais ou com um único agente orquestrador para fazer alterações
00:04:46nos diferentes repositórios.
00:04:48Falando em um agente orquestrador, poderíamos ter um único Worker que poderia orquestrar
00:04:52todas essas alterações acontecendo e mesclá-las ao repositório principal depois que um agente revisor
00:04:56tivesse analisado o código.
00:04:57Podemos até combinar artefatos com Workers dinâmicos para que os agentes possam executar o código que
00:05:02alteraram, para ver se funciona.
00:05:03E se não for um código JavaScript, podemos usar os sandboxes da Cloudflare para executar qualquer linguagem
00:05:07que quisermos e até mesmo executar comandos de shell.
00:05:09Sem mencionar que existe a opção de navegador da Cloudflare, que executa um navegador Puppeteer para o
00:05:13modelo examinar e ver se o código que ele implementou está correto, caso seja uma alteração de front-end.
00:05:18Honestamente, me diverti muito pensando nas possibilidades dos artefatos, embora
00:05:21eu ainda não consiga executá-los.
00:05:22Mas uma coisa que notei é que não existe um comando "git diff".
00:05:25Ele não está exposto na API de vinculação de Workers ou no isomorphic-git.
00:05:30Então, talvez a única maneira de fazer um "git diff" seja através do protocolo Git, ou eles podem adicioná-lo no
00:05:35futuro.
00:05:36De qualquer forma, agora, se você quiser fazer isso sem usar o protocolo Git, acho que você poderia usar
00:05:40o isomorphic-git usando "git log" para encontrar a árvore Git, percorrer e descer a árvore para
00:05:45comparar as diferenças.
00:05:46Independentemente disso, acho que este é um lançamento muito legal da Cloudflare.
00:05:50E embora existam outras ferramentas de sistema de arquivos como arquivos S3, ZeroFS e JuiceFS que
00:05:55já existem, não acho que essas opções sejam compatíveis com Git, o que é um recurso muito legal
00:05:59e mais amigável aos agentes.
00:06:01Falando em S3, se você já quis executá-lo localmente na sua máquina, confira
00:06:05este vídeo do Josh que explica exatamente como fazer isso.

Key Takeaway

O sistema Artifacts da Cloudflare oferece uma infraestrutura de armazenamento compatível com Git otimizada para agentes de IA, permitindo automação de larga escala como refatoração e revisões paralelas de código em ambientes isolados.

Highlights

O Artifacts é um sistema de arquivos distribuído da Cloudflare, construído sobre objetos duráveis, que oferece compatibilidade nativa com Git.

A implementação do servidor Git no Artifacts utiliza uma versão básica do Git em Zig, compilada para Wasm.

O sistema permite a criação e ramificação programática de milhares de repositórios, facilitando a execução de tarefas em paralelo.

Agentes de IA podem interagir com os artefatos usando o protocolo Git ou clientes HTTP para operações de leitura, escrita e commit.

Dados persistentes no Artifacts residem em um banco de dados SQLite dentro do objeto durável, permitindo recuperação em caso de falha.

A arquitetura possibilita a integração com navegadores Puppeteer e sandboxes da Cloudflare para testes automatizados e execução de comandos de shell.

Timeline

Arquitetura e propósito do Artifacts

  • O Artifacts é um sistema de arquivos distribuído criado especificamente para automação por agentes de IA.
  • A estrutura é construída sobre objetos duráveis da Cloudflare, utilizando Zig compilado para Wasm como servidor Git.
  • O sistema dispensa aspectos sociais do GitHub, focando em operações programáticas de repositórios.

Diferente do GitHub, projetado para humanos, o Artifacts foca nas necessidades de agentes. Ele suporta a criação, ramificação e exclusão de milhares de repositórios simultaneamente. O uso de objetos duráveis garante que os dados sejam persistentes e recuperáveis a partir de bancos SQLite internos.

Implementação e fluxo de trabalho do agente

  • A configuração do Worker envolve vinculações de Artifacts com métodos de criação e importação de repositórios.
  • A ausência de comandos pull/commit nativos na API exige o uso de fetch isomórfico e armazenamento em memória temporário.
  • O loop de execução utiliza modelos de linguagem para ler, modificar e realizar push do código automaticamente.

O processo começa com a verificação de um repositório 'baseline' ou sua importação via API. Tarefas específicas são distribuídas em ramificações paralelas, onde agentes realizam alterações e fazem commits. O estado é mantido dentro do objeto durável, mitigando perdas de informação caso o processo seja interrompido.

Possibilidades futuras e limitações

  • Agentes orquestradores podem coordenar alterações em vários artefatos antes de mesclá-los ao repositório principal.
  • A integração com navegadores Puppeteer permite que modelos verifiquem o código implementado visualmente.
  • A falta atual de um comando 'git diff' na API de vinculação pode ser contornada percorrendo a árvore do Git com isomorphic-git.

O ecossistema Cloudflare expande o potencial dos artefatos ao permitir execução de código em sandboxes dinâmicos. Embora falte um comando diff direto, a estrutura do Git permite que o modelo compare diferenças manualmente. Esta abordagem difere de sistemas como S3 ou JuiceFS por manter a compatibilidade nativa com o ecossistema Git.

Community Posts

View all posts