A Equipe Astro construiu secretamente a melhor estrutura de agentes de IA

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

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.

Key Takeaway

O Flu simplifica a criação e a implantação de agentes de IA programáveis ao integrar nativamente habilidades, ferramentas e uma camada de sandbox em memória baseada em TypeScript, permitindo a execução de milhares de agentes de forma eficiente e de baixo custo.

Highlights

  • O Flu é uma estrutura de código aberto em TypeScript projetada para tornar a criação de agentes de IA programável e implantável em qualquer lugar.

  • A execução de sandboxes na memória usando o 'just Bash' da Vercel elimina a necessidade de inicializar contêineres Linux para cada tarefa, reduzindo drasticamente os custos.

  • Projetos Flu podem ser implantados em ambientes Node.js (via Hono) ou Cloudflare Workers (usando Durable Objects para persistência).

  • A estrutura diferencia-se de outras por suportar fluxos de trabalho autônomos que não exigem a intervenção humana, além de permitir interações similares ao Claude Code.

  • A CLI do Flu utiliza o Vite internamente para compilar projetos e gerenciar instâncias únicas de agentes através de IDs de instância.

Timeline

Origem e Proposta do Flu

  • A equipe do Astro criou o Flu para executar fluxos de trabalho de IA internamente no repositório GitHub do projeto.
  • A estrutura oferece suporte nativo para ferramentas personalizadas, servidores MCP, leitura de arquivos e habilidades reutilizáveis.
  • Diferente do Cloud Code, o Flu não exige a presença de um humano para operar os agentes.

Desenvolvido inicialmente como uma ferramenta interna, o Flu foi arquitetado para envolver o núcleo de agentes Pi, suportando fluxos de trabalho específicos que não necessitam de supervisão humana constante. A ferramenta abstrai a complexidade do desenvolvimento de agentes, permitindo a implementação de funcionalidades robustas em poucas linhas de código.

Configuração e Desenvolvimento

  • A instalação exige o runtime do Flu e a CLI para compilação.
  • O arquivo flu.config.ts define o alvo da implantação, permitindo escolher entre Node ou Cloudflare.
  • A execução de um agente básico é realizada através do comando 'flu connect', atribuindo um ID de instância para persistência.

O processo de desenvolvimento inicia-se com a configuração do ambiente, onde o desenvolvedor escolhe entre Node.js (via servidor HTTP Hono) ou Cloudflare (com objetos duráveis). A estrutura do projeto organiza agentes e fluxos de trabalho de forma modular, permitindo a definição clara de instruções de sistema e comportamento do modelo.

Fluxos de Trabalho e Habilidades

  • Fluxos de trabalho são definidos em arquivos dedicados e exportam uma função 'run' para inicialização.
  • Agentes operam em uma sandbox isolada por padrão, podendo ser configurados para acessar o sistema de arquivos local.
  • A estrutura suporta a exposição de agentes via chamadas POST HTTP, permitindo a integração com sistemas externos.

Para cenários complexos, o Flu permite a criação de habilidades personalizadas que podem envolver scripts Python ou outras ferramentas. O isolamento de segurança pode ser ajustado permitindo ou restringindo o acesso ao sistema local, enquanto a integração via middleware facilita a exposição de fluxos de trabalho como serviços web operáveis via requisições curl.

Diferenciais Técnicos e Eficiência

  • O Flu prioriza uma abordagem baseada em estrutura, ao contrário de processos granulares manuais exigidos por outros SDKs.
  • Sandboxes são alimentadas pelo 'just Bash' da Vercel, permitindo a execução de comandos grep e leitura na memória.
  • A execução na memória evita o custo de inicialização de contêineres Linux, permitindo a escalabilidade para milhares de agentes.

A principal vantagem competitiva do Flu reside na gestão inteligente de sandboxes. Ao reimplementar Bash em TypeScript, o sistema contorna a latência e o custo de inicialização de contêineres tradicionais, tornando a execução de agentes altamente eficiente para tarefas de alto volume.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video