Avec les LLM, vous pouvez créer des logiciels dans un nouveau langage de programmation : l'anglais (ou votre langue maternelle). L'ingénierie rapide remplacera-t-elle l'art du codeur ou les ingénieurs logiciels qui comprennent le code auront-ils encore une place dans les futurs cycles de vie des logiciels ? Nous avons interrogé Greg Benson, professeur d'informatique à l'université de San Francisco et directeur scientifique de SnapLogic, sur l'ingénierie rapide, ses atouts et ses limites, et sur la question de savoir si l'avenir du logiciel passera par la compréhension du code.
Compréhension de l'ingénierie rapide
De nombreux langages de programmation ont cherché à faire abstraction des détails du code machine par le biais d'un code semblable au langage naturel. Avec les LLM, l'ingénierie des messages-guides semble être l'aboutissement de cette démarche. Que doivent prendre en compte les développeurs lorsqu'ils écrivent des messages-guides pour les traiter comme un langage de programmation ?
Les premiers langages déclaratifs, comme SQL, ont tenté de trouver un équilibre entre un code structuré et un vocabulaire plus proche du langage naturel. Cependant, SQL est fondamentalement un langage structuré avec une syntaxe formelle. Bien que le traitement du langage naturel (NLP) existe depuis un certain temps, ce n'est qu'avec l'avènement des LLM que le Saint-Graal consistant à passer de l'intention humaine en langage naturel au code est devenu une réalité pratique. Les LLM ont ouvert la possibilité d'utiliser le langage naturel pour décrire un programme, une expression ou un résultat souhaité. Les LLM sont particulièrement efficaces pour extraire des données de sources non structurées et multimodales, résumer du texte et synthétiser de nouvelles données et du code.
Dans de nombreux cas, les invites et les LLM peuvent être utilisés pour remplacer un code complexe ou pour exécuter des fonctions qu'il serait presque impossible de réaliser avec un code conventionnel ou qui prendraient beaucoup de temps à formuler comme un problème d'apprentissage automatique conventionnel dans lequel de nombreuses données étiquetées sont nécessaires pour former des modèles spécialisés. On peut donc considérer l'invite comme un programme. Ou plutôt, l'anglais et d'autres langues sont devenus de nouveaux langages de programmation.
Cependant, le fait de traiter les messages-guides comme un "code" comporte certaines mises en garde qu'il convient de prendre en considération. Une invite qui fonctionne bien avec un LLM peut ne pas fonctionner avec un autre LLM. En outre, les modèles frontières s'améliorent fréquemment, ce qui signifie qu'une invite qui fonctionne bien avec ChatGPT-4 peut ou non fonctionner aussi bien ou mieux avec ChatGPT-4o. De plus, même en réglant le paramètre d'aléa (température) à 0,0, les LLMs fonctionnant sur de grandes grappes de GPU peuvent encore produire des résultats différents basés sur la même entrée d'une inférence LLM à l'autre. Ce fait rend l'incorporation des LLMs dans une application difficile. Il faut un bon moyen d'évaluer la tâche que vous voulez faire exécuter au LLM afin de pouvoir la suivre d'un LLM à l'autre et d'une version à l'autre. La gestion de cette imprévisibilité est le prix à payer pour profiter de la puissance des LLM.
En coulisses, bien sûr, les invites seront converties en code dans un langage de programmation, qui sera ensuite compilé ou interprété en code machine. Y a-t-il une certaine perte de contrôle en écrivant dans l'invite abstraite de plus haut niveau (même dans les langages de programmation) ?
Pour clarifier, les invites ne sont pas converties en code, mais vous pouvez utiliser les invites et les LLM pour remplacer le code dans de nombreux cas. Ainsi, plutôt que de laisser le LLM générer du code, vous pouvez concevoir une invite pour utiliser un LLM afin d'effectuer une tâche sur des données d'entrée données. Dans ce cas, il n'y a pas de conversion de l'invite en code. Les données d'entrée sont combinées avec l'invite et envoyées directement au LLM pour l'inférence. Vous pouvez considérer le résultat de l'inférence comme la sortie d'une fonction que vous avez demandé au LLM d'exécuter.
Dans ce cas, l'invite et les données d'entrée sont converties en une représentation numérique (jetons) qui est ensuite donnée en entrée au LLM, qui itère sur la séquence de jetons pour générer un résultat qui est ensuite converti en texte et renvoyé par le LLM en tant que résultat. En utilisant un LLM de cette manière, vous comptez sur le LLM pour interpréter correctement votre message sur les données d'entrée attendues. La manière dont le LLM arrive à son résultat est abstraite dans le sens où l'inférence est soumise aux données d'apprentissage d'origine et à la structure du réseau neuronal. Ainsi, pour ce chemin, le LLM est un peu une boîte noire et vous perdez le contrôle. C'est pourquoi vous devez utiliser des techniques d'évaluation rigoureuses pour vous assurer que vos invites, vos données d'entrée et vos LLM vous donnent les résultats que vous attendez.
Adaptation des compétences à un nouvel environnement
Y a-t-il des compétences qui risquent d'être perdues lorsque l'on passe de la programmation à l'incitation par la NL ?
Il s'agit d'une question très controversée dans l'enseignement de l'informatique. Alors que les LLM sont de mieux en mieux à même de générer du code et que nous pouvons utiliser le langage naturel pour décrire le comportement souhaité, quel est le rôle de l'informatique conventionnelle et de la programmation informatique ? Il y aura probablement toute une génération de travailleurs techniques qui seront capables de générer des programmes informatiques utiles sans diplôme d'informatique formel. Ces travailleurs ne disposeront pas du même type de connaissances et de compétences fondamentales que les informaticiens d'aujourd'hui. Je veux croire qu'il y aura toujours un besoin d'informaticiens, tout comme il y aura toujours un besoin de physiciens et de biologistes. Toutefois, la façon dont ils apprennent et font leur travail peut être considérablement modifiée par l'utilisation du LLM. En ce qui me concerne, les LLM ont considérablement accéléré la façon dont j'apprends de nouveaux concepts et de nouvelles matières.
Pensez-vous que les développeurs commenceront à avoir envie d'une agence et qu'ils s'y opposeront ? À quel moment ces outils donneront-ils l'impression d'ajouter de la productivité et à quel moment les développeurs auront-ils l'impression d'être devenus des rédacteurs pour les moteurs d'IA ?
Je pense que de nombreux développeurs résistent aujourd'hui à l'utilisation d'assistants de codage précisément parce qu'ils ne veulent pas perdre leur propre autonomie et leur contrôle sur l'art du développement logiciel. Je pense qu'il y a une réelle préoccupation dans la dépendance excessive du code généré par LLM. D'une part, je peux mettre en œuvre des systèmes prototypes beaucoup plus rapidement avec l'aide des LLM, comme générer une application frontale JavaScript complète, ce qui me permet d'explorer des idées à travers un code fonctionnel rapidement. D'autre part, quelle sera la surveillance humaine nécessaire pour faire confiance à tout code généré qui sera mis en production ? En particulier pour les systèmes vitaux, comme les robots chirurgicaux. Je pense que l'état futur de la relation entre les développeurs humains et le code généré par le LLM est encore en évolution. Je pense qu'il existe une voie à suivre dans laquelle les humains construisent des systèmes et des stratégies qui exploitent les LLM de manière à garantir la confiance dans le processus et à mettre les humains dans la boucle, sans qu'ils soient relégués à de simples éditeurs de copies.
Y a-t-il des choses qu'une invite peut faire et que le code ne peut pas faire ?
Oui, les prompts et les LLM peuvent décrire des fonctions qu'il serait presque impossible d'écrire sous forme de code. Il y a des fonctions évidentes comme l'analyse des sentiments ou le résumé, mais la véritable puissance réside dans la généralisation à partir de quelques exemples seulement. L'extraction précise d'informations à partir de documents, tels que les PDF, est notoirement difficile à coder. Le fait de placer des exemples de données extraites souhaitées dans une invite aide le LLM à "apprendre" comment appliquer le modèle à de futurs documents d'entrée. Il est possible d'y parvenir avec l'apprentissage automatique traditionnel, mais à un coût très élevé en termes de temps et de niveau de compétence en science des données nécessaire pour former et tester de tels modèles.
Utilisation de grands modèles linguistiques
Quelle est l'importance d'un LLM particulier pour un prompt ingénieur ? Peut-on choisir celui que l'on veut ou faut-il prendre en compte des caractéristiques, des tailles ou des données de formation spécifiques ?
Bien qu'il semble y avoir une certaine convergence dans certaines capacités des modèles de frontière, il y a encore des variations qui peuvent avoir un impact sur votre cas d'utilisation spécifique. Il existe également des milliers de LLM spécialisés qui peuvent être téléchargés à partir de Hugging Face et qui sont efficaces dans des domaines spécifiques, tels que l'analyse des séries temporelles, pour n'en citer qu'un. Les coûts et les capacités continuent d'évoluer et un ingénieur rapide voudra se familiariser avec les principaux LLM. Le suivi des LLM à source ouverte sera également important car ils offrent une confidentialité et une sécurité que le fournisseur de LLM cloud ne peut pas assurer.
Pouvez-vous améliorer les résultats rapides avec les bonnes données ?
Oui, les résultats du LLM peuvent être influencés par les données d'exemple que vous choisissez d'ajouter à votre invite. En outre, le réglage fin devient de plus en plus courant, ce qui signifie que vous pouvez fournir de grandes quantités de données d'exemple à un modèle qui n'aurait pas sa place dans une invite elle-même. Les types d'exemples à fournir dépendent fortement du cas d'utilisation spécifique. Ce domaine s'apparente davantage à l'expérimentation scientifique qu'au développement de logiciels, car il est nécessaire de formuler une hypothèse d'exemple d'invite et de données, puis de trouver un moyen d'évaluer cette hypothèse. Cela peut conduire à de nombreux essais et erreurs.
Conseils aux futurs ingénieurs
Serons-nous tous des ingénieurs rapides à l'avenir ou aura-t-on toujours besoin de personnes qui comprennent les langages de programmation ?
J'espère qu'il y aura toujours un besoin d'experts humains dans tous les domaines, y compris l'informatique et les langages de programmation. Suggérer le contraire reviendrait à soumettre le progrès de la civilisation à l'IA. Je vois un avenir dans lequel nous utiliserons les LLM pour accélérer le développement de logiciels et l'apprentissage humain des logiciels et des langages afin de bénéficier à la fois de la puissance des LLM et de la créativité et des connaissances humaines.
Quels conseils donneriez-vous aux diplômés en sciences de l'information et aux jeunes ingénieurs fraîchement recrutés, alors qu'ils sont confrontés à un nouveau paysage dans le monde du développement de logiciels ?
Je dis à mes étudiants en informatique que vous vous trouvez à un moment extraordinaire de l'histoire de l'informatique. De mon vivant, il s'agit de l'avancée technologique la plus importante que nous ayons connue, et dans les cinq prochaines années, tout changera. Tout change, de la façon dont les entreprises fonctionnent, aux gains d'efficacité dans les affaires, en passant par la création de nouveaux types d'emplois. Nous vivons une période de transformation et, d'une certaine manière, il s'agit d'une expérience, tout comme beaucoup de technologies que nous avons vues, telles que les crypto-monnaies. Nous devons donc saisir les opportunités qui s'offrent à nous. Il faut l'accepter, car il y a une prolifération de l'assistance au codage qui modifie à la fois le développement de logiciels et l'enseignement de l'informatique. La manière dont nous nous engageons dans cette voie ne peut être ignorée.
Cet article est adapté d'un article publié à l'origine sur le blog de blog StackOverflow.