1 points par GN⁺ 2024-01-03 | 1 commentaires | Partager sur WhatsApp
  • ChatGPT et les LLM locaux sont devenus pour les programmeurs expérimentés des outils qui réduisent les tâches ingrates davantage que l’écriture de code elle-même : recherche dans la documentation, apprentissage d’API complexes, écriture de programmes jetables
  • Les LLM ne sont ni une intelligence surnaturelle ni de simples perroquets : ils interpolent de façon limitée dans l’espace de leurs données d’entraînement, mais restent très utiles dans des domaines riches en données de qualité, comme la programmation, en tant qu’« idiots qui savent énormément de choses »
  • Sur des problèmes vérifiables, comme les transformations de tenseurs PyTorch, un client BLE macOS en Objective-C, l’interprétation des entrées/sorties d’un modèle ONNX ou des scripts d’analyse CSV, GPT-4 réduit fortement le temps de travail
  • Sur des tâches demandant un raisonnement complexe, comme la programmation système en C ou l’implémentation d’algorithmes, ses limites apparaissent dans la conception des hash pour un Bloom filter ou l’interprétation du format de quantification Q6_K de llama.cpp
  • Si une grande partie de la programmation consiste à répéter des motifs existants avec de légères variations, alors la capacité à bien utiliser un LLM et à décrire clairement un problème devient plus importante

Pourquoi les programmeurs expérimentés utilisent des LLM

  • L’objectif de l’usage des LLM ne se limite pas à écrire du code plus vite
    • recherche de documentation atypique
    • apprentissage d’API excessivement complexes
    • écriture de programmes qu’on jettera quelques heures plus tard
    • traitement de détails intellectuellement peu intéressants
  • À mesure que Google est devenu un espace de recherche saturé de spam, les LLM sont devenus une voie alternative pour obtenir rapidement l’information nécessaire
  • Leur usage a augmenté dans le code de haut niveau comme Python, mais reste bien plus rare en C
  • La différence essentielle consiste à savoir distinguer quand un LLM fait gagner du temps, et quand il en fait perdre
  • Les LLM, comme Wikipedia ou des cours YouTube, aident beaucoup les personnes qui ont la volonté, les capacités et la discipline nécessaires, mais peuvent avoir des limites pour celles qui sont déjà en difficulté

Les LLM ne sont ni omniscients, ni de simples perroquets

  • Le fonctionnement interne des réseaux de neurones et des LLM reste encore largement opaque
  • Certains spécialistes de l’IA ont sous-estimé les LLM en les réduisant à des Markov chains sophistiquées ou à des systèmes qui recrachent des variations des données d’entraînement, mais cette vision de « perroquet » a en grande partie été abandonnée face aux preuves
  • À l’inverse, leur attribuer des capacités surnaturelles qui n’existent pas dans la réalité est tout aussi inexact
  • Les LLM peuvent interpoler de façon limitée dans l’espace formé par les données vues pendant l’entraînement
    • ils peuvent écrire des programmes qu’ils n’ont jamais vus exactement tels quels
    • ils peuvent combiner plusieurs idées fréquentes dans les données d’entraînement
    • ils peuvent échouer lourdement dès qu’un raisonnement subtil est nécessaire
  • Malgré ces limites, les LLM peuvent être vus comme la plus grande réussite de l’histoire de l’IA

Un assistant de programmation comme « idiot qui sait énormément de choses »

  • Les LLM peuvent produire un raisonnement élémentaire et souvent inexact, des hallucinations et des faits inexistants
  • Mais dans des domaines riches en données de qualité comme la programmation, ils se comportent aussi comme un savant doté d’un savoir immense
  • Ils ne sont pas forcément à la hauteur comme collègue de pair programming, mais ils deviennent utiles dans un cadre où l’utilisateur pose des questions puis vérifie les réponses
  • Autrefois, connaître quelques langages, des algorithmes classiques et des bibliothèques centrales suffisait pour accomplir beaucoup de choses
  • Aujourd’hui, l’explosion des frameworks, langages et bibliothèques a fortement accru la complexité, et dans cet environnement, un « idiot qui sait tout » devient un collègue utile

Cas de réussite dans le code de haut niveau et l’interprétation de données

  • Lors d’une migration de Keras vers PyTorch, un LLM aide à écrire le code nécessaire à la structure du modèle sans devoir étudier toute la documentation PyTorch depuis zéro
    • l’utilisateur connaissait déjà des concepts comme les embeddings ou les residual networks
    • formuler clairement la structure du modèle attendue et les questions à poser s’est révélé efficace
  • GPT-4 a observé le modèle PyTorch et le format des batchs, puis a écrit le code de reshape des tenseurs pour l’adapter à l’entrée du réseau neuronal
    • l’utilisateur a vérifié dans le CLI Python que les dimensions des tenseurs et les batchs correspondaient
  • Pour créer un client BLE destiné à un appareil basé sur ESP32, il a rapidement produit du code Objective-C afin d’utiliser les API natives de macOS
    • les bindings Bluetooth multiplateformes ont été jugés globalement inutilisables
    • il fallait se replonger dans l’API BLE d’Objective-C ainsi que dans des détails d’Objective-C utilisés il y a longtemps
    • le code final se trouve dans SerialBTE.m
  • Le LLM n’a pas écrit directement la majeure partie du code, mais il a expliqué les causes des problèmes et les moyens de les résoudre, ce qui a fortement accéléré l’écriture
  • Le rapport effort/bénéfice de ce petit programme était si faible qu’il n’aurait probablement même pas été tenté sans ChatGPT

Interprétation de modèles ONNX et écriture de programmes jetables

  • Face à un convnet au format ONNX mal documenté, le LLM a interprété son fonctionnement à partir des métadonnées d’entrée/sortie et des valeurs de sortie brutes sur des images de test
    • au départ, le format et la taille des images d’entrée étaient inconnus
    • la sortie n’était pas une simple classification binaire, mais un ensemble de centaines de valeurs
    • ChatGPT a supposé que la sortie pouvait représenter des boîtes normalisées indiquant de potentielles zones de défaut dans l’image, ainsi qu’une probabilité de défaut
    • après quelques échanges, un script d’inférence Python et le code de transformation du tenseur d’entrée ont été produits
  • Pour les « programmes jetables », il arrive qu’on laisse le LLM écrire l’intégralité du code
  • Pour visualiser la loss curve pendant l’entraînement d’un petit réseau neuronal, GPT-4 a lu le format CSV et généré plot.py
    • on lui a demandé que plusieurs fichiers CSV passés en ligne de commande permettent de comparer la validation loss curve de chaque expérience
    • l’ensemble du travail a pris 30 secondes
  • Un programme pandas qui lit un rapport CSV AirBnB, regroupe les données par appartement, mois et année, puis calcule le loyer mensuel moyen en tenant compte des frais de ménage et du nombre de nuits, a aussi fonctionné du premier coup
  • Comme ce type de programme est fastidieux à écrire et peu intéressant, le fait de le confier à un LLM permet à l’utilisateur de se concentrer sur l’essentiel

Limites mises en évidence en C et en programmation système

  • Lorsqu’il s’agit d’écrire des programmes en C, le LLM est presque toujours utilisé uniquement comme une forme de documentation plus confortable
  • En programmation système, un raisonnement complexe est nécessaire, et les LLM actuels échouent souvent précisément à cet endroit
  • Lorsqu’on lui a demandé une implémentation de Bloom filter, GPT-4 a reçu la contrainte de 100 000 éléments avec une probabilité maximale de faux positifs de 5 %, mais n’a pas produit une bonne implémentation
    • il n’a utilisé que deux fonctions de hash très proches
    • il lui manquait une abstraction pour produire K hash suffisamment décorrélés à partir d’une même chaîne
    • lorsqu’on lui demandait explicitement de générer N sorties décorrélées, il proposait de meilleures fonctions de hash
  • GPT-4 pouvait écrire une fonction de hachage plus appropriée si on découpait le problème en petits sous-problèmes, mais il n’arrivait pas à appliquer lui-même cette idée à la conception complète du Bloom filter
  • Ce résultat peut s’expliquer par une faiblesse du raisonnement, un manque de documents selon le sujet, ainsi qu’un mélange de documents de faible qualité

Différence entre modèles locaux et grands modèles

  • Sur les problèmes de programmation système, la différence entre petits et grands modèles est nette
  • Mixtral, sur le même problème de hash_id, a proposé d’ajouter hash_id à la fin du résultat du hash, ce qui a été jugé comme une très mauvaise solution
  • L’exécution de deepseek-coder 34B en quantification 4 bits sur un MacBook M1 Max a donné de meilleurs résultats
    • l’utilisateur avait donné l’indice que l’ajout de hash_id à la fin dégradait la distribution
    • le modèle a identifié que la simple addition pouvait être la cause du problème
    • il a proposé comme alternative de mélanger hash_id avec des opérations bitwise comme XOR
  • Ce cas se rapproche davantage d’une identification de cause du problème et d’une proposition de solution qu’il serait difficile d’obtenir par la seule documentation ou une recherche Google
  • Malgré cela, pour un programmeur système expérimenté, les LLM fournissent encore rarement des solutions vraiment satisfaisantes

Cas d’interprétation du format Q6_K de llama.cpp

  • Le projet ggufflib est une bibliothèque qui lit et écrit des fichiers au format GGUF, utilisés par llama.cpp pour charger des modèles quantifiés
  • Pour des raisons de performance, les bits de chaque quant dans l’encodage quantifié sont stockés de manière complexe
  • Au début, ChatGPT a été utilisé pour essayer de comprendre l’encodage, mais faire directement de la rétro-ingénierie du code de llama.cpp s’est avéré bien plus rapide
  • Même si la fonction était assez petite pour tenir dans le contexte de GPT-4, le résultat obtenu à partir des déclarations de structures et de la fonction de décodage pour reconstituer une documentation du format de données était inutilisable
  • Même en demandant une explication du format Q6_K, il n’a pas su expliquer clairement comment les bits lower/upper sont stockés dans ql et qh selon la position des poids
    • même lorsqu’on lui demandait une fonction décrivant un mode de stockage plus simple, les index étaient faux
    • la gestion de la sign extension de 6 bits vers 8 bits était également incorrecte
  • Ce travail a finalement été résolu avec du papier et un stylo, la lecture du code et le suivi des bits extraits par le décodeur
  • On peut toutefois penser qu’un travail de ce type pourrait devenir faisable en quelques mois avec un peu plus de scaling, sans percée fondamentale

Nature des tâches de programmation et capacité à exploiter les LLM

  • Aujourd’hui, une grande partie de la programmation consiste à refaire la même chose sous une forme légèrement différente, sans nécessiter un raisonnement de haut niveau dans de nombreux cas
  • Les LLM sont assez bons pour cette programmation répétitive, mais la taille limitée du contexte reste une contrainte majeure
  • Il faut se demander si, dans 5 ou 10 ans, il restera pertinent de n’écrire que des programmes dont un LLM peut déjà prendre en charge une partie
  • Les capacités de raisonnement des LLM sont faibles et imparfaites, mais les considérer comme de simples systèmes qui recrachent des mots n’explique pas bien les résultats observés
  • L’objectif d’entraînement fondé sur la prédiction du token suivant force la construction d’une forme de modèle abstrait, lui-même faible, plein de trous et imparfait

Pourquoi utiliser des LLM dès maintenant

  • Les raisons de ne pas utiliser de LLM en programmation sont faibles
  • La capacité à poser les bonnes questions à un LLM devient une compétence importante
  • La capacité à décrire clairement un problème est utile non seulement avec les LLM, mais aussi dans les échanges avec des humains
  • Beaucoup de programmeurs peuvent être brillants dans un domaine donné tout en manquant de compétences en communication
  • Dans un contexte où Google est devenu plus difficile à utiliser, les LLM sont aussi utiles comme une documentation condensée
  • Leur valeur pratique tient aussi au fait qu’ils évitent d’avoir à apprendre trop directement des « junk knowledge » comme des protocoles de communication obscurs ou des détails complexes de bibliothèques

1 commentaires

 
GN⁺ 2024-01-03
Avis de Hacker News
  • Le point essentiel est ici : « Aurais-je pu le faire sans ChatGPT ? Bien sûr que oui, mais le fait que cela aurait pris plus de temps n’est pas ce qu’il y a de plus intéressant. En réalité, cela n’en aurait pas valu la peine, et je n’aurais même pas essayé »
    Dans l’assistance au code, le vrai potentiel des LLM est d’abaisser la barrière au démarrage de nouvelles tâches, au point de nous faire réellement attaquer et terminer des choses qui seraient autrement restées indéfiniment dans la pile des futurs projets
    Internet et l’open source ont eu un effet similaire : avec le temps, même pour des projets qui nous intéressaient sans qu’on les fasse soi-même, quelqu’un finissait par résoudre suffisamment de problèmes proches pour qu’on puisse réutiliser ou adapter son travail, ce qui a entraîné une explosion d’apps et de bibliothèques utiles
    Je suis d’accord avec l’auteur quand il dit que les LLM ne sont pas très capables seuls, mais qu’ils deviennent un amplificateur pour quelqu’un qui possède les compétences de base et la motivation

    • Même au-delà de la « barrière au démarrage », beaucoup de choses que j’explore avec ChatGPT sont au départ des sujets que je n’avais pas spécialement l’intention de poursuivre, juste de la curiosité
      Puis je me rends compte que cela peut se faire avec beaucoup moins d’efforts que prévu
      On peut obtenir un effet similaire en échangeant des idées avec la bonne personne, mais une personne qui n’a pas besoin de connaître parfaitement le domaine du problème tout en étant capable d’apporter une contribution utile n’est pas disponible 24 h/24 en un clic
    • J’ai l’impression d’être largement passé à côté de cette fièvre des LLM
      Ils m’ont aidé sur quelques points, mais en général, quand j’arrive à l’endroit où je ne sais pas ce que je fais, le modèle n’en sait pas plus que moi
      Pour le reste, il est difficile de formuler un prompt plus vite que d’écrire le code moi-même
      Je me demande si c’est moi qui ne sais pas utiliser ces outils
    • Cela dit, je me demande si l’effet de nouveauté amusante d’une technologie nouvelle et à la mode comme les LLM ne fournit pas l’énergie initiale nécessaire pour des tâches qui seraient autrement ennuyeuses
    • J’ai récemment travaillé sur un projet de parseur avancé de fichiers de classes Java
      Je connaissais assez bien la bibliothèque ow2 asm, mais cela m’a fait gagner beaucoup de temps que j’aurais passé à rechercher le format exact des descripteurs
      Cela m’a aussi aidé à comprendre pourquoi d’autres bibliothèques d’analyse statique ne me suffisaient pas, notamment à cause de leur façon de gérer l’état
      Pour moi, ChatGPT fait deux choses : il réduit les petites recherches StackOverflow et l’exploration du code de bibliothèques pour répondre à des questions précises, et il m’aide, avant de commencer, à évaluer la faisabilité de l’approche que je compte prendre pendant la phase de recherche du projet
    • J’ai entendu dire que, parmi les personnes atteintes de TDAH, beaucoup disent que les LLM leur ont changé la vie bien plus qu’aux personnes neurotypiques
      Quand on a un TDAH sévère, les choses simples sont les plus difficiles, et même sortir les poubelles ou ouvrir le courrier peut devenir presque impossible
      Le dialogue intérieur peut passer des heures à crier qu’il faut simplement le faire, mais le corps n’écoute pas
      On appelle cela un trouble des fonctions exécutives, mais dans ma vie c’est un vrai fléau
      Le simple fait qu’un LLM me permette de commencer cette tâche est déjà énorme
  • Pour ce qui est de la programmation, je suis entièrement d’accord
    Le point optimal d’utilisation des LLM, c’est quand on connaît déjà assez le sujet pour vérifier le résultat, et assez bien ce que l’on veut pour pouvoir l’expliquer en détail, si possible de façon concise
    Ils permettent d’aller plus vite, de faire des choses que l’on n’aurait pas faites autrement, et ils aident beaucoup à créer de petits programmes jetables mais utiles
    Un autre domaine où je les ai trouvés très utiles, c’est l’exploration de sujets complètement nouveaux, liés ou non à la programmation
    Il suffit de dire qu’on ne connaît pas bien le sujet, qu’on n’a pas besoin des détails précis mais qu’on veut en discuter et être aidé à structurer sa réflexion
    C’est particulièrement utile pour quelqu’un qui est prêt à approfondir ensuite ce qu’il a entendu ou à poser d’autres questions
    Pour entrer dans beaucoup de domaines, la porte d’entrée consiste à comprendre le vocabulaire de base, à entendre quelles distinctions les gens font et pourquoi, et à savoir qui sont les autorités du sujet

    • À l’inverse, pour un développeur junior, c’est tout aussi nuisible, mais dans la direction opposée
      On se retrouve à bricoler sans cesse jusqu’à produire un monstre qu’on ne comprend pas, en se contentant de faire passer le build
      Les personnes en apprentissage ont besoin d’aide, mais l’aide fournie par les LLM sous forme de Copilot n’est pas la bonne
      Il serait intéressant d’entraîner un modèle de type Copilot conçu comme un partenaire qui pose des questions de clarification et élabore la solution avec vous, plutôt que d’essayer à tout prix de générer du code à partir des questions vagues ou mal spécifiées d’un junior
    • Le mois dernier, j’ai essayé d’utiliser des LLM sur des choses que je ne savais pas et que je ne pouvais pas trouver facilement
      À chaque fois, ils ont fourni des prémisses subtilement fausses, voire carrément hallucinées, et m’ont fait perdre du temps jusqu’à ce que je comprenne qu’elles étaient erronées
      Sans cette assurance indue dans les mauvaises réponses, je pourrais dire que ce n’est pas beaucoup pire que de recoller ce que je sais déjà ; mais en l’état, cela reste correct comme substitut à un rubber duck ou à l’autocomplétion
    • Ce que je veux vraiment souvent, c’est un LLM personnalisé comme GPT, mais entraîné pour un langage, un framework ou un sujet précis
      J’aimerais pouvoir aller sur le site d’un nouveau langage et disposer d’un LLM avec lequel discuter de sa documentation et poser des questions pour mieux comprendre
      Ce serait encore mieux s’il était entraîné sur de vrais exemples de code de ce langage ou de ce framework, et s’il pouvait aider sur place à écrire un nouveau programme ou une nouvelle fonction
      Connecté à un REPL en ligne pour aider inline, ce serait un avantage encore plus grand
    • Les One Pager et Six Pager rédigés à partir de critères assez lâches aident à affiner ces critères et, dans certains cas, font aussi apparaître des pistes qui seraient autrement passées inaperçues
  • À mon avis, l’aspect le plus sous-estimé des LLM, que l’article effleure sans vraiment le traiter directement, est leur rôle de développeur qui sait tout
    Même le programmeur le plus senior finit par se retrouver face à une technologie dont il ne sait presque rien
    Tout le monde est junior dans un domaine ou un autre
    Même un dieu de Win32, C++ et COM peut se retrouver bloqué sur des scripts NSIS abscons au moment de empaqueter un logiciel
    Même après 25 ans à créer des applications web et à siéger au comité du langage PHP, si on vous demande d’implémenter une norme ISO obscure pour communiquer avec des réseaux de cartes bancaires, il se peut que vous n’ayez jamais communiqué avec eux à ce niveau
    Même si vous développez des apps iOS depuis le premier iPhone, que vous faisiez des apps Mac avant cela, que vous avez travaillé plusieurs années chez Apple, que vous connaissez par cœur la plupart des API iOS et que vous en avez même conçu certaines, si on vous demande d’implémenter la prise en charge de CalDAV dans une app, vous pouvez ne même pas savoir ce qu’est CalDAV
    Dans ce genre de situation, un LLM peut aider et, même s’il ne peut pas écrire tout le code, il peut au moins vous mettre dans la bonne direction

    • Il y a pire
      Après s’être rempli la tête avec d’autres technologies, vient le moment où il faut se rappeler et réviser des choses apprises autrefois mais mises de côté à cause des nouvelles
      C’est une sensation étrange
      À force de suivre naturellement la médiane de ce que fait l’entreprise où l’on travaille, on se retrouve dans une situation où l’on se dit qu’on n’a pas touché à CSS « depuis un moment »
      Il peut aussi falloir étudier un week-end pour retrouver ses réflexes sur les dataclass Python
    • L’essence de GPT, c’est d’être le meilleur googler du monde
      Si quelque chose peut se trouver avec Google, il y a de bonnes chances qu’un LLM le trouve et le synthétise plus vite et mieux
    • Même s’il ne sait pas le faire aujourd’hui, il saura certainement le faire demain, et il est temps de chercher un autre métier
      Heureusement, j’aurai probablement déjà pris ma retraite d’ici là
  • La tendance « le code a surtout été écrit par copier-coller depuis ChatGPT » est étonnante
    Je reste sidéré que tant de gens supportent un flux de travail aussi pénible
    L’auteur de l’article n’est clairement pas un débutant qui code au-delà de ses connaissances avec GPT, mais un ingénieur expérimenté
    On pourrait penser qu’il ferait attention au flux de travail de codage, à l’ergonomie et à l’efficacité des outils, et pourtant beaucoup supportent de copier-coller sans cesse du code entre GPT et des fichiers locaux
    C’est précisément ce flux de travail frustrant qui m’a poussé à créer aider au départ
    aider partage le dépôt git local avec GPT afin que le nouveau code et les modifications soient appliqués directement aux fichiers
    Il partage aussi avec GPT le contexte de code pertinent, ce qui permet d’écrire du code intégré au projet
    Cela rend donc possibles non seulement des morceaux de code isolés faciles à copier-coller, mais aussi des contributions plus sophistiquées
    Au final, cela donne un flux de travail fluide de pair programming, où GPT et moi modifions les fichiers ensemble en discutant
    https://github.com/paul-gauthier/aider

    • J’aime bien aider
      Mais existe-t-il une façon de l’utiliser simplement pour discuter du code ?
      J’utilise les LLM pour discuter des avantages et inconvénients de plusieurs approches, ou pour résoudre un problème façon rubber duck debugging
      Pour cela, il faut copier le code, et aider étant centré sur l’application de changements, il ne convenait pas vraiment à cet usage
      En général, je décide d’appliquer ou non une modification seulement après plusieurs échanges sur la bonne approche
    • « L’auteur de l’article est clairement un ingénieur expérimenté » ?
      C’est le créateur de Redis
    • L’interface web de ChatGPT est utile pour bien plus de choses que la programmation
      Si l’on paie déjà l’abonnement, il est logique de faire du copier-coller plutôt que de payer en plus pour l’API
      De plus, chacun a ses propres critères pour juger si le gain d’efficacité vaut la peine de dépendre du projet de quelqu’un d’autre, et ce genre de projet risque aussi de devenir payant ou d’être abandonné
    • J’aime beaucoup l’idée d’aider, mais quand je l’ai essayé, ça n’a pas fonctionné
      Le premier essai sur un vrai fichier a explosé parce qu’il était trop gros, et le deuxième vrai fichier était encore trop gros
      J’ai été surpris qu’aider ne semble pas capable de découper de gros fichiers pour les faire tenir dans la limite de tokens
      La limite de tokens de GPT ne permet pas de contenir de si gros fichiers source
      Si je dois choisir le fichier sur lequel travailler et en plus faire de la chirurgie pour que GPT ne s’étouffe pas, je ne sais pas si cela me fait gagner du temps par rapport à Copilot dans l’IDE
      Au début, je pensais que la contribution principale d’aider était de traiter le problème « taille du code ≫ limite de tokens », mais il semble que ce ne soit pas le cas
      J’aimerais réessayer, mais aider est dans la catégorie défavorable où il faut « trouver un problème et une base de code assez simples pour qu’aider puisse les gérer »
      À l’inverse, Copilot et ChatGPT viennent m’aider là où je suis chaque jour, sur de vraies bases de code au travail, avec leurs défauts réels
    • Je veux quand même dire merci d’avoir créé Aider
      Je pense que ses fonctionnalités actuelles couvrent très bien les cas d’usage de chat et de validation
      Les commentaires ici ne reflètent peut-être pas la grande satisfaction de la plupart des utilisateurs de logiciels
      Aider aide réellement à mettre en pratique le cas d’usage décrit par antirez dans son article
      Surtout à mesure que l’on apprend, comme le dit antirez, à poser les bonnes questions au LLM
  • Ces derniers jours, j’ai essayé de corriger un bug dans une app Mac propriétaire
    J’aime cette app, mais ce bug me rend fou depuis des années
    J’étais assez sûr de savoir quelle méthode Objective-C causait plus ou moins ce bug, mais je ne savais pas ce que faisait cette méthode, et la version décompilée était un chaos incompréhensible
    J’avais l’impression d’être face à un mur
    Puis j’ai donné à GPT-4 le bruit produit par le décompilateur et je lui ai demandé d’en faire une version propre
    Le résultat n’était pas parfait, mais j’ai pu le retravailler, puis je l’ai swizzlé dans l’app, et le bug semble avoir disparu
    Je n’ai jamais trouvé d’étapes de reproduction, mais normalement le problème se serait déjà manifesté à ce stade
    Je n’aurais jamais pu faire cela sans GPT-4

    • Cela ressemble beaucoup à un développeur junior, ou mauvais, qui ferait disparaître un bug au moins temporairement en réordonnant les fonctions dans un fichier source
      Bien sûr, si l’on réécrit complètement un bout de code, même sans comprendre ce qu’il fait et en utilisant un LLM, il y a peu de chances qu’il ait le même bug que l’implémentation d’origine
      En revanche, d’autres bugs peuvent apparaître, et j’espère que personne ne procède ainsi sur du code où les conséquences d’un bug sont importantes, comme une interruption de service ou un coût pour les clients
  • Ce texte m’a complètement sidéré
    Salvatore est l’un des ingénieurs logiciels les plus compétents en activité aujourd’hui
    Il voit très clairement que ce soi-disant outil est totalement inutile dans son propre domaine d’expertise
    Et pourtant, au lieu de le jeter comme un tournevis inadapté et tordu, il accepte le présupposé des défenseurs selon lequel il faut bien lui trouver une utilité d’une manière ou d’une autre
    Comme on l’apprend dans un cours d’introduction à la macroéconomie, si une île est supérieure dans la production du widget A, alors, même si la capacité de l’autre île à produire B est lamentable, une spécialisation apparaît où l’île A exploite l’île B
    Il est donc naturel que la compétence relative d’antirez en programmation système pousse les LLM vers d’autres tâches de programmation
    Mais nous n’existons pas isolément
    Autour de nous, il y a une multitude d’êtres humains qui veulent des défis techniques et de quoi manger
    Beaucoup d’entre eux ont, ou peuvent acquérir, des compétences complémentaires aux nôtres
    En travaillant ensemble, le résultat de la coopération peut dépasser la somme des parties
    Peut-être qu’un LLM peut écrire du code PyTorch mieux qu’antirez
    Mais ce n’est pas parce qu’on a un vieux tournevis tordu dans le garage qu’il faut forcément s’en servir
    Il vaut peut-être mieux aller à la quincaillerie aujourd’hui

    • Si un LLM écrit du code Torch mieux que moi, c’est une bonne idée de lui faire écrire ma définition de modèle
      Parce que la syntaxe exacte ou le remodelage des tenseurs ne m’importent pas tant que ça
      Pour un usage personnel, faire et entraîner un convnet sur mes images, je n’ai pas besoin de déranger un expert Torch
      Si je comprends suffisamment le convnet lui-même, mais pas assez la syntaxe ou les méthodes de Torch, je peux le faire moi-même
      L’alternative serait d’étudier les détails du manuel de Torch, et le résultat serait le même
      Ce qui compte dans cette tâche, ce ne sont pas les détails de MLX, Keras ou PyTorch, mais de maîtriser les concepts de machine learning
    • Ce qui est intéressant avec les LLM, c’est qu’il n’y a pas besoin de se précipiter pour les adopter
      Aujourd’hui, ils sont utiles dans une certaine mesure, mais pas vraiment au point qu’on puisse l’affirmer sans réserve, et on ne « prend pas de retard » en ne les utilisant pas
      Comme tous les acteurs concernés font de leur mieux pour les rendre plus compétents, quand ce jour arrivera, il suffira de leur demander ce qu’on veut par prompt
      Inutile de se presser pour tirer quelque chose de force de la génération actuelle ; pour l’instant, ils font souvent baisser la productivité plutôt que l’augmenter
    • Je pense que tu interprètes ce texte de façon excessivement défavorable
      Au point que je me demande si nous avons lu le même article
      Il regarde un nouvel outil que d’autres trouvent intéressant, cherche des usages qui lui sont utiles, tout en reconnaissant aussi les points où il ne sert à rien
      Il étaye aussi suffisamment les exemples où il n’était pas inutile
      Ce n’est pas une révélation particulièrement révolutionnaire pour un développeur
      Nous utilisons sans cesse divers outils, comme les langages de programmation, et chacun a ses forces et ses faiblesses
      Je ne vois pas pourquoi les LLM devraient être si différents
      Affirmer qu’ils n’ont absolument aucune force me semble idiot
    • L’idée, c’est qu’au lieu de demander à un LLM, je devrais passer du temps à chercher sur Fiverr ou Upwork quelqu’un à qui confier une tâche de code arbitraire hors de mon domaine d’expertise ?
      Est-ce qu’on peut faire ça pour moins de 20 dollars par mois ?
    • Je ne vois pas ce qu’il y a de sidérant
  • Quand on démarre un nouveau projet, il y a un problème d’impédance
    Au départ, le travail est terminé à 0 %, et il faut bien commencer quelque part, que ce soit un hello world, un fichier CMakeLists ou un script Python, mais c’est difficile
    Avant ChatGPT/les LLM, il fallait extraire cet effort de moi-même jusqu’au bout de mes doigts
    Maintenant, je peux le confier à ChatGPT
    En pratique, c’est moins efficace et moins puissant que si je m’étais « assis pour le faire moi-même », mais cela supprime le coût de « décider de m’asseoir pour le faire moi-même »
    Reste que c’est toujours copier des bouts récupérés via la recherche de code GitHub, StackOverflow, des billets de blog au hasard, la documentation, Discord, etc., puis les bricoler ensemble
    Après quelques tentatives et reprises, on obtient un point de départ à 5 % du projet, et une fois qu’il commence enfin à prendre forme, on peut vraiment travailler
    Au final, je construis vite en copiant-collant les preuves de concept superficielles et nulles que ChatGPT recrache, puis, quand j’ai assez d’élan, je passe en mode où je creuse moi-même
    Donc c’est plus lent et inefficace, et ChatGPT n’est pas meilleur que moi, mais c’est plus facile et je n’ai pas besoin de creuser aussi profond
    Au bout du compte, je peux tenir beaucoup mieux sur le milieu et la fin, les parties vraiment importantes du projet, sans être en burn-out dès le début

    • Peut-être qu’avant, je creusais trop profondément ?
      Est-ce que je posais les bonnes questions dès le départ, et sinon, est-ce que ce travail pouvait être récupéré efficacement ?
      Le coût irrécupérable disparaît dans l’abonnement à 20 dollars
  • Je pense que le passage clé est : « Il y a un problème, et si le LLM dit n’importe quoi, je dois rapidement savoir ce que je peux vérifier. Dans ce cas, j’utilise le LLM pour accélérer la vitesse à laquelle j’obtiens les connaissances nécessaires »
    L’une des raisons pour lesquelles la programmation convient particulièrement bien aux LLM est que vérifier la bonne réponse est généralement trivial
    J’expérimente l’idée d’évaluer si un LLM est l’outil adapté à une tâche
    Par exemple en traçant sur un graphe « l’importance que la sortie soit correcte » et « la facilité à vérifier que la sortie est correcte »
    Établir avec ChatGPT une liste de chansons auxquelles a participé une artiste ayant reçu un Emmy prend du temps à vérifier, mais l’importance est faible et quelques erreurs ne sont pas graves

    • Tu dis que, dans la programmation, vérifier la bonne réponse est généralement trivial, donc que cela convient bien aux LLM ?
      C’est donc pour ça que les logiciels n’ont absolument aucun bug ?
    • Oui, exactement
      Ce sont des problèmes où il est difficile de trouver une solution, mais facile de vérifier une solution possible
      Et tout le monde sait comment s’appelle cette classe de problèmes
    • Si quelque chose prend beaucoup de temps, n’est pas très important et que l’exactitude importe peu, la bonne réponse est peut-être de ne pas le faire
      Le monde est déjà rempli de prose hors sujet et inexacte, et nous ferions mieux d’en réduire la production plutôt que de l’accélérer
      Je ne parle pas de cet exemple précis, mais de l’idée générale
  • J’utilise ChatGPT comme partenaire de réflexion pour écrire du code
    Je discute avec lui toute la journée, tous les jours, pour terminer mon travail
    Mon entreprise a approuvé Copilot, mais l’autocomplétion de Copilot a été une expérience affreuse
    Mon entreprise n’a pas approuvé Copilot Chat, dont j’aurais besoin
    Cela dit, j’aimerais bien disposer sur mon ordinateur portable d’un outil similaire capable de générer, sur mon code, des tests unitaires, des commentaires de code, etc.
    Bien sûr, à condition que cela repose sur mes saisies et mes indications

    • J’ai eu la même expérience avec l’autocomplétion de Copilot
      Mes collègues en disaient beaucoup de bien, au point que je me demandais si le problème venait de moi, mais c’était incroyablement distrayant et je l’ai désactivée au bout de quelques jours
      C’était comme si quelqu’un essayait de finir mes phrases alors que j’étais encore en train de parler
      Même quand c’était juste, c’était agaçant, ça cassait le flux, et c’était très souvent faux
    • Si vous utilisez VS Code ou un IDE JetBrains, Continue fonctionne bien avec Ollama et il est vraiment facile de démarrer
      [0] https://continue.dev/
      [1] https://ollama.ai/
    • Pour info, il existe désormais des modèles locaux qui rivalisent avec 3.5-turbo pour le chat autour du code
      J’ai essayé Codeninja il y a quelques jours
      De mémoire, ce n’est clairement pas au niveau de 4, qui fait tourner le backend de Copilot, mais pour des données sensibles qui ne doivent pas sortir, c’est pratiquement la seule option
      Sinon, il y aurait aussi la possibilité d’obtenir une instance dédiée chez OpenAI
  • C’est peut-être le passage le plus important de cet article, et c’est un point qu’on ne répétera jamais trop au vu de ce qui nous attend en 2024
    « Alors, les LLM possèdent-ils une certaine capacité de raisonnement, ou n’est-ce que de la poudre aux yeux ? Comme le diraient les sémioticiens, il se peut qu’ils donnent parfois l’impression de raisonner parce que le “signifiant” produit l’impression d’un sens qui, en réalité, n’existe pas. Mais ceux qui ont suffisamment pratiqué les LLM savent que, même en acceptant leurs limites, cela ne suffit pas à les expliquer. Leur capacité à recombiner ce qu’ils ont déjà vu va bien au-delà du simple fait de régurgiter des mots au hasard. Même si l’essentiel de l’entraînement s’est fait, lors du pré-entraînement, en prédisant le token suivant, cet objectif force le modèle à construire une forme de modèle abstrait. Ce modèle est faible, lacunaire et imparfait, mais il doit forcément exister si l’on observe ce que nous observons. Si les certitudes mathématiques sont douteuses et que même les meilleurs experts se retrouvent souvent dans des camps opposés, il semble sage de croire ce que l’on voit de ses propres yeux »