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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video