A Equipe Astro construiu secretamente a melhor estrutura de agentes de IA
BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology
Transcript
00:00:00Este é o Flu, uma estrutura de código aberto para criar agentes de IA, feita pela equipe por trás do Astro,
00:00:04que basicamente pega o que o Cloud Code faz como uma estrutura e a torna 100% programável.
00:00:09Então, coisas como habilidades, ferramentas e sandboxes são suportadas nativamente,
00:00:13para que você possa criar uma estrutura de agente completa e implantá-la em qualquer lugar com apenas algumas linhas de TypeScript.
00:00:19Mas por que a equipe do Astro decidiu construir uma estrutura de agentes em primeiro lugar?
00:00:23E qual é aquele truque legal que você pode fazer com sandboxes que permite executar agentes de forma muito mais barata?
00:00:28Inscreva-se e vamos descobrir.
00:00:33O Flu foi construído pelo cofundador do Astro e, curiosamente,
00:00:36eles não pretendiam construir uma estrutura de agentes.
00:00:39Fred e a equipe construíram o Flu para executar fluxos de trabalho de IA dentro do próprio repositório GitHub do Astro.
00:00:44Mas quando outro engenheiro da Amplitude colocou as mãos nele,
00:00:47a equipe percebeu que esta é uma ferramenta à qual qualquer agente teria acesso,
00:00:51o que na verdade faz sentido se você pensar bem.
00:00:53Digo, vamos dar uma olhada no Cloud Code, por exemplo.
00:00:55Por baixo do terminal ou da interface de chat da IU existe uma estrutura,
00:00:58portanto, ele suporta ferramentas personalizadas de servidores MCP, lê arquivos Cloud MD,
00:01:02tem suporte a sandbox e suporte para habilidades reutilizáveis.
00:01:05Isso e muito, muito mais permite que o modelo faça um trabalho real,
00:01:08o que o Flu pode lhe oferecer em apenas algumas linhas de código.
00:01:11Ele faz isso sendo construído sobre o Pi, que é uma estrutura de agente mínima por si só,
00:01:16a mesma coisa sobre a qual o OpenClaw é construído,
00:01:18e envolve uma estrutura real em torno do núcleo do agente do Pi.
00:01:21O Flu na verdade faz algo inteligente com sandboxes para ajudar você a executá-los de forma muito mais barata,
00:01:25sobre o qual falarei um pouco mais tarde.
00:01:26Mas se voltarmos ao exemplo do Cloud Code,
00:01:28ele pressupõe que há um humano no volante dirigindo o agente,
00:01:31o que geralmente é o caso.
00:01:33Mas o Flu não tem essa mesma limitação.
00:01:35Com o Flu, você pode criar agentes como o Cloud Code que exigem interação humana,
00:01:38mas você também pode criar fluxos de trabalho que não exigem um humano,
00:01:42o que é útil para processos agenticos que são muito específicos
00:01:44e não precisam mudar tanto.
00:01:46Agora, você pode estar pensando,
00:01:47isso parece muito semelhante a algo como o Mastra ou o SDK de IA da Vercel,
00:01:52e falarei sobre as diferenças um pouco mais tarde.
00:01:54Na verdade, as diferenças ficarão muito mais claras se fizermos uma demonstração simples.
00:01:57Então vamos em frente e fazer isso.
00:01:58Para começar, você precisará instalar o tempo de execução do Flu,
00:02:01que é onde seu agente importa e roda,
00:02:04e então você terá que instalar a CLI do Flu,
00:02:06que compila e serve seu agente.
00:02:08Você também precisará configurar uma chave de API de um dos muitos provedores suportados pelo Pi.
00:02:13Para esta demonstração, porém, vou usar a Anthropic,
00:02:15e então você terá que executar flu init com os alvos,
00:02:18que cria um arquivo de configuração flu para que a CLI saiba como empacotar seu projeto.
00:02:22Você pode escolher entre Node ou Cloudflare,
00:02:24e falarei sobre as diferenças em um segundo.
00:02:26Mas já fiz esses passos,
00:02:27então vamos dar uma olhada em como esses arquivos se parecem.
00:02:30Aqui estão os arquivos típicos que você obtém de um projeto bun em branco,
00:02:33e alguns desses arquivos nem são usados.
00:02:35Se dermos uma olhada no index.ts, isso não será usado para nada.
00:02:38Nem o arquivo readme,
00:02:39mas o que realmente será usado é este arquivo flu config.ts,
00:02:42que usa V nos bastidores,
00:02:45o CI para usar Node em vez de Cloudflare.
00:02:47E a diferença é que o Node usa um servidor HTTP sobre o HONO,
00:02:51e o Cloudflare implantará seu projeto em um worker
00:02:53com um objeto durável para persistência.
00:02:55Agora, depois de concluir essas etapas,
00:02:56você terá que criar um novo diretório,
00:02:57seja de agentes ou de fluxos de trabalho.
00:03:00Passaremos pelos fluxos de trabalho um pouco mais tarde,
00:03:01mas por enquanto, comecei com um agente simples,
00:03:03que contém o código na documentação.
00:03:05E isso basicamente define um modelo
00:03:06e adiciona algumas instruções,
00:03:08que são anexadas ao prompt do sistema.
00:03:09E é isso.
00:03:10Isso é tudo que você precisa para criar um agente flu básico.
00:03:13Vamos vê-lo em ação.
00:03:14Para executá-lo, podemos usar flu connect,
00:03:15que compila e executa o agente.
00:03:17E estamos combinando o nome do nosso arquivo TS,
00:03:20que é hello world,
00:03:21antes de dar a ele um ID de instância,
00:03:22que pode ser qualquer coisa.
00:03:24Então pode até ser um local um, dois, três.
00:03:25Mas isso é útil se você tiver muitos agentes rodando
00:03:27e cada agente puder ter seu próprio ID exclusivo.
00:03:29Isso também é útil para implantar no Cloudflare
00:03:31porque este ID mapeia para sua própria instância de objeto durável.
00:03:35Então, agora, se pressionarmos enter,
00:03:36podemos ver que ele carrega a configuração,
00:03:38lê o alvo e executa o agente encontrado.
00:03:40Agora não temos um arquivo de agente MD,
00:03:42mas se tivéssemos, ele usaria isso.
00:03:43E agora ele compilou os agentes para este arquivo server.mjs
00:03:46e nos deu a capacidade de inserir um prompt.
00:03:48Então posso dizer algo como: conte-me uma piada aleatória.
00:03:50E aqui podemos ver que o agente começa a pensar,
00:03:52ele responde, transmitindo seu ciclo de vida.
00:03:54Então ele me conta uma piada e me pede outra.
00:03:57Mas então, abaixo, ele imprime o JSON final,
00:03:59que compreende o texto,
00:04:00bem como alguns tokens de entrada e saída,
00:04:02o custo de todo o prompt
00:04:03e o modelo que foi usado.
00:04:05Claro, poderíamos continuar falando com este agente,
00:04:06mas, por enquanto, vou desligá-lo.
00:04:08E esse é um exemplo de como construir um agente básico com Flu.
00:04:11Vamos fazer algo um pouco mais complicado.
00:04:13Vamos construir um fluxo de trabalho para ajudar a gerar alguns títulos
00:04:15para este vídeo do YouTube.
00:04:16E para fazer isso, novamente, estamos criando um agente
00:04:18com instruções mais complexas.
00:04:20E desta vez, na verdade, temos uma habilidade.
00:04:23Portanto, a habilidade é importada aqui com um atributo de importação de habilidade.
00:04:26E aqui, observe que não estamos mais exportando o agente em si,
00:04:29mas desta vez estamos exportando uma função chamada run.
00:04:31E o que isso faz é inicializar o agente
00:04:34para o fluxo de trabalho e, em seguida, abre uma sessão na estrutura.
00:04:36Agora, o que acontece a seguir é bastante interessante.
00:04:38Então, aqui, o que está acontecendo é que estamos obtendo o caminho
00:04:41do payload, que foi definido aqui
00:04:43neste tipo de contexto flux.
00:04:44Então, se mudássemos o nome aqui para arquivo,
00:04:46obteríamos um erro de tipo.
00:04:47E aqui está obtendo o arquivo,
00:04:49que chamei de script,
00:04:50e passando isso como um prompt.
00:04:52Portanto, tudo isso fará sentido
00:04:53se dermos uma olhada nas instruções aqui,
00:04:55onde estamos dizendo para ele estudar o script
00:04:57e me dar 10 títulos clickbait para o YouTube
00:04:59usando a habilidade de pontuação de título para classificá-los.
00:05:01Então vamos ver se isso funciona.
00:05:02Mas antes de fazermos isso,
00:05:03quero deixar óbvio que os fluxos de trabalho
00:05:04estão no diretório de fluxos de trabalho
00:05:06e as habilidades estão no diretório de habilidades
00:05:08a partir da raiz do projeto.
00:05:09E para executar este fluxo de trabalho,
00:05:10precisamos executar o flu run com o nome do nosso fluxo de trabalho.
00:05:13No meu caso, é YT titles,
00:05:14seguido pelo alvo e pelo payload JSON,
00:05:16que é o caminho para este script.
00:05:18Então, se pressionarmos enter,
00:05:19veremos que obtemos um ID de fluxo de trabalho.
00:05:21E aqui ele está fazendo algo um pouco estranho.
00:05:23Ele está realmente procurando pela habilidade,
00:05:25mesmo que eu a tenha especificado anteriormente.
00:05:27E agora, neste raciocínio,
00:05:27ele está me dizendo que não há arquivos no sistema de arquivos.
00:05:30Por que ele está fazendo isso?
00:05:31Então, por padrão,
00:05:32o flu executa agentes em uma sandbox usando apenas bash.
00:05:35Tudo a que ele tem acesso é a descrição da habilidade,
00:05:37que foi registrada aqui,
00:05:39mas ele não tem acesso a nenhum desses arquivos
00:05:42relacionados à habilidade.
00:05:43E a habilidade em si, se dermos uma olhada nela,
00:05:44na verdade executa um script Python usando bash
00:05:47para obter uma pontuação precisa no estilo vidIQ
00:05:50para um título do YouTube.
00:05:51Então, para corrigir isso,
00:05:52vou importar local do flu runtime node,
00:05:54que diz ao flu para executar o agente no meu sistema local
00:05:57para que ele tenha acesso a todos os meus arquivos
00:05:59e possa executar scripts Python.
00:06:01Se você se preocupa com segurança,
00:06:02explicarei como você pode contornar isso
00:06:03mais tarde no vídeo.
00:06:04Mas também vamos mudar
00:06:05o diretório de trabalho atual para a habilidade
00:06:07dentro do diretório de habilidades deste projeto.
00:06:10Para que o flu não precise procurar
00:06:11pelos arquivos exatos de que precisa.
00:06:13E agora, quando executo este fluxo de trabalho,
00:06:15podemos ver que o flu lê imediatamente o arquivo MD da habilidade
00:06:17e é capaz de gerar os 10 títulos clickbait
00:06:20com uma pontuação para cada um deles.
00:06:21Agora, se você não quiser dar ao seu agente
00:06:22ou fluxo de trabalho acesso ao seu sistema local,
00:06:25o que você poderia fazer em vez disso
00:06:26é criar uma ferramenta personalizada a partir do arquivo Python.
00:06:28Então, aqui estou carregando o arquivo Python na habilidade
00:06:30e criando uma ferramenta chamada score title,
00:06:33que usa value bots para verificar os parâmetros
00:06:35e, em seguida, executa o script Python.
00:06:37Então podemos registrar essa ferramenta dentro do nosso agente
00:06:40e tudo deve funcionar conforme o esperado.
00:06:42Mas agora vamos voltar ao projeto anterior
00:06:44e dizer que queremos acioná-lo com base em uma chamada POST HTTP.
00:06:47Bem, há apenas uma coisa que precisamos fazer para habilitar isso.
00:06:50E isso é simplesmente adicionar o middleware de raiz.
00:06:52Agora, tudo o que precisamos fazer é construir o projeto flu,
00:06:54especificar nosso alvo, uma porta opcional,
00:06:56e então executar nosso arquivo de servidor.
00:06:58E agora ele está escutando na porta que especificamos.
00:07:00Observe que o arquivo server.js
00:07:01incorpora quaisquer agentes ou fluxos de trabalho que tenhamos.
00:07:03Então só precisamos deste arquivo
00:07:05se quiséssemos implantá-lo em qualquer lugar que suporte Node.js.
00:07:07Agora posso executar o curl com o método POST
00:07:09para a porta que foi especificada,
00:07:11selecionar um fluxo de trabalho e fornecer alguns dados,
00:07:13o que nos dá um ID de fluxo de trabalho.
00:07:14E então, se fizermos curl para fluxos de trabalho,
00:07:16especificando nosso ID de fluxo de trabalho específico
00:07:18e canalizando para o JQ apenas para facilitar a leitura,
00:07:21podemos ver informações sobre nosso fluxo de trabalho
00:07:23e um resumo dos resultados.
00:07:25Claro, o Flu suporta WebSockets em vez de HTTP
00:07:27se você quisesse transmitir as informações do fluxo de trabalho.
00:07:29Agora, como sempre, há tantos recursos que o Flu tem
00:07:31que eu não tive tempo de abordar,
00:07:33como perfis de agente para agentes reutilizáveis,
00:07:35suporte para Daytona, sandboxes Cloudflare,
00:07:37ou qualquer outra sandbox apenas usando uma URL,
00:07:40adicionar rotas personalizadas para autenticação ou verificações de integridade,
00:07:42e até mesmo suporte para sub-agentes.
00:07:44Mas como isso se compara
00:07:45a outra estrutura de agente de IA de código aberto como o Mastra?
00:07:48Bem, a última vez que usei o Mastra
00:07:49foi quando fiz este vídeo,
00:07:50que você pode pausar este vídeo e ir assistir
00:07:52se quiser uma atualização sobre o que é.
00:07:54Mas quando eu o usei,
00:07:55você ainda tinha que configurar manualmente as sessões,
00:07:58a memória, a sandbox e o carregamento de ferramentas.
00:08:01Era muito mais um processo granular passo a passo,
00:08:03e não tenho certeza se isso mudou
00:08:05para se tornar mais simples,
00:08:06mas acho que a abordagem que o Flu está adotando
00:08:08é completamente diferente.
00:08:10É mais uma abordagem focada na estrutura
00:08:11e pressupõe que você usará
00:08:13esses recursos desde o início.
00:08:14Falando em sandboxes,
00:08:16o Flu na verdade faz algo muito inteligente com elas.
00:08:18Então, cada agente recebe sua própria sandbox por padrão,
00:08:21o que expliquei anteriormente na demonstração,
00:08:22mas essa sandbox é alimentada pelo just Bash da Vercel,
00:08:25que reimplementa o Bash em TypeScript.
00:08:27Portanto, ele executa essa sandbox na memória
00:08:29em vez de um contêiner real,
00:08:31o que significa que você obtém acesso a ferramentas grep, glob e de leitura
00:08:34sem pagar por um contêiner toda vez,
00:08:35que precisa inicializar toda uma máquina Linux
00:08:38antes de você poder fazer qualquer coisa.
00:08:40Isso significa que o Flu executa milhares de agentes
00:08:41por quase nada,
00:08:43e você pode optar por um contêiner real
00:08:44apenas quando precisar de um.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video