L'équipe Astro a secrètement construit le meilleur framework d'agent IA

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

Transcript

00:00:00Voici Flu, un framework open source pour créer des agents IA, conçu par l'équipe derrière Astro,
00:00:04qui reprend essentiellement ce que fait Claude Code comme harnais pour le rendre 100% programmable.
00:00:09Des fonctionnalités comme les compétences, les outils et les bacs à sable sont donc supportées nativement,
00:00:13pour que vous puissiez créer un harnais d'agent complet et le déployer n'importe où en quelques lignes de TypeScript.
00:00:19Mais pourquoi l'équipe d'Astro a-t-elle décidé de créer un framework de harnais d'agent en premier lieu ?
00:00:23Et quel est cette astuce géniale avec les bacs à sable qui vous permet de faire tourner les agents à moindre coût ?
00:00:28Abonnez-vous et découvrons-le.
00:00:33Flu a été créé par le cofondateur d'Astro, et assez curieusement,
00:00:36ils ne cherchaient pas à construire un framework de harnais d'agent.
00:00:39Fred et son équipe ont construit Flu pour exécuter des workflows IA au sein même du dépôt GitHub d'Astro.
00:00:44Mais lorsqu'un autre ingénieur d'Amplitude l'a eu entre les mains,
00:00:47l'équipe a réalisé qu'il s'agissait d'un outil auquel tous les agents pourraient avoir accès,
00:00:51ce qui est logique quand on y pense.
00:00:53Je veux dire, prenons Claude Code, par exemple.
00:00:55Sous l'interface de chat du terminal ou de l'UI se trouve un harnais,
00:00:58il supporte donc des outils personnalisés depuis des serveurs MCP, il lit les fichiers Claude MD,
00:01:02il possède un support pour les bacs à sable et pour les compétences réutilisables.
00:01:05Cela, et bien plus encore, permet au modèle d'accomplir un vrai travail,
00:01:08que Flu peut vous offrir en quelques lignes de code.
00:01:11Il le fait en étant construit au-dessus de Pi, qui est lui-même un harnais d'agent minimal,
00:01:16la même base sur laquelle repose OpenClaw,
00:01:18et il enveloppe le cœur d'agent de Pi dans un véritable framework.
00:01:21Flu fait quelque chose d'astucieux avec les bacs à sable pour vous aider à les exécuter à moindre coût,
00:01:25ce dont je parlerai un peu plus tard.
00:01:26Mais si l'on revient à l'exemple de Claude Code,
00:01:28il suppose qu'il y a un humain aux commandes de l'agent,
00:01:31ce qui est généralement le cas.
00:01:33Mais Flu n'a pas cette même limitation.
00:01:35Avec Flu, vous pouvez créer des agents comme Claude Code qui nécessitent une intervention humaine,
00:01:38mais vous pouvez aussi créer des workflows qui ne nécessitent aucun humain,
00:01:42ce qui est utile pour des processus agentiques très spécifiques
00:01:44et qui n'ont pas besoin de beaucoup changer.
00:01:46Maintenant, vous vous dites peut-être,
00:01:47cela ressemble beaucoup à Mastra ou au SDK IA de Vercel,
00:01:52et je parlerai des différences un peu plus tard.
00:01:54En fait, les différences seront bien plus claires si nous faisons une petite démo.
00:01:57Alors allons-y.
00:01:58Pour commencer, vous devrez installer le runtime Flu,
00:02:01sur lequel votre agent s'importe et s'exécute,
00:02:04puis vous devrez installer le CLI Flu,
00:02:06qui compile et sert votre agent.
00:02:08Vous devrez également configurer une clé API parmi les nombreux fournisseurs supportés par Pi.
00:02:13Pour cette démo, cependant, je vais utiliser Anthropic,
00:02:15et ensuite vous devrez lancer 'flu init' avec les cibles,
00:02:18ce qui crée un fichier de configuration Flu pour que le CLI sache comment empaqueter votre projet.
00:02:22Vous pouvez choisir entre Node ou Cloudflare,
00:02:24et je parlerai des différences dans une seconde.
00:02:26Mais j'ai déjà effectué ces étapes,
00:02:27alors regardons à quoi ressemblent ces fichiers.
00:02:30Voici les fichiers typiques que vous obtenez d'un projet Bun vierge,
00:02:33et certains de ces fichiers ne sont même pas utilisés.
00:02:35Si nous regardons index.ts, il ne sera utilisé pour rien.
00:02:38Pas plus que le fichier readme,
00:02:39mais ce qui sera réellement utilisé, c'est ce fichier 'flu config.ts',
00:02:42qui utilise Vite en arrière-plan,
00:02:45le CI pour utiliser Node plutôt que Cloudflare.
00:02:47La différence est que Node utilise un serveur HTTP au-dessus de Hono,
00:02:51et Cloudflare déploiera votre projet vers un worker
00:02:53avec un objet durable pour la persistance.
00:02:55Maintenant, après avoir effectué ces étapes,
00:02:56vous devrez créer un nouveau répertoire,
00:02:57soit un répertoire 'agents', soit un répertoire 'workflows'.
00:03:00Nous verrons les workflows un peu plus tard,
00:03:01mais pour l'instant, j'ai commencé avec un agent simple,
00:03:03qui contient le code de la documentation.
00:03:05Cela définit essentiellement un modèle
00:03:06et ajoute quelques instructions,
00:03:08qui s'ajoutent au prompt système.
00:03:09Et c'est tout.
00:03:10C'est tout ce dont vous avez besoin pour créer un agent Flu de base.
00:03:13Voyons-le en action.
00:03:14Pour l'exécuter, nous pouvons utiliser 'flu connect',
00:03:15qui construit et exécute l'agent.
00:03:17Et nous faisons correspondre le nom de notre fichier TS,
00:03:20qui est 'hello world',
00:03:21avant de lui donner un ID d'instance,
00:03:22qui pourrait être n'importe quoi.
00:03:24Donc ça pourrait même être un 'local 1, 2, 3'.
00:03:25Mais c'est utile si vous avez beaucoup d'agents qui tournent
00:03:27et chaque agent peut avoir son propre ID unique.
00:03:29C'est aussi utile pour le déploiement sur Cloudflare
00:03:31car cet ID correspond à sa propre instance d'objet durable.
00:03:35Alors maintenant, si nous appuyons sur Entrée,
00:03:36nous pouvons voir qu'il charge la configuration,
00:03:38lit la cible et exécute l'agent trouvé.
00:03:40Maintenant, nous n'avons pas de fichier agent MD,
00:03:42mais si nous en avions un, il l'utiliserait.
00:03:43Et maintenant, il a construit les agents dans ce fichier 'server.mjs'
00:03:46et il nous a donné la possibilité de saisir un prompt.
00:03:48Donc, je peux dire quelque chose comme : raconte-moi une blague aléatoire.
00:03:50Et ici, nous pouvons voir que l'agent commence à réfléchir,
00:03:52il répond, diffusant donc son cycle de vie.
00:03:54Ensuite, il me raconte une blague et me demande d'en choisir une autre.
00:03:57Mais ensuite, ci-dessous, il imprime le JSON final,
00:03:59qui comprend le texte,
00:04:00ainsi que quelques jetons d'entrée et de sortie,
00:04:02le coût total du prompt
00:04:03et le modèle utilisé.
00:04:05Bien sûr, nous pourrions continuer à parler à cet agent,
00:04:06mais pour l'instant, je vais l'arrêter.
00:04:08Et c'est un exemple de création d'un agent de base avec Flu.
00:04:11Faisons quelque chose d'un peu plus compliqué.
00:04:13Construisons un workflow pour aider à générer des titres
00:04:15pour cette vidéo YouTube.
00:04:16Et pour ce faire, encore une fois, nous créons un agent
00:04:18avec des instructions plus complexes.
00:04:20Et cette fois, nous avons en fait une compétence.
00:04:23La compétence est donc importée ici avec un attribut d'importation de compétence.
00:04:26Et ici, remarquez que nous n'exportons plus l'agent lui-même,
00:04:29mais cette fois, nous exportons une fonction appelée 'run'.
00:04:31Et ce que cela fait, c'est initialiser l'agent
00:04:34pour le workflow, puis ouvrir une session dans le harnais.
00:04:36Maintenant, ce qui se passe ensuite est assez intéressant.
00:04:38Ici, ce qui se passe, c'est que nous récupérons le chemin
00:04:41depuis la charge utile, qui a été définie ici
00:04:43dans ce type de contexte Flux.
00:04:44Donc, si nous changeons le nom ici en 'file',
00:04:46nous obtiendrions une erreur de type.
00:04:47Et ici, il récupère le fichier,
00:04:49que j'ai appelé 'script',
00:04:50et le passe en tant que prompt.
00:04:52Tout cela aura du sens
00:04:53si nous regardons les instructions ici,
00:04:55que nous lui disons d'étudier le script
00:04:57et de me donner 10 titres YouTube putaclic
00:04:59en utilisant la compétence de score de titre pour les classer.
00:05:01Voyons si cela fonctionne.
00:05:02Mais avant cela,
00:05:03je veux qu'il soit évident que les workflows
00:05:04sont dans le répertoire 'workflow'
00:05:06et que les compétences sont dans le répertoire 'skills'
00:05:08à partir de la racine du projet.
00:05:09Et pour exécuter ce workflow,
00:05:10nous devons lancer 'flu run' avec le nom de notre workflow.
00:05:13Dans mon cas, c'est 'YT titles',
00:05:14suivi de la cible et de la charge utile JSON,
00:05:16qui est le chemin d'accès pour ce script.
00:05:18Alors si nous appuyons sur Entrée,
00:05:19nous verrons que nous obtenons un ID de workflow.
00:05:21Et ici, il fait quelque chose d'un peu étrange.
00:05:23Il cherche en fait la compétence,
00:05:25même si je l'ai spécifiée plus tôt.
00:05:27Et maintenant, dans ce raisonnement,
00:05:27il me dit qu'il n'y a aucun fichier sur le système de fichiers.
00:05:30Pourquoi fait-il cela ?
00:05:31Donc, par défaut,
00:05:32Flu exécute les agents dans un bac à sable utilisant uniquement bash.
00:05:35Tout ce à quoi il a accès, c'est la description de la compétence,
00:05:37qui a été enregistrée ici,
00:05:39mais il n'a accès à aucun de ces fichiers
00:05:42liés à la compétence.
00:05:43Et la compétence elle-même, si nous la regardons,
00:05:44exécute en fait un script Python utilisant bash
00:05:47afin d'obtenir un score précis de style vidIQ
00:05:50pour un titre YouTube.
00:05:51Alors pour corriger cela,
00:05:52je vais importer 'local' depuis 'flu runtime node',
00:05:54ce qui indique à Flu d'exécuter l'agent sur mon système local
00:05:57afin qu'il ait accès à tous mes fichiers
00:05:59et puisse exécuter des scripts Python.
00:06:01Si vous êtes soucieux de la sécurité,
00:06:02j'expliquerai comment contourner cela
00:06:03plus tard dans la vidéo.
00:06:04Mais nous allons également changer
00:06:05le répertoire de travail actuel vers la compétence
00:06:07à l'intérieur du répertoire 'skills' de ce projet.
00:06:10Ainsi, Flu n'a pas à chercher partout
00:06:11pour trouver les fichiers exacts dont il a besoin.
00:06:13Et maintenant, quand je lance ce workflow,
00:06:15nous pouvons voir que Flu lit immédiatement le fichier 'skill MD'
00:06:17et est capable de générer les 10 titres putaclic
00:06:20avec un score pour chacun d'eux.
00:06:21Maintenant, si vous ne voulez pas donner à votre agent
00:06:22ou à un workflow accès à votre système local,
00:06:25ce que vous pourriez faire à la place
00:06:26est de créer un outil personnalisé à partir du fichier Python.
00:06:28Donc ici, je charge le fichier Python dans la compétence
00:06:30et je crée un outil appelé 'score title',
00:06:33qui utilise des 'value bots' pour vérifier les paramètres
00:06:35et ensuite exécute le script Python.
00:06:37Ensuite, nous pouvons enregistrer cet outil au sein de notre agent
00:06:40et tout devrait fonctionner comme prévu.
00:06:42Mais revenons maintenant au projet précédent
00:06:44et disons que nous voulons le déclencher via un appel HTTP POST.
00:06:47Eh bien, il n'y a qu'une chose à faire pour activer cela.
00:06:50Et c'est simplement d'ajouter le middleware racine.
00:06:52Maintenant, tout ce que nous avons à faire est de construire le projet Flu,
00:06:54spécifier notre cible, un port optionnel,
00:06:56puis d'exécuter notre fichier serveur.
00:06:58Et maintenant, il est à l'écoute sur le port spécifié.
00:07:00Notez que le fichier 'server.js'
00:07:01intègre tous les agents ou workflows que nous avons.
00:07:03Nous avons donc juste besoin de ce fichier
00:07:05si nous voulions le déployer partout où Node.js est supporté.
00:07:07Maintenant, je peux lancer 'curl' avec la méthode POST
00:07:09vers le port spécifié,
00:07:11sélectionner un workflow et lui donner quelques données,
00:07:13ce qui nous donne un ID de workflow.
00:07:14Et puis si nous faisons un 'curl' pour les workflows,
00:07:16en spécifiant notre ID de workflow spécifique
00:07:18et en utilisant un pipe vers JQ juste pour rendre la lecture plus facile,
00:07:21nous pouvons voir des informations sur notre workflow
00:07:23et un résumé des résultats.
00:07:25Bien sûr, Flu supporte les WebSockets plutôt que HTTP
00:07:27si vous vouliez diffuser les informations du workflow.
00:07:29Maintenant, comme d'habitude, il y a tellement de fonctionnalités que Flu possède
00:07:31que je n'ai pas eu le temps de passer en revue,
00:07:33comme les profils d'agent pour les agents réutilisables,
00:07:35le support pour Daytona, les bacs à sable Cloudflare,
00:07:37ou tout autre bac à sable simplement en utilisant une URL,
00:07:40l'ajout de routes personnalisées pour l'authentification ou les contrôles de santé,
00:07:42et même le support pour les sous-agents.
00:07:44Mais comment cela se compare-t-il
00:07:45à un autre framework d'agent IA open source comme Mastra ?
00:07:48Eh bien, la dernière fois que j'ai utilisé Mastra
00:07:49c'était quand j'ai fait cette vidéo,
00:07:50que vous pouvez mettre en pause et aller regarder
00:07:52si vous voulez un rappel de ce que c'est.
00:07:54Mais quand je l'ai utilisé,
00:07:55vous deviez encore configurer manuellement les sessions,
00:07:58la mémoire, le bac à sable et le chargement des outils vous-même.
00:08:01C'était un processus beaucoup plus granulaire, étape par étape,
00:08:03et je ne suis pas sûr que cela ait changé
00:08:05pour devenir plus simple,
00:08:06mais je pense que l'approche que Flu adopte
00:08:08est complètement différente.
00:08:10C'est plus une approche orientée harnais
00:08:11et suppose que vous allez utiliser
00:08:13ces fonctionnalités dès le départ.
00:08:14En parlant de bacs à sable,
00:08:16Flu fait en fait quelque chose de très astucieux avec eux.
00:08:18Chaque agent obtient donc son propre bac à sable par défaut,
00:08:21ce que j'ai expliqué plus tôt dans la démo,
00:08:22mais ce bac à sable est alimenté par le 'just Bash' de Vercel,
00:08:25qui réimplémente Bash en TypeScript.
00:08:27Il exécute donc ce bac à sable en mémoire
00:08:29au lieu d'un vrai conteneur,
00:08:31ce qui signifie que vous avez accès à grep, glob et aux outils de lecture
00:08:34sans payer pour un conteneur à chaque fois,
00:08:35qui doit démarrer toute une machine Linux
00:08:38juste avant que vous puissiez faire quoi que ce soit.
00:08:40Ce qui signifie que Flu peut exécuter des milliers d'agents
00:08:41pour presque rien,
00:08:43et vous pouvez opter pour un vrai conteneur
00:08:44seulement lorsque vous en avez besoin.

Key Takeaway

Flu simplifie la création d'agents IA programmables en enveloppant le moteur minimaliste Pi dans un framework capable d'exécuter des bacs à sable en mémoire à haut rendement.

Highlights

  • Flu est un framework open source TypeScript permettant de créer et déployer des agents IA avec des fonctionnalités natives comme les outils, les bacs à sable et les compétences.

  • L'utilisation de 'just Bash' de Vercel permet à Flu d'exécuter des bacs à sable en mémoire sans les coûts ni le temps de démarrage associés à des conteneurs Linux complets.

  • Le framework repose sur Pi, un harnais d'agent minimal, en y ajoutant une structure complète capable de gérer des workflows autonomes sans intervention humaine.

  • Le CLI Flu supporte deux cibles de déploiement principales : Node.js avec un serveur HTTP Hono, ou Cloudflare Workers utilisant des objets durables pour la persistance.

  • L'exécution d'agents locaux avec accès au système de fichiers ou à des scripts Python est possible en important le runtime 'local' dans le code de l'agent.

  • Les flux de travail (workflows) peuvent être déclenchés via des requêtes HTTP POST standards pour une intégration facile avec des systèmes externes.

Timeline

Origine et architecture de Flu

  • Flu est un framework TypeScript conçu à l'origine pour automatiser les workflows au sein du dépôt GitHub d'Astro.
  • Le framework s'appuie sur Pi, un harnais minimaliste, pour fournir des outils MCP, des bacs à sable et des compétences réutilisables.
  • Contrairement à Claude Code, Flu permet la création de workflows entièrement autonomes sans interaction humaine nécessaire.

L'équipe derrière Astro a développé Flu pour répondre à des besoins internes d'automatisation avant de réaliser son utilité universelle. Il transforme les capacités de base d'un agent en un système programmable où les composants sont modulaires. La distinction majeure avec d'autres solutions réside dans sa capacité à gérer des processus automatisés ne nécessitant pas de supervision humaine constante.

Configuration et exécution d'un agent de base

  • L'initialisation d'un projet Flu se fait via le CLI avec la commande 'flu init'.
  • La configuration permet de choisir entre une exécution sur Node.js ou sur Cloudflare Workers.
  • Les agents sont exécutés via 'flu connect' qui construit et lance l'agent avec un ID d'instance unique.

La mise en place d'un agent repose sur un fichier 'flu config.ts' et une structure simple composée de répertoires 'agents'. Une fois configuré, le CLI gère le cycle de vie de l'agent, permettant une interaction directe via le terminal tout en fournissant des métadonnées comme le coût, la consommation de jetons et les résultats au format JSON.

Workflows, compétences et sécurité

  • Les workflows permettent d'exécuter des processus complexes avec des compétences dédiées stockées dans un répertoire 'skills'.
  • Le runtime 'local' donne à l'agent un accès complet au système de fichiers et aux scripts Python locaux.
  • Les outils personnalisés offrent une alternative sécurisée à l'accès complet au système local en isolant les fonctions nécessaires.

Pour les besoins complexes, Flu permet d'intégrer des compétences (par exemple, des scripts Python pour noter des titres YouTube). Bien que l'accès au système local soit pratique, il peut être remplacé par des outils définis explicitement pour limiter les privilèges de l'agent. Le framework permet également d'exposer ces workflows via des endpoints HTTP POST.

Différenciation technique et optimisation des bacs à sable

  • Flu se distingue de Mastra par une approche orientée 'harnais' qui inclut nativement la gestion de la mémoire et des outils.
  • Les bacs à sable utilisent 'just Bash' de Vercel pour simuler un environnement Bash en mémoire.
  • L'exécution en mémoire permet de lancer des milliers d'agents simultanément à un coût très réduit sans initialisation de conteneurs.

L'approche de Flu est centrée sur l'intégration native des composants critiques comme les bacs à sable dès la phase de conception. L'utilisation de 'just Bash' élimine la lourdeur des machines Linux traditionnelles, permettant une exécution rapide et légère. Cette architecture technique est le pilier permettant la montée en charge efficace des agents déployés.

Community Posts

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

Write about this video