Avant de commencer : la carte du terrain
Cinq mots vont revenir tout le long : IA, Machine Learning, Deep Learning, embedding et RAG. Voici comment ils s'emboîtent, comme des poupées russes. Cliquez sur chaque niveau — on y reviendra à chaque étape de l'histoire de Sami.
Round 1 — Le robot à mots-clés (sans IA)
📖 L'histoire : Sami en a assez de répéter les mêmes réponses. Il programme un petit robot : si le message contient le mot « prix », il renvoie la phrase sur le prix. Simple, rapide… mais fragile.
Voir le code PHP de ce robot simple
$documents = [
"prix" => "Le prix de la formation est de 500 DT.",
"durée" => "La formation Laravel dure 40 heures.",
];
foreach ($documents as $motCle => $reponse) {
if (str_contains(strtolower($question), $motCle)) {
echo $reponse;
}
}Round 2 — Sami apprend à comprendre le sens
📖 L'histoire : Sami reçoit des lunettes magiques (un modèle de Deep Learning). Avec ces lunettes, chaque phrase qu'il lit se transforme en un point sur une carte invisible : les phrases qui veulent dire la même chose tombent au même endroit sur la carte, même si les mots sont différents.
C'est une liste de nombres, appelée vecteur ou embedding. Comme une adresse GPS a 2 nombres (latitude, longitude), une phrase en a des centaines. Regardez : « Le chat dort » et « Le chat se repose » tombent au même endroit ; « La voiture roule » tombe ailleurs.
Deux phrases proches par le sens ➜ deux points proches sur la carte.
$embedding = getEmbedding("La formation Laravel dure 40 heures.");
// $embedding n'est PAS écrit à la main.
// Résultat (extrait) : [0.80, 0.18, -0.30, 0.85, ...]
Essayez : transformez une phrase en vecteur à essayer
4 valeurs fictives pour l'exemple ; un vrai modèle en donne des centaines.
Round 3 — Sami retrouve la bonne fiche
📖 L'histoire : Sami range chaque fiche d'information (prix, durée, programme) dans une armoire (une base de données MySQL), avec son point sur la carte du sens à côté. Quand une question arrive, il calcule le point de la question, puis cherche la fiche dont le point est le plus proche sur la carte.
Cette « distance sur la carte » a un nom précis : la similarité cosinus. Un score proche de 1 = presque le même sens ; proche de 0 = aucun rapport.
Voir le code PHP de cette recherche
$vQuestion = getEmbedding($question);
foreach ($documents as $document) {
$score = cosineSimilarity($vQuestion, $document['embedding']);
if ($score > 0.75) {
$meilleurPassage = $document['contenu'];
}
}
function cosineSimilarity(array $a, array $b): float {
$dot = $normA = $normB = 0.0;
foreach ($a as $i => $x) {
$dot += $x * $b[$i];
$normA += $x * $x;
$normB += $b[$i] * $b[$i];
}
return $dot / (sqrt($normA) * sqrt($normB));
}Essayez : comparez la question aux 3 fiches à essayer
La barre verte est la fiche la plus proche : c'est elle que Sami va utiliser.
Round 4 — Sami rédige une vraie réponse (RAG complet)
📖 L'histoire : Sami donne la fiche trouvée à un collègue très doué pour écrire (un modèle génératif, un LLM). Ce collègue lit la fiche et la question, puis rédige une phrase naturelle. Il ne devine pas au hasard : il s'appuie uniquement sur la fiche qu'on lui a donnée.
$context = "La formation Laravel dure 40 heures. Elle comprend PHP, MVC, Eloquent et API REST."; $reponse = generateAnswer($question, $context); echo $reponse; // "La formation Laravel dure 40 heures et couvre PHP, MVC, Eloquent et les API REST."
Voir le code PHP de l'appel au modèle génératif
function generateAnswer(string $question, string $context): string {
$prompt = "Contexte :\n{$context}\n\nQuestion : {$question}\n"
. "Réponds uniquement à partir du contexte ci-dessus.";
$ch = curl_init('https://api.anthropic.com/v1/messages');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['content-type: application/json',
'x-api-key: ' . getenv('API_KEY'), 'anthropic-version: 2023-06-01'],
CURLOPT_POSTFIELDS => json_encode(['model' => 'claude-sonnet-5',
'max_tokens' => 300, 'messages' => [['role' => 'user', 'content' => $prompt]]]),
CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true
]);
$data = json_decode(curl_exec($ch), true);
return $data['content'][0]['text'];
}
Ne mettez jamais la clé API dans du code visible au navigateur ; gardez-la côté serveur.
Le voyage complet, en une seule image
Testez le Sami complet à essayer
Et dans la vraie vie, on croise ça où ?
Ces mots ne sont pas juste théoriques : vous les utilisez déjà, tous les jours.
Machine Learning
Deep Learning
Embeddings
Machine Learning
LLM (IA générative)
RAG — exactement l'histoire de Sami