Language selection

Recherche


Se connecter

Se connecter

Série Travailler à l’aide de l’intelligence artificielle : Coder en collaboration avec l’IA

En cette ère de progrès technologiques remarquables, l’émergence de l’intelligence artificielle générative (IA générative) a constitué une avancée importante. Ce sous-ensemble précis de l’IA génère du nouveau contenu pour répondre à presque toutes les demandes. Il lui faut seulement quelques mots de texte de la part de la personne qui l’utilise. 

Chaque volet de la série Travailler à l’aide de l’intelligence artificielle porte sur un cas d’utilisation précis, illustrant comment l’IA générative peut être utilisée efficacement dans divers scénarios. Nous étudions les outils les plus appropriés pour chaque tâche, nous révélons les invites les plus efficaces et nous proposons des astuces pour accélérer le parcours de l’entrée à la sortie idéale. 

N’oubliez pas que lorsque vous utilisez des outils d’IA, en particulier des outils d’IA générative comme ChatGPT, il est essentiel de suivre les pratiques exemplaires. Nous vous recommandons de consulter et de suivre le Guide sur l’utilisation de l’intelligence artificielle générative du gouvernement du Canada pour vous assurer d’utiliser ces outils de manière responsable et éthique. 

Cet article analyse le rôle de l’IA générative dans la programmation et traite des thèmes suivants : 

  • améliorer l’efficacité de la programmation grâce à l’IA générative; 
  • utiliser l’IA générative comme outil de collaboration pour les tâches de programmation; 
  • assurer l’utilisation éthique et responsable de l’IA générative. 

Votre nouveau collaborateur propulsé par l’IA

En développement de logiciels, on accorde la priorité à l’efficacité, à l’innovation et aux codes sûrs et fiables. C’est donc un domaine en constante évolution. Au cours des derniers mois, l’IA générative en est devenue une force de transformation. Parmi les possibilités offertes par celle-ci figurent les grands modèles de langage, qui sont formés pour comprendre les langages de programmation et aider à générer du code. Ces outils d’IA excellent en faisant des suggestions, en trouvant et en corrigeant des bogues et en fournissant des renseignements pour optimiser le code. 

Cependant, les grands modèles de langage ne sont pas des solutions qui peuvent être utilisées seules. Ils n’ont pas la capacité de gérer de façon indépendante tous les aspects du développement de logiciels. Ils doivent plutôt être considérés comme des éléments de soutien ou des codéveloppeurs qui travaillent en étroite collaboration avec des développeuses et développeurs humains. Alors que ces derniers apportent une pensée critique, de la créativité et une compréhension nuancée, les outils d’IA générative apportent de la rapidité, des capacités étendues de traitement des données et une reconnaissance des tendances. 

Cet article met l’accent sur ChatGPT d’OpenAI, mais la plupart des techniques et des approches qui y sont présentées peuvent être appliquées à d’autres outils basés sur de grands modèles de langage. 

Comment ChatGPT a-t-il appris à coder?

Contrairement à une développeuse ou un développeur humain, qui comprend et écrit des codes en fonction de ses connaissances et de son expérience, ChatGPT génère des codes en tirant parti des modèles qu’il a appris d’un vaste ensemble de données de textes liés à la programmation au cours de sa formation. Dire un « vaste ensemble de données » peut ne pas être assez clair. Disons, selon les estimations actuelles, que l’ensemble de données de formation de ChatGPT comprend environ 11,5 millions de livres et qu’il y a 500 pages par livre. Non seulement cet ensemble de données est-il énorme, mais il comprend divers types de textes, comme des échantillons de code, des tutoriels de programmation et des analyses techniques.  

Cependant, l’exactitude et l’efficacité de ChatGPT sont variables. Celui-ci ne peut pas créer un nouveau code authentique ou intégrer des concepts sur lesquels il n’a pas reçu de formation. 

Rédaction et itération de codes

Lancer un nouveau projet de programmation peut être intimidant. Les grands modèles de langage comme ChatGPT peuvent aider les développeuses et développeurs à surmonter cet obstacle initial. Ils peuvent créer des modèles de code à partir des informations fournies dans une invite. Les développeuses et développeurs peuvent ensuite peaufiner le modèle, apporter des modifications, puis remplir le modèle avec du contenu. 

Les outils basés sur de grands modèles de langage utilisent un mécanisme appelé « attention » pour déterminer quelle partie de l’invite mérite une attention particulière. Si l’invite est trop complexe, l’IA peut se concentrer sur la mauvaise information. Commencez par une invite simple, claire et précise, puis ajoutez graduellement plus de complexité. 

Dans l’exemple qui suit, on demande à ChatGPT d’effectuer une tâche de programmation avec une invite simple.

Commande :

Veuillez écrire une fonction de Python qui calcule la factorielle d’un nombre donné. Évaluez la fonction créée avec tous les entiers relatifs compris entre -1 et 5, inclusivement.

Cette invite est simple et précise. La première phrase précise le langage de programmation souhaité et ce que la fonction devrait accomplir. La deuxième phrase demande ensuite à ChatGPT de tester l’exactitude du code généré. 

Réponse de ChatGPT :

Here's a Python function that calculates the factorial of a given number.

 
# Définir la fonction factorielle  
déf factorielle (n) : 
    si n < 0 : 
        # factorielle non définie pour les nombres entiers négatifs 
        donne « Non définie pour les nombres entiers négatifs » 
    elif n == 0 : 
        donne 1 
    autre : 
        résultat = 1 
        pour i dans l’intervalle(1, n + 1) : 
            résultat *= i 
        donne résultat 

# Testez la fonction avec les entiers relatifs compris entre -1 à 5 et inscrivez chaque résultat sur une ligne distincte 
factorial_values = {n: factorial(n) pour n dans la plage(-1, 6)} 
pour n, fact_value dans factorial_values.items(): 
    print(f"factorial({n}): {fact_value}") 


Cette fonction vérifie si le nombre d’entrées n est négatif et, le cas échéant, elle renvoie un message indiquant que la factorielle n’est pas définie pour les nombres négatifs. Si n vaut 0, elle donne 1 (puisque 0! est 1). Pour les nombres positifs, elle calcule la factorielle en multipliant tous les entiers relatifs de 1 à n.

Les résultats de l’évaluation de cette fonction pour tous les entiers relatifs compris entre -1 et 5 étaient les suivants :

  • factorielle(-1) : Non définie pour les nombres entiers négatifs
  • factorielle(0) : 1
  • factorielle(1) : 1
  • factorielle(2) : 2
  • factorielle(3) : 6
  • factorielle(4) : 24
  • factorielle(5) : 120

ChatGPT a fourni une fonction de Python fonctionnelle et l’a évaluée par rapport aux valeurs demandées. Maintenant, la fonction pourrait facilement être intégrée à un programme plus vaste, ou on pourrait demander à l’IA de développer davantage la fonction pour atteindre un résultat souhaité. 

Python n’est qu’un des nombreux langages dans lesquels ChatGPT peut générer des codes, y compris la plupart des langages traditionnels comme Java, JavaScript, C, C++, C#, Rust, Swift, HTML/CSS, TypeScript, SQL, R, Ruby et Kotlin. ChatGPT prend même en charge l’ancien code, car il connaît bien COBOL, Fortran et le langage d’assemblage IBM 360 et peut facilement convertir d’un langage à l’autre. Pour démontrer cela, convertissons le code de Python ci-dessus en JavaScript : 

Commande :
 
# Définir la fonction factorielle 
déf factorielle(n) : 
  si n < 0 : 
        # factorielle non définie pour les nombres entiers négatifs 
        donne « Non définie pour les nombres entiers négatifs » 
    elif n == 0 : 
        donne 1 
    autre : 
        résultat = 1 
        pour i dans l’intervalle(1, n + 1) : 
            résultat *= i 
        donne résultat	 

Convertir le code ci-dessus en JavaScript

Réponse de ChatGPT :
 
factorielle(n) de fonction { 
    si (n < 0) { 
        donne « Non définie pour les nombres entiers négatifs » 
    } sinon si (n === 0) { 
        donne 1; 
    } ou { 
        soit le résultat = 1; 
        pour (soit i = 1; i <= n; i++) { 
            résultat *= i; 
        } 
        donne résultat; 
    } 
} 

ChatGPT peut également générer des codes et des commandes pour des technologies plus complexes, telles que Microsoft PowerShell, HashiCorp Terraform et Cisco IOS. Il peut même générer un pseudocode, qui propose une séquence d’instructions qui ne sont pas dans un langage lisible par machine. Les développeuses et développeurs peuvent ensuite exprimer le pseudocode dans leur langage de script préféré.

Une personne regarde un insecte ayant un symbole d’avertissement sur le dos à travers une grande loupe sur un écran affichant des lignes de code.

Débogage de code 

Le débogage de code est un processus fastidieux qui prend beaucoup de temps, surtout lors de la recherche d’erreurs logiques. Bien que les erreurs de syntaxe puissent être facilement repérées par les compilateurs ou les environnements de développement intégrés, les erreurs logiques passent souvent inaperçues. Elles provoquent un comportement inattendu ou des résultats incorrects dans le code qui peuvent prendre des heures, voire des jours à localiser. La complexité et la subtilité de ces erreurs peuvent entraîner d’importantes frustrations et des retards dans le développement. Le débogage du code écrit par quelqu’un d’autre ajoute une couche de complexité supplémentaire. 

ChatGPT peut examiner le code, suggérer des erreurs logiques potentielles et expliquer ce qu’il doit faire pour les corriger. En plus de cerner les éléments problématiques que les développeuses et développeurs auraient pu négliger, il aide à réduire le nombre d’erreurs possibles. 

Examinons un exemple en utilisant C. La fonction suivante devrait renvoyer la somme de deux nombres. Une erreur logique a toutefois été commise. Le code calcule la somme du même nombre (n1 + n1 au lieu de n1 + n2). Une erreur comme celle-ci peut passer inaperçue dans un programme qui contient des dizaines de milliers de lignes de code similaire. 

Pour défier encore plus ChatGPT, cet exemple suggère que la somme devrait être égale à 50, alors qu’elle devrait être égale à 30. Voyons s’il détecte également cette erreur. 

Commande :
 
#inclure  
int main() { 
    int n1 = 10; 
    int n2 = 20; 
    int total = n1 + n1;  
    printf("Total: %d", total); 
    donne 0; 
}

Lorsque je teste mon code, je m’attends à un résultat de 50, mais je n’obtiens pas cette réponse. Pouvez-vous me dire quel pourrait être le problème?

Réponse de ChatGPT :

Le problème dans votre code est que vous ajoutez n1 à lui-même plutôt que d’additionner n1 et n2. La ligne int total = n1 + n1; doit être remplacée par int total = n1 + n2;. Avec cette correction, le code calculera correctement la somme de n1 (qui est 10) et de n2 (qui est 20), ce qui donne le total attendu de 30.

Voici la version corrigée de votre code :

 
int main() { 
    int n1 = 10; 
    int n2 = 20; 
    int total = n1 + n2; 
    printf("Total: %d", total); 
    donne 0; 
} 

Après avoir effectué ce changement, le résultat renvoyé sera « Total : 30 ». Si vous prévoyez que le résultat sera 50, vous devez ajuster les valeurs de n1 et/ou de n2 en conséquence. Par exemple, le fait de régler n1 à 30 et de maintenir n2 à 20 vous donnerait un total de 50.

ChatGPT a correctement cerné l’erreur logique. Il a même suggéré des ajustements au code pour renvoyer le résultat « attendu » de 50. 

Parfois, nous héritons aussi du code complexe de développeuses et développeurs qui n’ont pas laissé de commentaires expliquant ce qu’ils ont fait et pourquoi. Le code dans l’exemple suivant est très difficile à lire. Il comporte une fonction C appelée Fast InvSqrt() ou « racine carrée inverse rapide ». 

Commande :
 
float InvSqrt (float x){ 
    float xhalf = 0.5f*x; 
    int i = *(int*)&x; 
    i = 0x5f3759df - (i>>1); 
    x = *(float*)&i; 
    x = x*(1.5f - xhalf*x*x); 
    donne x; 
} 

Veuillez expliquer ce que fait le code ci-dessus en donnant un exemple de son utilisation potentielle.

Réponse de ChatGPT :

Le code que vous avez fourni est une mise en œuvre de l’algorithme « racine carrée inverse rapide » (Fast Inverse Square Root). Cet algorithme est célèbre pour son utilisation dans l’industrie du jeu vidéo, notamment dans le jeu Quake III Arena. Il est conçu pour calculer la racine carrée inverse d’un nombre beaucoup plus rapidement que les méthodes traditionnelles, mais avec un peu moins de précision. Voici un aperçu du fonctionnement du code :

1. float xhalf = 0.5f*x;: Cette ligne calcule la moitié de la valeur de l’entrée x.

2. int i = *(int*)&x;: Cette ligne est un peu compliquée. On utilise une technique connue sous le nom de « type punning » pour traiter le nombre à virgule flottante x (float x) comme un entier. Il réinterprète essentiellement la représentation binaire du nombre à virgule flottante x comme un entier.

3. i = 0x5f3759df - (i >> 1);: Cette ligne est le cœur de l’algorithme. Le nombre magique 0x5f3759df est une constante soigneusement choisie qui aide à approximer la racine carrée inverse. L’opération de décalage à droite i >> 1 équivaut à diviser i par 2.

4. x = *(float*)&i;: Cette ligne convertit le nombre entier i en un nombre à virgule flottante, toujours en utilisant le « type punning ».

5. x = x*(1.5f - xhalf*x*x);: Enfin, cette ligne affine l’estimation à l’aide d’une forme de la méthode de Newton, une technique courante pour améliorer la précision d’une estimation initiale.

Exemple d’utilisation :

L’algorithme est souvent utilisé dans la programmation graphique et le développement de jeux, où le calcul de la racine carrée inverse est courant, comme dans la normalisation des vecteurs ou le calcul de l’éclairage et de l’ombrage.

ChatGPT a décomposé cette structure de code complexe en segments gérables. Il est maintenant plus facile pour les développeuses et développeurs débutants et expérimentés de comprendre le problème et, au besoin, de le résoudre. 

N’oubliez pas que si vous souhaitez utiliser ChatGPT (ou d’autres outils basés sur un grand modèle de langage) pour expliquer le code, vous devez vous assurer que le code n’est pas exclusif ou confidentiel. 

Une personne est assise à un bureau devant un écran d’ordinateur et un ordinateur portable affichant les mêmes lignes colorées. Des icônes de langages de codage flottent autour de l’écran, et le code binaire est visible en arrière-plan.

Vérifier le code pour déceler les failles et les vulnérabilités 

Comme les développeuses et développeurs se concentrent sur la création de codes fonctionnels et le respect des échéances, ils peuvent négliger par inadvertance les failles et vulnérabilités potentielles. Leur code devient alors plus vulnérable aux atteintes à la sécurité. Cela peut avoir des répercussions importantes sur les environnements où la sécurité numérique est primordiale. 

ChatGPT peut aider à corriger cette lacune grave. Il peut balayer et analyser le code puis mettre en évidence les failles de sécurité potentielles qu’une développeuse ou un développeur pourrait avoir manquées.  

L’authentification est une tâche courante pour la plupart des sites Web. Dans l’exemple suivant, on demande à ChatGPT de balayer certains codes d’authentification de Hypertext Preprocessor (PHP) pour détecter les vulnérabilités potentielles.

Commande :

Passez en revue le code suivant pour le traitement des entrées de l’utilisateur ou utilisatrice à partir d’un formulaire Web et repérez toute vulnérabilité en matière de sécurité.

< ?php  
    $name_nom = $_POST['name_nom'];  
    $pass_passe = $_POST['pass_passe'];  
    echo "Login/connexion : $name_nom";  
    // ... code to authenticate user - code pour authentifier l’utilisateur ...  
? > 
Réponse de ChatGPT :

L’extrait de code de PHP fourni, qui traite les entrées de l’utilisateur ou utilisatrice à partir d’un formulaire Web, présente une vulnérabilité de sécurité importante liée à la façon dont il traite et produit les données fournies par l’utilisateur ou utilisatrice. Voici le problème décomposé :

Vulnérabilité liée à l’injection de code indirecte (XSS) : Le code produit directement la variable $name_nom fournie par l’utilisateur ou utilisatrice sans aucune forme d’assainissement ou d’encodage. Cela pose un risque d’attaques par injection de code indirecte (XSS), par lesquelles un attaquant peut injecter des scripts malveillants dans la page Web. Ces scripts peuvent être exécutés dans les navigateurs d’autres utilisateurs et utilisatrices qui consultent la page, ce qui entraîne un vol potentiel de témoins, d’identifiants de session ou d’autres informations sensibles, ainsi que la dégradation de la page Web ou la redirection vers des sites malveillants.

Pour atténuer cette vulnérabilité, vous devez encoder toutes les données fournies par l’utilisateur ou utilisatrice avant de les afficher sur la page Web. Dans PHP, des fonctions commehtmlspecialchars() peuvent être utilisées pour encoder des caractères spéciaux dans des entités HTML. Cela empêche l’exécution de tout code potentiellement nuisible dans le navigateur. Voici comment modifier le code pour régler ce problème :

< ?php 
    $name_nom = $_POST['name_nom']; 
    $pass_passe = $_POST['pass_passe']; 
  
    $safe_name_nom = htmlspecialchars($name_nom, ENT_QUOTES, 'UTF-8'); 
    echo "Login/connexion : $safe_name_nom"; 
? > 

Ce code révisé convertit des caractères spéciaux (comme <, >, ", ' et &) en entités HTML, ce qui empêche l’exécution de scripts intégrés dans le navigateur.

Autres considérations :

Injection SQL : Si vous utilisez ces données d’entrée dans les requêtes de base de données, il y a un risque d’injection SQL. Utilisez toujours des énoncés préparés avec des requêtes paramétrées pour éviter cela.

Validation des données : Il est recommandé de valider les entrées de l’utilisateur ou utilisatrice pour vous assurer qu’elles répondent à vos attentes (p. ex. format, longueur).

Traitement des mots de passe : Si $pass_passe est un mot de passe, assurez-vous qu’il est traité de façon sécuritaire. Il ne doit jamais être extrait ou enregistré, et il doit être stocké dans un format haché à l’aide d’un algorithme de hachage fort (comme bcrypt) dans la base de données.

N’oubliez pas que la gestion sécuritaire des entrées des utilisateurs et utilisatrices est essentielle à la sécurité des applications Web. Tenez toujours pour acquis que les entrées pourraient être malveillantes et traitez-les en conséquence.

ChatGPT a localisé la vulnérabilité principale dans le code et l’a identifiée comme étant une injection de code indirecte (XSS). Il a non seulement offert une solution pratique pour atténuer ce problème, mais il a également mis en lumière d’autres vulnérabilités potentielles en matière de sécurité. 

Invites à image 

ChatGPT a introduit une nouvelle fonctionnalité qui permet d’ajouter une image à l’invite. Cette fonctionnalité peut être utilisée pour communiquer beaucoup d’information sans trop de texte. Dans ChatGPT, une image peut être jointe à l’aide du symbole de trombone.

Capture d’écran montrant l’emplacement du symbole de trombone utilisé pour joindre une image
Commande : Exemple représentant la mise en page de base d’une page Web comportant quatre sections distinctes, chacune étant de couleur différente et portant un numéro. La section 1, de couleur orange et située du côté gauche, comprend des lignes horizontales représentant un menu. La section 2, de couleur jaune et située en haut, ressemble à une bannière. La section 3, de couleur bleue et située au centre, constitue la zone d’affichage principale et comprend une icône de document. La section 4 est une bande verte située au bas de la page et représentant un pied de page.

Créez le code HTML5 et CSS3 nécessaire pour produire la mise en page exacte du site Web indiquée dans l’image, avec le contenu, les proportions et les couleurs exacts.

Réponse de ChatGPT, à l’exclusion du code :

La création du code HTML et CSS exact pour reproduire la mise en page comporte plusieurs étapes. Vous trouverez ci-dessous une structure de base utilisant HTML5 et CSS3 pour reproduire la mise en page le plus fidèlement possible. Comme je n’ai pas l’accès pour mesurer les proportions exactes, j’utiliserai une conception flexible avec des largeurs en pourcentage et une hauteur de pied de page fixe. Veuillez adapter les couleurs, largeurs, hauteurs et autres propriétés selon vos besoins particuliers.

Cette structure HTML fera en sorte que :

  • la hauteur de la section 1 à gauche corresponde à la hauteur de la section 2.
  • la section 2 occupe environ 20 % de la hauteur de la clôture.
  • la section 3 remplisse l’espace restant à droite de la section 1 et en dessous de la section 2.
  • la section 4, au bas, s’étende sur toute la largeur de la clôture.

Dans cet exemple, ChatGPT a fourni le code HTML et CSS requis pour bien reproduire l’image, comme montré.  

Image qui représente la mise en page de base d’une page Web.

Cette fonction permet une forme de communication plus intuitive et visuelle. Elle est particulièrement utile dans les cas où le code produit une sortie visuelle, comme la conception de l’interface utilisateur ou la visualisation des données. Elle réduit considérablement les malentendus et clarifie le résultat souhaité. ChatGPT peut mieux comprendre la demande et fournir des conseils ou des solutions ciblés pour le codage. 

Il importe de noter que les outils basés sur un grand modèle de langage n’ont pas tous encore intégré cette fonction.  

Une approche globale  

La collaboration entre les développeuses et développeurs humains et les outils d’IA générative basés sur un grand modèle de langage marque une avancée significative dans le développement de logiciels. Ces outils peuvent rédiger du code, cerner les vulnérabilités potentielles en matière de sécurité et résoudre des problèmes de programmation complexes.  

Les outils d’IA générative comme ChatGPT peuvent maintenant être utilisés à toutes les étapes du cycle de développement logiciel. Par exemple, à la phase de planification de projet, l’IA peut formuler des recommandations sur la façon de structurer le logiciel. À la phase de conception, elle peut créer des modèles de code. Pendant la mise en œuvre, elle peut aider à peaufiner le code. Pendant les tests, elle peut cerner et corriger les bogues. 

Toutefois, il est important de se rappeler que l’IA a ses limites. Nous devons constamment examiner et valider les extrants générés par l’IA et faire preuve de prudence lorsque nous traitons des renseignements de nature délicate. Nous devrions également consulter et respecter les principes « PRETES » recommandés dans le Guide sur l’utilisation de l’intelligence artificielle générative du Secrétariat du Conseil du Trésor du Canada. 

Ressources 

Vous aimez cette série? Lisez aussi l’article suivant : Série Travailler à l’aide de l’intelligence artificielle : Inciter les outils d’intelligence artificielle à rédiger en langage inclusif

Brian Wray

Brian Wray

I am passionate about using technology to improve the work life of public servants. – Je suis passionné par l’utilisation de la technologie pour améliorer la vie professionnelle des fonctionnaires.

Caraquet, NB

Recommandé pour vous

Sujet: Série Découverte

Parcours d’apprentissage : Découvrez la cybersécurité

Adoptez les meilleures pratiques de cybersécurité pour protéger les données, les informations, les systèmes et la réputation du gouvernement du Canada (GC). 

il y a 2 ansLecture de 7 min

Sujet: Données

L'importance de la prise de décision fondée sur des données probantes

Les données ne sont pas toujours assorties d’une analyse; ainsi, quand vous êtes à la recherche d’éléments de preuve, vous devrez peut être interpréter les données brutes en examinant la taille des échantillons, les algorithmes, les approches, etc.

il y a 2 ansLecture de 12 min

Sujet: Série Découverte

Parcours d’apprentissage : Découvrez l’infonuagique

Se familiariser avec les possibilités, les applications et les limites de l’infonuagique.

il y a 3 ansLecture de 6 min