GitHub n'a pas été conçu pour les agents IA (Cloudflare a donc créé sa propre solution)

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00Cloudflow travaille sur quelque chose appelé Artifacts, un système de fichiers distribué qui est
00:00:05compatible Git, conçu d'abord pour les agents, et qui vous permet de créer, forker
00:00:10ou supprimer par programmation des milliers de dépôts, peu importe leur taille, pour des choses comme
00:00:15les revues de PR parallèles, la refactorisation automatisée de larges bases de code et des espaces de travail par session pour les agents.
00:00:20Mais comme c'est construit sur des objets durables (durable objects), cela signifie-t-il que vous devez utiliser JavaScript
00:00:25et que vous ne pouvez pas avoir accès à une commande shell pour exécuter Git ?
00:00:28Abonnez-vous et découvrons-le !
00:00:33GitHub a été conçu pour les humains, pas pour les agents, ce qui signifie qu'ils n'ont pas besoin des aspects
00:00:37sociaux, comme les abonnés ou les discussions, mais les agents sont très bons avec Git, c'est dans leur
00:00:42données d'entraînement.
00:00:43Cloudflare a donc construit une implémentation Git basique en Zig, l'a compilée en Wasm et l'a placée sur un
00:00:49objet durable pour agir comme un serveur Git.
00:00:52Pendant ce temps, le client lui-même peut être ce que vous voulez, comme un worker utilisant isomorphic-git
00:00:57à l'intérieur d'un worker ou utilisant le protocole Git, et même le client HTTP, afin que vous puissiez vous connecter
00:01:03à lui pour des choses qui n'utilisent pas JavaScript.
00:01:05Malheureusement, au moment de l'enregistrement, je n'ai pas accès à Artifacts car c'est
00:01:10en bêta privée, mais il y a beaucoup de documentation dessus, ce qui signifie que je peux créer une démo avec
00:01:15le code issu de cette documentation, et peut-être que lorsqu'il sortira en bêta publique, vous pourrez vérifier
00:01:19si mon code fonctionne vraiment.
00:01:20Ce que nous allons faire, c'est construire un outil qui prend une liste de tâches pour un dépôt
00:01:24spécifique et exécute toutes ces tâches en parallèle en forkant le dépôt plusieurs fois et en exécutant
00:01:29chaque tâche sur son propre artefact dans un dépôt Cloud sur un objet durable.
00:01:34Voyons comment cela fonctionne.
00:01:35J'ai commencé par suivre la documentation d'Artifacts pour démarrer avec les workers,
00:01:39donc j'utilise cette commande, et le texte ici après cette commande est juste le nom du projet
00:01:44et peut être n'importe quoi.
00:01:45J'ai donc suivi toutes ces étapes, ce qui finit par me donner ce code de worker de base.
00:01:49Et les workers pour Artifacts sont légèrement plus performants que l'utilisation de l'API REST car ils
00:01:53font moins d'allers-retours.
00:01:55Ensuite, vous devrez ajouter les liaisons (bindings) Artifacts à votre fichier wrangle.jsonc ou toml,
00:02:00puis relancer les types.
00:02:02La documentation ici se concentre sur la création d'un nouveau dépôt, elle utilise donc la liaison Artifacts
00:02:07avec la méthode create et un nom de dépôt.
00:02:09Cela crée le nom, ce qui donne le jeton (token) et le remote.
00:02:13Le remote est donc l'emplacement de l'artefact, et le jeton ou jeton d'authentification est nécessaire
00:02:17pour vous donner accès à celui-ci.
00:02:18Et bien sûr, vous pouvez utiliser le protocole Git en utilisant le remote et le jeton pour interagir
00:02:22avec votre artefact.
00:02:23Mais nous allons faire quelque chose de différent.
00:02:25Au lieu de créer un tout nouveau dépôt dans un objet durable Artifacts, nous allons d'abord
00:02:29vérifier s'il en existe un appelé baseline.
00:02:31S'il n'existe pas, nous allons importer un dépôt Git, puis je lui ai donné
00:02:35le nom de baseline et ensuite retourné cette valeur ici.
00:02:39Bien sûr, si vous consultez la documentation de l'API pour la liaison des workers, vous verrez plus
00:02:43de paramètres qui peuvent être ajoutés à la méthode import.
00:02:45Mais une fois que nous avons retourné le dépôt existant, nous pouvons faire des choses très intéressantes
00:02:49avec lui.
00:02:50Voici donc les tâches que j'aimerais effectuer sur le dépôt, et bien sûr je les ai codées en dur,
00:02:53mais elles pourraient être ajoutées via une entrée ou une sorte d'interface utilisateur.
00:02:56Et ici, à l'intérieur de l'export par défaut du worker, j'ai le SDK Anthropic ainsi que mon
00:03:00dépôt baseline.
00:03:02Je vais boucler sur toutes les tâches et ici, je fork le dépôt avec
00:03:06ce nom.
00:03:07Ensuite, nous avons cette fonction, que je détaillerai plus tard, mais elle exécute la tâche dans
00:03:10le dépôt forké et demande à l'agent d'effectuer le changement tout en retournant le résumé de l'agent.
00:03:15Donc, la dernière chose que l'agent a dite, et après chaque boucle for, je retourne cette
00:03:19information.
00:03:20Je vais donner le nom de la tâche, le nom du fork, le remote et le jeton
00:03:23afin que nous puissions y accéder quand nous voulons voir si le changement est bon, ainsi que le résumé
00:03:27de ce qui a été fait.
00:03:28Pour l'instant, les liaisons des workers ne vous donnent pas la possibilité de faire pull, commit et push.
00:03:33Dans mon code, j'ai donc dû faire cela avec isomorphic-git, puis utiliser un système de stockage
00:03:38en mémoire pour stocker les changements temporairement.
00:03:39Donc, de retour dans le code de l'agent, nous créons notre système de fichiers en mémoire, et ensuite nous avons
00:03:43un prompt système qui dit à l'agent d'effectuer les changements pertinents et ensuite de committer leur
00:03:47code.
00:03:48Nous allons donc cloner le dépôt forké en utilisant le remote qui a été fourni ainsi que
00:03:51le jeton.
00:03:52Et ensuite nous définissons des outils : lire, écrire et committer.
00:03:55Ici, nous sélectionnons le modèle et lui donnons un prompt système, puis nous passons la tâche
00:03:59en tant que message utilisateur.
00:04:00Et le reste du code est votre boucle agentique standard.
00:04:02S'il y a un appel d'outil, on arrête le raisonnement et on exécute l'outil, dans notre cas, lire, écrire
00:04:07ou committer, ce qui se charge aussi de pusher le code après le commit.
00:04:10Et l'avantage d'avoir un artefact est que tout ce code existera dans l'objet durable,
00:04:14stocké dans la base de données SQLite de l'objet, et si l'objet durable s'arrête, l'information
00:04:20peut être récupérée depuis la base de données SQLite à tout moment si elle revient en ligne.
00:04:23Et ensuite ici, nous continuons le raisonnement du modèle après l'appel d'outil avant de retourner
00:04:27le dernier message du modèle.
00:04:29Je sais qu'il est très difficile de visualiser tout cela sans que je puisse
00:04:32exécuter le code, mais j'espère que vous pouvez entrevoir ce qui peut être fait avec les artefacts et
00:04:37leur plein potentiel.
00:04:38Imaginez si vous pouviez avoir une interface pour voir tous les changements qui se produisent dans ces artefacts
00:04:42et que vous pouviez communiquer avec des agents individuels ou un agent orchestrateur unique pour effectuer des changements
00:04:46sur les différents dépôts.
00:04:48En parlant d'agent orchestrateur, nous pourrions avoir un seul worker capable d'orchestrer
00:04:52tous ces changements et de les fusionner dans le dépôt principal après qu'un agent relecteur a
00:04:56vérifié le code.
00:04:57Nous pouvons même combiner les artefacts avec des workers dynamiques afin que les agents puissent exécuter le code qu'ils ont
00:05:02changé pour voir s'il fonctionne.
00:05:03Et si ce n'est pas du code JavaScript, alors nous pouvons utiliser les sandboxes de Cloudflare pour exécuter n'importe quel langage
00:05:07que nous voulons et même exécuter des commandes shell.
00:05:09Sans parler de l'option de navigateur Cloudflare qui exécute un navigateur Puppeteer pour que le
00:05:13modèle puisse regarder et voir si le code implémenté est correct s'il s'agit d'un changement front-end.
00:05:18J'ai honnêtement pris beaucoup de plaisir à réfléchir aux possibilités des artefacts, même si
00:05:21je ne peux pas encore les exécuter.
00:05:22Mais une chose que j'ai remarquée, c'est qu'il n'y a pas de commande git diff.
00:05:25Elle n'est pas exposée dans l'API des liaisons des workers ni dans isomorphic-git.
00:05:30Donc peut-être que la seule façon de faire un git diff est via le protocole Git, ou ils pourraient l'ajouter dans le
00:05:35futur.
00:05:36Quoi qu'il en soit, à l'heure actuelle, si vous voulez le faire sans utiliser le protocole Git, je suppose que vous pourriez utiliser
00:05:40isomorphic-git en utilisant git log pour trouver l'arborescence Git, puis parcourir l'arbre pour
00:05:45comparer les différences.
00:05:46Quoi qu'il en soit, je pense que c'est une version très intéressante de Cloudflare.
00:05:50Et même s'il existe déjà d'autres outils de système de fichiers comme S3 files, ZeroFS et JuiceFS,
00:05:55je ne pense pas que ces options soient compatibles avec Git, ce qui est une fonctionnalité très cool
00:05:59et plus adaptée aux agents.
00:06:01En parlant de S3, si vous avez toujours voulu l'exécuter localement sur votre machine, alors consultez
00:06:05cette vidéo de Josh qui vous explique exactement comment faire cela.

Key Takeaway

Cloudflare Artifacts offre une infrastructure de fichiers distribués compatible Git qui permet aux agents IA d'automatiser des tâches sur des milliers de dépôts en parallèle avec une persistance des données intégrée.

Highlights

Cloudflare Artifacts est un système de fichiers distribué compatible avec Git, spécifiquement conçu pour les agents IA.

L'architecture repose sur des objets durables (Durable Objects) utilisant Zig compilé en Wasm pour agir comme un serveur Git.

La création, le fork ou la suppression de milliers de dépôts s'effectue par programmation via les liaisons Artifacts.

Les changements effectués par les agents sont stockés de manière persistante dans la base de données SQLite de l'objet durable.

Isomorphic-git permet de gérer les opérations Git (pull, commit, push) au sein des workers lorsque les méthodes natives de l'API sont limitées.

Timeline

Conception d'Artifacts pour les agents

  • GitHub est optimisé pour les interactions humaines, tandis qu'Artifacts cible les besoins programmatiques des agents IA.
  • Le système utilise Zig compilé en WebAssembly (Wasm) au sein d'objets durables pour gérer les fonctions Git.
  • Les clients peuvent interagir avec le système via des workers ou le protocole Git standard sans dépendance exclusive à JavaScript.

Les agents IA manipulent Git avec aisance grâce à leurs données d'entraînement. Cloudflare répond à ce besoin en créant une implémentation Git légère et distribuée qui s'affranchit des fonctionnalités sociales de GitHub inutiles pour les tâches automatisées.

Automatisation et parallélisation des tâches

  • Les workers Artifacts réduisent le nombre d'allers-retours API par rapport à une interface REST classique.
  • Le fork programmé permet l'exécution de tâches multiples en parallèle sur des instances isolées d'un dépôt.
  • La configuration nécessite l'ajout de liaisons Artifacts dans le fichier de configuration du projet et la génération des types associés.

Le workflow consiste à cloner un dépôt 'baseline', puis à créer des forks dynamiques pour chaque tâche. Chaque tâche s'exécute sur un objet durable séparé, garantissant une isolation totale et une parallélisation efficace des opérations de refactorisation ou de revue de code.

Intégration des agents et persistance

  • La persistance des changements est assurée par la base de données SQLite interne à l'objet durable.
  • Isomorphic-git comble l'absence actuelle de certaines commandes natives dans les liaisons des workers.
  • L'orchestration future permet d'intégrer des outils de vérification front-end comme Puppeteer dans le navigateur Cloudflare.

L'agent effectue des opérations de lecture et d'écriture, puis committe ses changements en mémoire. La structure permet de récupérer l'état du dépôt à tout moment, même après l'arrêt de l'objet durable, grâce au stockage sous-jacent.

Limites et perspectives

  • L'API actuelle ne propose pas de commande native pour git diff, nécessitant une navigation manuelle dans l'arborescence Git.
  • Artifacts se distingue des autres systèmes comme S3, ZeroFS ou JuiceFS par sa compatibilité native avec le protocole Git.
  • La plateforme permet d'envisager des agents orchestrateurs capables de fusionner des changements après validation.

Bien que l'API soit encore en évolution, les possibilités offertes par l'association d'Artifacts avec des workers dynamiques et des sandboxes offrent une solution robuste pour l'exécution et la vérification automatisée de code.

Community Posts

View all posts