L’un des thèmes qui soulèvent le plus de préoccupations récemment est sans aucun doute l’impact grandissant de l’intelligence artificielle (IA) dans notre société. Alors que certains croient qu’elle volera nos emplois et bouleversera l’économie, nous sommes plutôt optimistes que son utilisation permettra de décupler la productivité des développeurs. Même avec la portée limitée des outils disponibles aujourd’hui sur le marché, les possibilités en gains d’efficacité sont quasi infinies.
Dans cet article, nous vous accompagnons dans le choix du modèle d’intelligence artificielle le plus adapté à votre situation et vous donnons nos recommandations pour exploiter à leur plein potentiel les outils à la disposition des développeurs.
Identifier le modèle d’IA le plus adapté à votre situation
Comme chaque modèle a ses particularités, les contraintes spécifiques à vos besoins devraient donc diriger votre choix.
Besoin de puissance
L’un des plus grands avantages de Gemini 1.5 Pro de Google, par exemple, est sa fenêtre de contexte à la fine pointe qui supporte en tout près d’un million de tokens, combiné à son excellente rétention d’information à court terme. Un développeur pourrait en tirer parti dans son quotidien en incluant une grande partie du codebase en contexte.
Besoin du meilleur rapport qualité-prix
Dans le cas d’utilisation où l’on souhaiterait prioriser un coût d’utilisation plus bas, un écosystème de développement plus actif et/ou l’accès complet au code, le modèle Llama 3 70b de Meta serait particulièrement approprié. Sa licence open-source et son efficacité proportionnelle à sa taille en font une option avantageuse.
Besoin de la meilleure expérience utilisateur
Plusieurs assistants sont inséparables du modèle dont ils dépendent ou demandent bon nombre de manipulations pour se connecter à différents modèles. Le jeu en vaut-il la chandelle? À vous d’en décider, mais si vous n’avez pas de besoins particuliers, l’expérience utilisateur de l’assistant pèsera certainement plus dans la balance au moment de faire votre choix.
Choisir votre assistant de prédilection
Il est important de faire la distinction entre le logiciel d’assistant de code et le modèle d’intelligence artificielle en tant que tel. Dans cette optique, l’assistant de code joue essentiellement le rôle d’une interface vers le modèle tout en ayant un énorme impact sur l’expérience utilisateur finale.
Dépendamment du modèle choisi, son interface pourrait être prédéterminée. Par exemple, le seul modèle disponible à l’utilisation avec GitHub Copilot est GPT-4 par OpenAI. Quant à lui, l’assistant Continue.Dev permet d’utiliser une plus grande variété de modèles, mais il n’a pas d’intégration disponible pour Visual Studio.
Les assistants de code permettent différents modes d’interaction, mais ils s’en tiennent généralement à deux grandes tendances. La première consiste à s’intégrer directement à l’éditeur en augmentant l’autocomplétion et en prenant automatiquement en contexte la sélection, les fichiers ouverts, la sortie d’invite de commande (Command-Line Interface ou CLI), etc. La seconde offre simplement une fenêtre de clavardage comme c’est le cas des outils plus connus tels que ChatGPT.
Voici quelques assistants à considérer selon vos besoins:
- GitHub Copilot: une valeur sure proposée par une compagnie reconnue, offrant une solution clé en main.
- Continue.Dev: flexible, il permet d’utiliser le meilleur modèle disponible ou des alternatives à moindres coûts, voire gratuites.
- Perplexity: une interface de type recherche web augmentée, permettant de s’appuyer sur des sources constamment actualisées.
- Meta AI: utilise le nouveau modèle Llama 3 qui est exceptionnellement performant pour coder.
- Cody: offre une meilleure compréhension du codebase grâce à l’indexeur de Sourcegraph.
Tirer le plein potentiel de son assistant de code
Vous avez tout mis en place, l’assistant répond à vos demandes… et maintenant quoi? Voici quelques cas d’usage communs.
Générer du code simple et des tests unitaires
La première idée qui vient en tête avec les assistants est évidemment de leur demander de générer du code directement. Cependant, il est fréquent que le code généré soit tout simplement erroné, incomplet, non sécuritaire ou qu’il ne suive pas les standards établis. La règle d’or est donc de toujours repasser sur du code généré.
En prenant cela en compte, un assistant de code peut vous sauver énormément de temps, surtout pour coder des flows simples et/ou redondants. Encore mieux, on peut lui donner une liste de requis, générer les tests et développer en Test-Driven Development (TDD) comme si de rien n’était!
Le réusinage de code
Un deuxième avis n’a jamais fait de mal à personne! Vous pouvez voir l’assistant comme un «rubber ducky» intelligent. Vous pouvez lui demander d’améliorer, de sécuriser ou de repenser une classe existante. Notre expérience démontre que les grands modèles de langage (Large Language Models ou LLM) trouveront toujours quelque chose à redire si on leur demande. Cependant, lorsque l’avis est utile, cela compense amplement pour les fois où ça ne l’est pas.
Sommaires de commits et de pull-requests
Pour un développeur, avoir dédain de décrire du code en langage naturel est commun. Nous nous faisons enseigner que du code bien écrit devrait être facilement compréhensible et autodescriptif.
En revanche, dans des contextes spécifiques comme un commit log ou un résumé de pull-request, leur utilité n’est pas à négliger. Laisser un assistant les rédiger fait d’une pierre deux coups: on s’épargne du travail redondant et on confirme que le code écrit est clair! Quand même un assistant IA comprend ce que nous faisons, nous savons que nous sommes sur le bon chemin.
Revue de pull-request
Dans la même lignée, pourquoi ne pas demander un avis supplémentaire sur l’ensemble des lignes de code produites pas votre équipe? Si vous utilisez une solution IA qui propose une API, vous pourriez même automatiser le tout dans un pipeline CI/CD! Il n’y a rien comme créer un ennemi commun à toute votre équipe pour faire descendre les tensions causées par les revues de code! ☺️
Aide au bugfix
Certains bugs peuvent être décourageants au point de devoir consulter un canard en plastique flottant… Heureusement, c’est maintenant chose du passé et nos questions peuvent (parfois) trouver réponse grâce à l’IA! En effet, certains outils comme GitHub Copilot et Continue donnent même l’option de joindre la sortie de l’invite de commande et de la documentation externe en plus du code en question. Rien ne garantit une résolution, mais ça vaut toujours la peine d’essayer!
Recherche augmentée
Certaines solutions d’assistant IA permettent de faire du Retrieval Augmented Generation (RAG) avec des documents locaux ou un moteur de recherche. L’avantage est d’avoir un niveau d’interprétation entre votre question, son contexte et les différentes ressources disponibles. Imaginez poser une question directement sur StackOverflow ou dans votre documentation interne et recevoir la réponse instantanément!
Tirer des meilleurs résultats d’un modèle
Cela peut sembler contre-intuitif à première vue, mais la façon dont on s’adresse à un LLM impacte beaucoup la qualité de la réponse reçue, que ce soit la formulation des phrases, le vocabulaire utilisé ou le rôle assigné à l’assistant. Le LLM est même sensible aux encouragements!
Des articles sont régulièrement publiés à propos de techniques de prompting qui permettent de décupler la puissance des modèles existants seulement en formatant les requêtes d’une certaine façon.
Expert prompting
Concrètement, un LLM est un algorithme statistique extrêmement complexe qui ne fait qu’une chose: prédire le prochain mot d’un texte. Ainsi, si le texte original insinue que la réponse provient d’une source fiable ou qu’elle doit absolument être véridique à cause d’un enjeu externe, la qualité de la réponse a tendance à augmenter. Dans la littérature, on parle ici d’expert prompting.
Aussi farfelu que cela puisse paraître, spécifier le rôle que l’IA devrait prendre en introduisant la demande avec quelque chose comme «En tant qu’expert dans le domaine X ayant Y années d’expérience…» ou de terminer avec une formulation telle que «Je vous prie de faire de votre mieux, mon emploi et la vie de 20 chatons en dépendent!» peut faire la différence entre une réponse utile et une perte de temps!
Few-shot prompting
La manière dont les LLM interprètent et intègrent l’information rend la structure des requêtes tout aussi importante que leur contenu. On peut souvent le remarquer, entre autres, avec la génération de code. En spécifiant nos demandes en long et en large, nous risquons d’inonder le modèle d’un surplus d’information. Une technique efficace est d’y aller de demandes courtes et simples, quitte à recevoir une réponse incomplète, et de l’itérer en demandant graduellement des ajouts et des modifications.
Chain-of-thoughts prompting (CoT)
Une des techniques tirées d’un article qui est toujours utile deux ans après sa publication est le CoT. Cela fait référence à un concept bien simple auquel même les humains peuvent s’identifier: pour résoudre un problème efficacement, il est souvent plus facile de le décomposer en plusieurs étapes logiques et de les attaquer une à une.
Cependant, la raison pour laquelle cette technique est si efficace pour l’intelligence artificielle est légèrement différente. Comme les LLM se résument à un algorithme qui prédit le prochain mot d’un texte, leur demander de structurer leur raisonnement revient à les forcer à s’attarder sur une petite partie du problème durant l’écriture de l’étape concernée. Cela permet en plus de garder les dernières étapes (sur lesquelles le raisonnement sera probablement basé dans le futur) fraîches dans le contexte.
Conclusion
Même si le domaine n’est jeune que d’un an ou deux, les outils et techniques présentés dans cet article ne sont que la pointe de l’iceberg des possibles gains en productivité promis par l’IA.
Avec un peu de créativité, il est maintenant à notre portée de mettre en place des modèles personnalisés, d’implémenter des agents autonomes qui s’interfacent avec des systèmes externes ou même d’intégrer des fonctionnalités d’intelligence artificielle dans un produit conventionnel.
Les experts d’Uzinakod travaillent déjà avec des assistants de code pour la réalisation de nos projets. Pour en voir quelques exemples, visitez notre section Réalisations.