00:00:00La plupart d'entre vous connaissent déjà shad cn comme l'une des bibliothèques d'interface les plus utilisées,
00:00:04mais utiliser un agent IA pour construire avec peut être problématique.
00:00:07Si vous créez des pages d'atterrissage simples,
00:00:09vous n'aurez pas trop de problèmes,
00:00:11mais si vous développez une nouvelle application ou implémentez une nouvelle fonctionnalité,
00:00:15les choses se cassent et elles cassent aussi d'autres parties de l'application.
00:00:18Mais ce n'est rien de nouveau,
00:00:19ce problème a déjà été résolu et c'est comme ça que les ingénieurs construisent des applications maintenant.
00:00:24Les agents IA testent toujours le code qu'ils écrivent,
00:00:26mais ces agents deviennent peu fiables avec des contextes volumineux.
00:00:29Nous avons donc besoin d'un moyen de nous assurer que les agents terminent le travail qui leur est confié.
00:00:34C'est là qu'intervient le concept de boucles agentiques,
00:00:36et Anthropic résout cela en utilisant la boucle ralph.
00:00:38Pour résoudre mon problème d'interface,
00:00:40j'ai essayé d'implémenter la boucle ralph et au début ça a complètement échoué,
00:00:43mais j'ai vite compris que ce n'était pas à cause de la boucle ralph,
00:00:46c'était à cause du processus que j'avais implémenté avec.
00:00:49Ralph est en fait un nouveau plugin qui a été publié par Anthropic eux-mêmes,
00:00:52mais ce n'était pas l'une de leurs idées originales,
00:00:54c'est basé sur une technique de quelqu'un d'autre et Anthropic l'a implémenté et mis en open source.
00:00:58Fondamentalement,
00:00:59ralph est une boucle et si vous connaissez les hooks de claud code,
00:01:02il utilise ces hooks d'arrêt qui s'exécutent quand claud arrête de produire une réponse.
00:01:06Dès qu'il s'arrête,
00:01:06l'agent IA reçoit à nouveau son fichier de prompt initial et cela lui permet d'améliorer itérativement son travail.
00:01:11Maintenant voici la question importante : quand sort-il réellement de la boucle?
00:01:15Il y a quelque chose appelé promesse d'achèvement qui peut être n'importe quel mot que vous saisissez.
00:01:19Quand claud estime que sa tâche est terminée,
00:01:21il produit cette promesse lui-même.
00:01:22Par exemple,
00:01:23dans ce cas,
00:01:23la promesse est le mot « complete ».
00:01:25Si la promesse est dans le prompt de retour,
00:01:27alors la boucle ne s'exécute plus.
00:01:28Donc jusqu'à ce que claud produise une promesse,
00:01:30il ne s'arrête pas.
00:01:31Cela garantit que claud ne quitte pas simplement quand il le souhaite.
00:01:34Après avoir installé le plugin,
00:01:35vous aurez trois commandes : la commande de boucle ralph,
00:01:38une commande d'annulation et une commande d'aide.
00:01:40Dans la commande de boucle,
00:01:41vous devez fournir le prompt qui est transmis à l'agent encore et encore.
00:01:44Parfois,
00:01:45il peut recevoir une tâche impossible qu'il n'arrive pas à résoudre et il pourrait rester coincé dans une boucle infinie,
00:01:50donc définir un nombre maximum d'itérations est une très bonne pratique.
00:01:53Je laisserai le lien vers le dépôt ci-dessous car ils ont de bonnes pratiques pour les prompts que vous pouvez donner à la boucle ralph,
00:01:59mais dans cette vidéo je vais seulement discuter de ceux liés au flux de travail d'interface que je vais vous montrer.
00:02:04Disons que nous voulons implémenter deux fonctionnalités dans cette application.
00:02:07L'une est une palette de commandes où nous ajoutons un menu pour rechercher dans notre application et exécuter d'autres commandes.
00:02:12Pour s'assurer que cette nouvelle fonctionnalité ne casse pas d'autres parties de l'application,
00:02:17vous commenceriez par les tests.
00:02:18C'est ce qu'on appelle le développement piloté par les tests.
00:02:21Si vous n'êtes pas familier avec ça,
00:02:22vous pouvez demander à claud code de configurer la structure TDD pour vous,
00:02:25où il crée un dossier de tests de bout en bout,
00:02:27un dossier de captures d'écran pour vérifier les problèmes d'interface et le test correspondant également.
00:02:32L'autre fonctionnalité que nous allons implémenter est une vue tableau dans la base de données,
00:02:36similaire à ce que Notion nous permet de faire avec leurs bases de données.
00:02:39Si vous avez compris,
00:02:40le développement piloté par les tests est une approche où les tests sont écrits avant que le code ne soit implémenté.
00:02:45Mais cela signifie que les tests initiaux échoueront toujours.
00:02:47Donc si j'implémente la fonctionnalité de palette de commandes,
00:02:50je ne commencerais pas simplement à écrire le code pour ça.
00:02:53Au lieu de cela,
00:02:53j'écrirais d'abord des tests élaborés pour ça.
00:02:55Ensuite,
00:02:56nous écrivons la quantité minimale de code nécessaire pour passer ces tests.
00:02:59Une fois que c'est fait,
00:03:00nous refactorisons et ajoutons plus de fonctionnalités et à chaque ajout nous nous assurons que les tests passent toujours.
00:03:05Une autre chose intéressante est que ces tests sont automatisés et playwright peut être importé et utilisé pour la vérification visuelle.
00:03:11Si vous pensez que nous utilisons le MCP playwright pour vérifier ça de manière autonome via le navigateur,
00:03:16vous vous trompez.
00:03:16Avec le TDD,
00:03:17pour chaque comportement fonctionnel,
00:03:18vous pouvez prendre des captures d'écran.
00:03:20Par exemple,
00:03:21si le comportement fonctionnel est d'ajouter une carte,
00:03:23la capture d'écran montrerait une carte ajoutée au tableau.
00:03:25Donc maintenant,
00:03:26tout ce que l'agent IA a à faire est de regarder ces captures d'écran et de s'assurer qu'il n'y a pas de problèmes dans la façon dont ces composants shad cn ont été implémentés.
00:03:34Ces fichiers de test garantissent que chaque fois que quelque chose de nouveau est ajouté ou pendant qu'une fonctionnalité est construite,
00:03:40toutes nos exigences comportementales sont remplies.
00:03:42Mais dans notre cas,
00:03:43nous voulons utiliser les captures d'écran purement pour la vérification de l'interface.
00:03:46Mais si nous avons déjà le TDD,
00:03:48pourquoi avons-nous besoin de la boucle ralph?
00:03:50Comme je l'ai déjà dit,
00:03:51avec des tâches plus importantes et des fenêtres de contexte devenant presque pleines,
00:03:54ces modèles quittent brusquement leurs tâches et nécessitent une intervention humaine constante.
00:03:58Par conséquent,
00:03:59je peux avoir des tests écrits à l'avance pour tout type de fonction que je veux,
00:04:02puis utiliser la boucle pour lui indiquer quoi faire et il peut travailler de manière autonome en lui disant quel flux de travail suivre et ensuite en lui donnant la condition pour quand il peut produire la promesse.
00:04:11Il termine la tâche et sort de la boucle,
00:04:13ce qui dans ce cas est quand il passe les 25 tests uniques.
00:04:16Donc en utilisant la commande slash ralph,
00:04:17je lui ai donné un prompt pour qu'il construise itérativement la fonctionnalité de palette de commandes.
00:04:22Dans le prompt,
00:04:22nous lui disions essentiellement d'implémenter la fonctionnalité avec quelques exigences de base qui ne sont pas vraiment importantes car les exigences peuvent être trouvées dans les tests également,
00:04:31mais nous avons décrit tout le flux de travail.
00:04:33Dans ce flux de travail,
00:04:34il était censé commencer par exécuter les tests.
00:04:36Il sait que les tests vont échouer et après ça,
00:04:38il doit implémenter les composants pour les faire passer.
00:04:40Donc c'est tout l'objectif.
00:04:41Maintenant,
00:04:42si c'était une tâche beaucoup plus large,
00:04:44il y a des chances que lorsque la fenêtre de contexte se remplit ou que claud est confus,
00:04:47il quitte automatiquement.
00:04:48Il ne produira jamais la promesse d'achèvement et puisqu'il ne produit jamais la promesse,
00:04:52le prompt sera renvoyé à nouveau et il devra tout recommencer,
00:04:55ce qui signifie qu'il continuera itérativement à travailler dessus.
00:04:58Mais comme c'était une tâche plus petite,
00:04:59il a réellement pu tout implémenter d'un coup,
00:05:01écrire tous les composants et faire passer tous les tests.
00:05:04Maintenant,
00:05:04après que les tests passent,
00:05:06le flux de travail lui dit de revoir toutes les captures d'écran de la palette de commandes.
00:05:09Ce sont des captures d'écran prises à différentes étapes pour s'assurer que l'interface,
00:05:13que ce soit shad cn ou toute autre bibliothèque de composants que vous utilisez,
00:05:17est implémentée correctement et qu'il n'y a pas de problèmes mineurs.
00:05:19Après ça,
00:05:20il devrait exécuter les tests à nouveau et s'assurer qu'ils passent toujours après les changements d'interface.
00:05:25Puisque tous les tests passaient et que les captures d'écran étaient revues,
00:05:28il a produit la promesse d'achèvement.
00:05:29C'est là que la boucle s'est arrêtée et n'a pas continué à nouveau.
00:05:32Mais il y avait un très gros problème avec ça que je n'ai pas remarqué dans la fonctionnalité de palette de commandes car il y avait très peu de chances d'erreurs d'interface.
00:05:40Cependant,
00:05:40quand je suis passé à l'implémentation de la vue tableau,
00:05:43j'ai réalisé qu'il y avait une énorme erreur dans le système.
00:05:45J'ai commencé par implémenter le tableau avec le même prompt.
00:05:48Les exigences étaient différentes bien sûr,
00:05:50mais le flux de travail était à peu près le même.
00:05:52J'étais un peu surpris quand il a complété toutes les exigences d'un coup.
00:05:55Ne vous méprenez pas,
00:05:56il s'assurait réellement que tous les tests passaient,
00:05:58mais pendant qu'il faisait ça,
00:05:59il y avait des cas où le nombre de tests réussis diminuait en fait parce qu'en changeant quelque chose,
00:06:04il cassait quelque chose d'autre,
00:06:05et c'est pourquoi le TDD est vraiment important à cause de ce test récursif et pour s'assurer que tout fonctionne.
00:06:10Mais le principal problème était qu'après avoir vérifié qu'il avait terminé et que je suis allé vérifier l'interface,
00:06:15la plupart des choses étaient implémentées correctement,
00:06:17mais il avait complètement manqué certaines erreurs d'interface comme celle-ci.
00:06:21J'ai aussi vérifié les captures d'écran et les erreurs apparaissaient dans ces captures d'écran également.
00:06:25Donc je lui ai demandé et nous avons analysé ce qui s'était réellement mal passé.
00:06:29Le vrai problème était un échec de processus,
00:06:30spécifiquement en termes de correction de l'interface.
00:06:33Ce qui s'est passé,
00:06:34c'est qu'il a bien passé tous les tests parce qu'il était censé exécuter les fichiers de test encore et encore,
00:06:38mais il n'y avait pas de test spécifique pour l'interface autre que les captures d'écran.
00:06:42Il a jeté un coup d'œil à quelques-unes d'entre elles et il a même ignoré certaines des erreurs d'interface qu'il avait vues.
00:06:47Certains fichiers ont été complètement ignorés.
00:06:49Donc le principal problème était qu'il a produit sa déclaration de promesse prématurément et n'a pas vérifié si l'interface était réellement corrigée.
00:06:56Nous avons eu toute une session de brainstorming sur la façon dont nous pourrions corriger ça et j'ai même donné les meilleures pratiques d'écriture de prompts du dépôt à clod code,
00:07:03mais au final nous avons proposé des règles spécifiques et un changement dans le processus qui garantiraient que l'interface soit toujours correcte.
00:07:10Maintenant,
00:07:10ça n'avait rien à voir avec les tests parce qu'ils vont toujours s'exécuter.
00:07:13Le prompt que nous avons utilisé pour la palette de commandes est vraiment utile quand la fonctionnalité ou l'implémentation est très grande,
00:07:19où clod n'hallucine pas qu'il a terminé la tâche,
00:07:22mais au lieu de cela,
00:07:22à cause d'une fenêtre de contexte pleine ou de la complexité de la tâche,
00:07:26il quitte brusquement.
00:07:26Maintenant,
00:07:27clod code est déjà vraiment autonome,
00:07:29il n'y a aucun doute là-dessus,
00:07:30mais il y a encore des problèmes comme celui-ci que nous devons corriger.
00:07:33Donc nous avons changé un certain nombre de choses dans le prompt principal.
00:07:36La première était le protocole de vérification des captures d'écran.
00:07:39Nous avons ajouté un simple préfixe à chaque image qui disait à clod s'il avait lu la capture d'écran ou non.
00:07:44Mais quand j'ai implémenté ça pour la première fois,
00:07:46il ne lisait toujours pas toutes les images.
00:07:48Il en lisait quelques-unes,
00:07:49écrivait « vérifié » dessus et tout comme avant,
00:07:51il quittait tôt.
00:07:52Donc pour résoudre ça,
00:07:52nous l'avons encouragé à penser différemment.
00:07:54Nous lui avons dit qu'après avoir renommé toutes les captures d'écran,
00:07:57il ne devrait pas encore produire la promesse,
00:07:59ce qui signifie qu'il ne devrait pas considérer la tâche comme terminée et qu'il devrait laisser la prochaine itération confirmer l'achèvement.
00:08:05Donc au moins deux boucles devraient s'exécuter.
00:08:07Ce qui se passe dans la prochaine vérification,
00:08:09c'est que clod vérifie que tous les fichiers ont le préfixe vérifié.
00:08:12Bien sûr,
00:08:13cela signifiait que nous devions changer les tests et séparer la vérification des images des tests fonctionnels.
00:08:18L'itération suivante s'assure que toutes les images ont des résultats vérifiés et si clod en manque,
00:08:22il les regarde à nouveau et corrige la sortie.
00:08:24Avec ce changement,
00:08:25les petites erreurs d'interface auxquelles nous étions confrontés ont finalement été corrigées et il a pu implémenter toutes ces fonctionnalités correctement.
00:08:31Donc quand il est entré dans la boucle suivante,
00:08:33il a à nouveau exécuté les tests.
00:08:35Puisqu'il a trouvé des erreurs,
00:08:36il les a corrigées et parce que tous les fichiers avaient le mot vérifié en eux,
00:08:39il a exécuté un test final.
00:08:41Cette fois,
00:08:41il a terminé sa tâche en deux boucles et a pu corriger toutes les erreurs d'interface majeures dans l'application.
00:08:46Parlons d'Automata maintenant.
00:08:47Après avoir enseigné à des millions de personnes comment construire avec l'IA,
00:08:50nous avons commencé à implémenter ces flux de travail nous-mêmes.
00:08:53Nous avons découvert que nous pouvions construire de meilleurs produits plus rapidement que jamais.
00:08:57Nous aidons à donner vie à vos idées,
00:08:59que ce soient des applications ou des sites web.
00:09:01Peut-être avez-vous regardé nos vidéos en pensant : j'ai une super idée mais je n'ai pas d'équipe technique pour la construire.
00:09:06C'est exactement là que nous intervenons.
00:09:08Pensez à nous comme votre copilote technique.
00:09:10Nous appliquons les mêmes flux de travail que nous avons enseignés à des millions de personnes directement à votre projet,
00:09:15transformant les concepts en véritables solutions fonctionnelles sans les tracas d'embaucher ou de gérer une équipe de développement.
00:09:21Prêt à accélérer votre idée vers la réalité?
00:09:23Contactez-nous à hello@automata.dev.
00:09:24Si vous souhaitez soutenir la chaîne et nous aider à continuer à faire des vidéos comme celle-ci,
00:09:28vous pouvez le faire en utilisant le bouton Super Thanks ci-dessous.
00:09:31Comme toujours,
00:09:32merci d'avoir regardé et je vous verrai dans la prochaine..