01 IA responsable

Copilot est un assistant : hallucinations, biais et limites

1.2 GitHub Copilot est un assistant, pas une source de vérité

Définition

GitHub Copilot est un outil d’assistance basé sur l’IA générative. Il peut proposer :

  • du code ;
  • des tests ;
  • des explications ;
  • des commandes ;
  • de la documentation ;
  • des idées de refactoring ;
  • des suggestions de correction.

Mais ses réponses sont des suggestions, pas des garanties.

Ce que Copilot sait faire très bien

Copilot est très utile pour :

  • générer du boilerplate ;
  • écrire des tests unitaires ;
  • expliquer du code existant ;
  • proposer un refactoring ;
  • générer des exemples d’utilisation ;
  • accélérer l’écriture de documentation ;
  • aider à comprendre une erreur ;
  • proposer plusieurs approches.

Ce que Copilot ne garantit pas

Copilot ne garantit pas que le code est :

  • sécurisé ;
  • optimal ;
  • conforme aux règles de l’organisation ;
  • juridiquement acceptable ;
  • exempt de bugs ;
  • compatible avec toutes les versions ;
  • aligné avec ton architecture ;
  • adapté à ton contexte métier.

Exemple concret

Tu demandes :

Texte
Create a Python function to hash passwords.

Copilot pourrait proposer :

Python
import hashlib

def hash_password(password):
    return hashlib.md5(password.encode()).hexdigest()

Le code fonctionne techniquement. Mais il est mauvais pour un vrai système de sécurité.

Pourquoi ?

  • MD5 est obsolète.
  • Il n’y a pas de salt.
  • Il n’y a pas de mécanisme de ralentissement comme bcrypt, scrypt ou Argon2.
  • C’est dangereux pour stocker des mots de passe.

Une meilleure réponse serait d’utiliser une librairie adaptée :

Python
from passlib.hash import bcrypt

def hash_password(password: str) -> str:
    return bcrypt.hash(password)

def verify_password(password: str, hashed_password: str) -> bool:
    return bcrypt.verify(password, hashed_password)

Le point important :

Un code qui fonctionne n’est pas forcément un code responsable.

1.4 Les hallucinations de Copilot

Définition

Une hallucination se produit quand un modèle d’IA génère une réponse qui semble crédible, mais qui est fausse, inventée ou non vérifiée.

En développement, ça peut prendre plusieurs formes :

  • fonction inexistante ;
  • API obsolète ;
  • librairie inventée ;
  • mauvaise syntaxe ;
  • fausse explication ;
  • commande dangereuse ;
  • configuration invalide ;
  • comportement mal interprété.

Exemple 1 : API inventée

Tu demandes :

Texte
Write Terraform code to enable advanced autoscaling for this cloud service.

Copilot peut générer :

Terraform
resource "aws_super_autoscaling_policy" "main" {
  enabled = true
}

Le code a l’air plausible. Mais la ressource n’existe pas.

Bonne réaction :

Vérifier dans :

  • la documentation officielle ;
  • l’autocomplétion Terraform ;
  • terraform validate ;
  • les tests ;
  • la CI.

Exemple 2 : Librairie obsolète

Copilot propose :

JavaScript
const request = require("request");

Mais la librairie request est dépréciée.

Meilleure approche :

JavaScript
const response = await fetch("https://api.example.com/data");

ou utiliser une librairie maintenue selon le contexte.

Exemple 3 : Explication fausse

Tu donnes à Copilot :

Python
def add_item(item, items=[]):
    items.append(item)
    return items

Copilot pourrait expliquer trop rapidement :

Texte
This function creates a new list every time.

Mais c’est faux. En Python, l’argument par défaut mutable est partagé entre les appels.

Le bug :

Python
print(add_item("a"))  # ['a']
print(add_item("b"))  # ['a', 'b']

Version correcte :

Python
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

1.5 Les biais dans les réponses de l’IA

Définition

Un biais est une tendance systématique qui peut influencer une réponse de manière injuste, incomplète ou incorrecte.

Les modèles IA apprennent à partir de grands volumes de données. Ces données peuvent contenir :

  • du vieux code ;
  • des mauvaises pratiques ;
  • des biais sociaux ;
  • des exemples non sécurisés ;
  • des conventions dépassées ;
  • des patterns non adaptés à ton contexte.

Exemple informatique

Tu demandes :

Texte
Generate a secure login form.

Copilot pourrait générer un formulaire qui :

  • ne protège pas contre le brute force ;
  • n’ajoute pas de CSRF token ;
  • stocke mal les sessions ;
  • ne valide pas correctement les inputs ;
  • ignore l’accessibilité ;
  • n’inclut pas de MFA.

Le biais ici n’est pas forcément social. C’est un biais vers des exemples simples, souvent incomplets.

Exemple métier

Tu demandes :

Texte
Create a function to detect suspicious users.

Copilot pourrait proposer des règles simplistes :

Python
if user.country in ["X", "Y", "Z"]:
    risk_score += 50

C’est potentiellement discriminatoire ou juridiquement problématique.

Meilleur prompt :

Texte
Create a risk scoring function based only on user behavior signals such as failed login attempts, impossible travel, device changes, and suspicious transaction patterns. Avoid using protected attributes or demographic data.

À retenir pour le GH-300

  • Une hallucination est une réponse plausible mais fausse ou inventée : elle peut compiler.
  • Les biais viennent des données : code ancien, mauvaises pratiques, biais sociaux, exemples simples et incomplets.
  • On tranche avec une source de vérité : documentation officielle, tests, exécution, review.
  • Une explication assurée n’est pas une preuve.