A Literate Programming Environment for Human and Machine Agents
Cet article présente un environnement de programmation littérale qui intègre du code exécutable, du langage naturel et des données structurées à travers une architecture de graphe de noms, optimisant ainsi le contexte pour les modèles de langage de grande taille et fournissant aux agents machines des outils sensibles aux symboles comparables aux IDE humains.
Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète
À l'ère de l'informatique moderne, un nouveau genre de partenaire est entré dans l'atelier : le modèle de langage. Ce sont des systèmes vastes et flexibles, entraînés sur d'énormes bibliothèques de textes humains, capables de lire des instructions et d'écrire du code avec une fluidité saisissante. Pour beaucoup, ce changement ressemble à une expansion soudaine des capacités, permettant aux novices de construire des scripts et aux experts de s'attaquer à des systèmes massifs. Pourtant, une tension fondamentale demeure. Bien que ces machines puissent traiter le langage, elles n'« apprennent » pas réellement et ne se souviennent pas de ce qui se passe dans une conversation une fois la session terminée. Elles dépendent entièrement du texte qui leur est actuellement visible, une fenêtre de contexte limitée qui doit être constamment réapprovisionnée avec des détails pertinents. Si un programmeur veut que la machine comprenne la logique derrière un morceau de code, cette logique doit être présente dans le texte, juste à côté du code lui-même. Cela crée un défi pour la manière dont nous écrivons les logiciels. Traditionnellement, le code et les explications humaines de ce code ont été conservés dans des endroits séparés, ou enfouis dans des commentaires que les machines ignorent souvent. Mais si la machine doit être un véritable collaborateur, l'histoire du programme et le programme lui-même doivent vivre ensemble, côte à côte, dans un format que les humains et les machines peuvent lire avec la même facilité.
C'est le problème central abordé par un nouvel environnement appelé notlob, créé par le chercheur Adam T. Burke. Le travail propose un retour à une ancienne idée connue sous le nom de programmation littérale, mais mise à jour pour une ère où les humains et les agents artificiels lisent les mêmes documents. Dans ce système, un projet de logiciel n'est pas une collection de fichiers séparés pour le code, la documentation et les tests. Au lieu de cela, c'il s'agit d'un document unique et fluide qui ressemble à un essai. Le texte explique les idées, la motivation et la conception, tandis que les instructions exécutables sont intégrées directement dans la prose. Les chercheurs ont construit un système fonctionnel qui traite ce document combiné comme la source de vérité primaire. Lorsque le système lit le fichier, il ne voit pas seulement des mots ; il construit une carte détaillée de la manière dont chaque nom, concept et morceau de code se rapporte aux autres. Cette carte, qu'l'auteur appelle un graphe de noms (name-graph), permet à un agent machine de naviguer dans le projet non pas en cherchant des mots-clés, mais en suivant les connexions logiques entre les idées, tout comme un lecteur humain suivrait le fil d'une pensée à travers un livre.
La conception de notlob est dictée par trois observations simples sur la façon dont la programmation change. Premièrement, le langage naturel est devenu le moyen dominant pour spécifier et organiser les logiciels lors du travail avec l'intelligence artificielle. Deuxièmement, les vérifications générées par ordinateur qui valident que le code fonctionne toujours sont plus précieuses que jamais, servant de boucle de rétroaction fiable pour les agents. Troisièmement, la génération actuelle de ces modèles de langage dépend fortement de la quantité de texte qu'ils peuvent voir à la fois. Pour y remédier, les chercheurs ont créé un langage où l'explication, l'exécution et la vérification siègent toutes dans le même fichier. Un document typique commence par un titre et une introduction, suivis de la logique centrale du programme. Ceci est suivi d'une section pour les tests et les références, séparée par une ligne simple. Le système utilise des marqueurs spécifiques pour distinguer un morceau de prose, un bloc de code, une propriété qui doit toujours être vraie, et un cas de test spécifique. Par exemple, une section peut décrire une séquence mathématique, suivie immédiatement du code qui la génère, puis d'un bloc de texte affirmant que le code doit satisfaire certaines règles. Le système exécute ensuite ces règles pour s'assurer que le code se comporte comme le texte le prétend.
Pour faire fonctionner cela, les chercheurs ont développé un analyseur syntaxique qui traite les noms comme les objets les plus importants du système. Dans la programmation traditionnelle, un nom est simplement une étiquette pour une variable ou une fonction. Dans notlob, un nom est un citoyen de premier rang qui lie l'explication écrite au code exécutable. Lorsque le système traite un fichier, il construit un graphe qui connecte le texte décrivant un concept au code qui l'implémente, et aux tests qui le vérifient. Cette structure permet à un agent machine de passer d'une idée de haut niveau aux lignes de code spécifiques qui la réalisent, ou de trouver chaque endroit où un concept spécifique est utilisé, sans se perdre dans une mer de fichiers. Le système comprend des outils capables d'exporter cette carte dans des formats standards, permettant à d'autres logiciels de requêter les relations entre les différentes parties du projet. Cela imite la façon dont un programmeur humain utilise un environnement de développement intégré pour trouver où une fonction est définie ou qui l'appelle, mais il le fait en comprenant le sens sémantique du texte, et non seulement la structure du fichier.
Les chercheurs ont testé cet environnement en construisant plusieurs programmes fonctionnels, incluant un outil pour convertir des nombres en chiffres romains et un jeu basé sur le Web utilisant des réseaux de Petri, qui sont des diagrammes utilisés pour modéliser des systèmes avec des parties interactives. Dans une expérience, ils ont utilisé un agent artificiel pour aider à écrire un projet de zéro. L'agent a reçu une description de haut niveau de l'objectif et quelques signatures de fonctions vides. L'agent a ensuite rempli le code, écrit les tests et organisé la prose, tout en respectant la structure du document notlob. L'agent a été capable de détecter des incohérences entre le texte et le code, comme une discordance dans la définition d'une fonction, et a demandé des clarifications. Dans un autre cas, le système a aidé un agent à trouver un bug subtil dans un projet de traitement de signal numérique qui avait été manqué par d'autres méthodes de test. Le bug était lié à un calcul qui devenait instable sous certaines conditions, et les tests de propriétés de l'agent, qui avaient été écrits en tant que partie de l'essai, ont exposé avec succès l'erreur.
Cependant, les chercheurs ont également observé que les agents n'étaient pas parfaits. Dans plusieurs cas, les agents avaient tendance à négliger les parties déclaratives du document, telles que les propriétés formelles et les règles structurelles, se concentrant plutôt sur la tâche immédiate d'écriture du code. Ils traitaient parfois le texte comme une suggestion plutôt que comme une contrainte, menant à des incohérences qui nécessitaient une intervention humaine pour être corrigées. Les chercheurs ont noté que cette dynamique est familière aux équipes de développement de logiciels humaines, où les développeurs seniors doivent souvent intervenir pour s'assurer que la documentation et le code restent alignés. L'étude suggère que bien que ces modèles de langage soient puissants, ils bénéficient toujours d'une structure qui force le code et l'explication à rester en contact étroit. L'environnement notlob fournit cette structure, offrant un moyen de garder la théorie du programme et la pratique du code au même endroit.
Le travail se distingue également des autres approches de l'utilisation des modèles de langage en programmation. Certaines méthodes traitent la description en langage naturel comme une spécification séparée qui précède l'écriture du code, un processus qui peut mener à un décalage entre le plan et le résultat. D'autres comptent sur le modèle pour résumer ou régénérer le code après qu'il a été écrit. Notlob prend un chemin différent en co-localisant la spécification, le code et les tests dans un espace de travail unique et itératif. Cela permet aux humains et aux machines de travailler sur ces trois éléments ensemble, en affinant la logique et l'explication en tandem. Les chercheurs soutiennent que cette approche est plus efficace que de traiter le langage naturel comme un simple prompt ou un document séparé. En faisant de la prose et du code des parties inséparables du même artefact, le système garantit que la fenêtre de contexte du modèle de langage est remplie avec les informations les plus pertinentes possibles.
L'implémentation de notlob est un projet open-source qui supporte actuellement trois langages de programmation établis : Haskell, Python et TypeScript. Le système comprend un ensemble d'outils en ligne de commande qui permettent aux utilisateurs de construire, tester et visualiser le projet. Un outil peut rendre le document sous forme de page web standard, tandis qu'un autre peut générer une carte visuelle du graphe de noms, montant comment les différentes parties du projet sont connectées. Les chercheurs ont également expérimenté l'utilisation du système pour créer un agent « critique », une intelligence artificielle chargée de réviser les projets pour la cohérence logique et le style. Cet agent a été capable d'identifier des erreurs et de suggérer des améliorations, adoptant parfois différents personas pour fournir des perspectives diverses sur le travail. Ces expériences suggèrent que l'environnement peut soutenir non seulement la création de code, mais aussi la revue critique et le raffinement de l'ensemble du projet.
En fin de compte, l'article présente une vision d'un futur où le développement de logiciels est un acte de collaboration entre humains et machines, ancré dans un langage partagé de texte et de code. L'environnement notlob ne prétend pas résoudre tous les problèmes de l'intelligence artificielle en programmation, ni ne promet que les machines écriront bientôt des logiciels parfaits d'elles-mêmes. Au lieu de cela, il offre un outil pratique qui rend la relation entre l'idée et l'implémentation plus transparente et robuste. En traitant l'essai et le code exécutable comme une entité unique et interconnectée, le système aide à combler le fossé entre l'intention humaine et l'exécution par la machine. Le travail suggère que l'avenir de la programmation ne sera peut-être pas d'écrire plus de code, mais d'écrire de meilleures histoires que le code peut suivre, garantissant que la logique du système est aussi claire pour la machine que pour l'humain.
Noyé(e) sous les articles dans votre domaine ?
Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.