Pourquoi le prompt engineering ?
Au Module 1, on a vu que le LLM est une machine a predire le prochain token. Le prompt engineering, c'est l'art de formuler ta requete pour que cette machine produise exactement ce que tu veux.
C'est la competence n°1 pour ton stage chez Selectra. Que ce soit pour l'agent vocal, l'analyse de transcripts, ou l'extraction de donnees client, tout commence par un bon prompt.
| Prompt naive | Prompt engineere | Difference |
|---|---|---|
| "Resume ce texte" | "Resume ce texte en 3 bullet points de max 15 mots chacun, en francais, au present" | Format, longueur, langue, temps verbal — tout est specifie |
| "Classe ce message" | "Classe ce message client dans une des categories suivantes : nouveau_logement, changement_fournisseur, suivi_contrat, reclamation. Reponds UNIQUEMENT avec le nom de la categorie." | Categories explicites, format de sortie contraint |
Zero-shot vs Few-shot
Prompt:
"Classe le message suivant dans une categorie :
Message : 'Je demenage le 15 mars et j'ai besoin d'electricite'
Categories : nouveau_logement, changement_fournisseur, suivi_contrat, reclamation"
Reponse du LLM:
"nouveau_logement"Ca marche souvent pour des taches simples. Mais pour des taches ambigues ou specifiques a ton domaine, le modele peut se tromper. C'est la que le few-shot entre en jeu.
Prompt:
"Classe chaque message client dans une categorie.
Message : 'Je demenage a Lyon le mois prochain'
Categorie : nouveau_logement
Message : 'EDF est trop cher, je veux changer'
Categorie : changement_fournisseur
Message : 'Mon contrat a ete signe il y a 2 semaines, toujours pas actif'
Categorie : suivi_contrat
Message : 'Bonjour, je viens d'acheter un appartement et j'ai besoin de mettre l'electricite a mon nom'
Categorie :"Avec ces 3 exemples, le modele comprend exactement le format attendu et les categories possibles. Il va repondre "nouveau_logement" de maniere beaucoup plus fiable.
| Approche | Quand l'utiliser | Avantage | Inconvenient |
|---|---|---|---|
| Zero-shot | Tache simple, bien connue du modele | Rapide, moins de tokens | Moins fiable sur des taches specifiques |
| One-shot | 1 exemple suffit a montrer le format | Bon compromis tokens/fiabilite | Un seul exemple peut etre trompeur |
| Few-shot (2-5) | Tache specifique, format precis, domaine metier | Tres fiable, le modele 'comprend' le pattern | Consomme plus de tokens (= plus cher) |
Chain-of-Thought — forcer le raisonnement
Parfois, le modele doit raisonner pour donner la bonne reponse. Le (CoT) le force a "reflechir a voix haute".
Exemple sans CoT :
Prompt: "Un client consomme 8000 kWh/an. L'offre A coute 0.18€/kWh + 12€/mois d'abonnement.
L'offre B coute 0.21€/kWh + 8€/mois. Quelle offre est la moins chere ?"
Reponse: "L'offre A" ← FAUX !Avec CoT :
Prompt: "Un client consomme 8000 kWh/an. L'offre A coute 0.18€/kWh + 12€/mois d'abonnement.
L'offre B coute 0.21€/kWh + 8€/mois. Quelle offre est la moins chere ?
Raisonne etape par etape avant de repondre."
Reponse:
"Etape 1 : Cout annuel de l'offre A
- Consommation : 8000 * 0.18 = 1440€
- Abonnement : 12 * 12 = 144€
- Total A = 1584€
Etape 2 : Cout annuel de l'offre B
- Consommation : 8000 * 0.21 = 1680€
- Abonnement : 8 * 12 = 96€
- Total B = 1776€
Etape 3 : Comparaison
1584€ < 1776€, donc l'offre A est moins chere.
Reponse : L'offre A est la moins chere (1584€/an vs 1776€/an)." ← CORRECTLa phrase magique : "Raisonne etape par etape" (ou "Let's think step by step" en anglais). Ca semble trivial, mais ca ameliore les resultats de 20-40% sur les benchmarks de raisonnement.
System prompts avances
Le system prompt, c'est la "constitution" de ton agent. C'est la que tu definis QUI il est, CE QU'il fait, et COMMENT il le fait. Pour un agent vocal Selectra, c'est probablement le morceau de code le plus important de tout le projet.
Tu es un agent de qualification telephonique pour Selectra, le premier comparateur d'offres
d'energie et d'internet en France.
## Ton role
Tu accueilles les clients qui appellent et collectes les informations necessaires pour leur
trouver la meilleure offre d'energie ou d'internet.
## Informations a collecter (dans cet ordre)
1. Le BESOIN : nouveau logement, changement de fournisseur, ou suivi de dossier
2. L'ADRESSE complete du logement concerne
3. Le FOURNISSEUR ACTUEL (si changement)
4. Le NUMERO PDL ou PCE (compteur electrique/gaz) — propose d'aider a le trouver si le client ne l'a pas
5. L'ESTIMATION DE CONSOMMATION annuelle (en kWh) — aide a estimer si le client ne sait pas
## Contraintes
- Parle en francais, vouvoie le client
- Sois concis : en vocal, les phrases longues sont penibles
- Pose UNE question a la fois, jamais deux
- Si le client s'enerve ou demande un humain, transfere immediatement
- Ne donne JAMAIS de prix invente — utilise uniquement les donnees de l'outil de comparaison
- Ne demande JAMAIS l'IBAN ou les infos bancaires — c'est le commercial humain qui le fera
## Format
Quand tu as collecte toutes les infos, appelle l'outil "comparer_offres" avec les parametres structures.
Presente les 3 meilleures offres au client, puis propose de le transferer a un conseiller
pour finaliser la souscription.Role (qui tu es)
Definis clairement l'identite. "Tu es un agent de qualification Selectra" est bien meilleur que "Tu es un assistant utile".
Contexte (le monde dans lequel tu operes)
Donne le contexte metier. Le modele ne connait pas Selectra, les PDL, ni le marche de l'energie francais. Explique-lui.
Tache (ce que tu dois faire)
Liste ordonnee des informations a collecter. L'ordre compte — on ne demande pas le PDL avant l'adresse.
Contraintes (les guardrails)
Ce que le modele ne doit PAS faire est aussi important que ce qu'il doit faire. Sans guardrails, il va inventer des prix ou demander un IBAN.
Format de sortie
Specifie exactement comment la sortie doit etre structuree. Pour du tool calling : quand appeler quel outil, avec quels parametres.
Structured Output — extraire des donnees typees
Jusqu'ici, le modele produit du texte libre. Mais dans un vrai systeme, tu veux des donnees structurees — du JSON avec des champs precis que ton code peut utiliser.
Le Vercel AI SDK rend ca trivial avec + un schema Zod :
import { generateText, Output } from "ai";
import { z } from "zod";
// Schema Zod = la structure exacte que tu attends
const ficheClientSchema = z.object({
intent: z.enum(["nouveau_logement", "changement_fournisseur", "suivi_contrat", "reclamation"]),
adresse: z.string().optional().describe("Adresse complete du logement"),
fournisseurActuel: z.string().optional().describe("Nom du fournisseur actuel"),
numeroPDL: z.string().optional().describe("Numero PDL (14 chiffres)"),
consommationKwh: z.number().optional().describe("Consommation annuelle estimee en kWh"),
dateEmmenagement: z.string().optional().describe("Date d'emmenagement au format YYYY-MM-DD"),
urgence: z.enum(["basse", "normale", "haute"]).describe("Niveau d'urgence"),
});
// Appel API avec structured output
const result = await generateText({
model: "anthropic/claude-sonnet-4.6",
output: Output.object({ schema: ficheClientSchema }),
prompt: `Extrais les informations client du transcript suivant :
Transcript:
"Bonjour, je demenage a Lyon au 42 rue de la Republique le 15 avril.
J'etais chez EDF avant, mon compteur c'est le 09234567890123.
On consomme environ 6000 kWh par an, c'est un T3."
Remplis la fiche client.`
});
// result.object est TYPE-SAFE grace a Zod
console.log(result.object);
// {
// intent: "nouveau_logement",
// adresse: "42 rue de la Republique, Lyon",
// fournisseurActuel: "EDF",
// numeroPDL: "09234567890123",
// consommationKwh: 6000,
// dateEmmenagement: "2026-04-15",
// urgence: "normale"
// }Pipeline d'extraction structuree
Transcript d'appel (texte brut)
|
[ LLM + schema Zod ]
|
JSON structure type-safe
|
┌──────────────────┐
│ intent: "..." │
│ adresse: "..." │
│ PDL: "..." │
│ conso: 6000 │
└──────────────────┘
|
[ Outil de comparaison ]
|
Top 3 offres
Techniques avancees
Quelques techniques supplementaires que tu croiseras en production.
System prompt:
"""
Tu es un classificateur d'intent Selectra.
"""
Exemples:
---
Message: "Je demenage"
Intent: nouveau_logement
---
Message: "EDF est trop cher"
Intent: changement_fournisseur
---
Message a classifier:
###
{message_du_client}
###
Reponds avec l'intent uniquement.FAIS :
- Pose une question a la fois
- Vouvoie le client
- Utilise des phrases courtes
NE FAIS PAS :
- N'invente jamais de prix ou de tarifs
- Ne demande jamais de coordonnees bancaires
- Ne fais pas de promesses sur les delais
- Ne dis jamais "en tant qu'IA" ou "en tant que modele de langage"| Prompt vague | Role-play precis |
|---|---|
| "Tu es un assistant" | "Tu es Marie, conseillere Selectra depuis 3 ans, specialiste du marche de l'energie. Tu parles avec un ton professionnel mais chaleureux." |
| "Aide le client" | "Tu suis le script de qualification Selectra : accueil → identification du besoin → collecte d'infos → comparaison → transfert conseiller." |
Application : le prompt de l'agent Selectra
Mettons tout ensemble. Voici un system prompt complet pour l'agent vocal Selectra, utilisant toutes les techniques vues dans ce module.
## Identite
Tu es l'agent vocal de qualification Selectra. Tu reponds au telephone pour aider
les clients a trouver la meilleure offre d'energie ou d'internet.
## Contexte
Selectra est le 1er comparateur d'offres d'energie en France. Les clients appellent
pour : ouvrir un contrat (demenagement), changer de fournisseur (facture trop chere),
suivre un dossier existant, ou faire une reclamation.
## Objectif
Qualifier le besoin du client en collectant les informations necessaires, puis le
transferer a un conseiller humain avec la fiche pre-remplie.
## Processus (suis cet ordre)
1. ACCUEIL : "Bonjour, bienvenue chez Selectra. Comment puis-je vous aider ?"
2. IDENTIFICATION : Determine l'intent (nouveau_logement, changement, suivi, reclamation)
3. COLLECTE selon l'intent :
- nouveau_logement : adresse, date emmenagement, type de logement, PDL si disponible
- changement : fournisseur actuel, motif, adresse, consommation annuelle
- suivi : numero de dossier → appelle l'outil lookup_dossier
- reclamation : ecoute, resume, → transfert immediat
4. COMPARAISON : appelle l'outil comparer_offres avec les donnees collectees
5. PRESENTATION : presente les 3 meilleures offres (nom, prix mensuel estime, avantages)
6. TRANSFERT : "Je vous transfère à un conseiller pour finaliser. Il aura toutes vos infos."
## Exemples de conversation (few-shot)
Client : "Je demenage"
Agent : "Felicitations ! Quelle est l'adresse de votre nouveau logement ?"
Client : "EDF me coute trop cher"
Agent : "Je comprends. Savez-vous combien vous consommez par an en kWh ? Vous pouvez le trouver sur votre derniere facture."
Client : "J'ai souscrit la semaine derniere, j'ai rien recu"
Agent : "Je vais verifier l'avancement de votre dossier. Pouvez-vous me donner votre numero de dossier ?"
Client : "Passez-moi un responsable !"
Agent : "Bien sur, je vous transfère immédiatement à un conseiller. Un instant s'il vous plait."
## Contraintes absolues
- JAMAIS inventer de prix. Utilise UNIQUEMENT les resultats de comparer_offres.
- JAMAIS demander IBAN, RIB, ou coordonnees bancaires.
- TOUJOURS vouvoyer.
- UNE question a la fois. En vocal, c'est crucial.
- Si le client demande un humain ou s'enerve → transfert IMMEDIAT, pas de debat.
- Phrases COURTES (max 2 lignes). Le vocal n'est pas l'ecrit.
- Ne JAMAIS mentionner que tu es une IA sauf si on te le demande directement.Ce prompt utilise toutes les techniques du module :
| Technique | Ou dans le prompt |
|---|---|
| Role-play | "Tu es l'agent vocal de qualification Selectra" |
| Structure (Role → Contexte → Tache → Contraintes) | Les sections ## |
| Few-shot | Les exemples de conversation |
| Negative prompting | Les contraintes "JAMAIS", "NE PAS" |
| Delimiters | Les ## pour separer les sections |
| Specifique vs vague | Chaque etape du processus est detaillee |
Quiz final
Verifions que le prompt engineering n'a plus de secrets pour toi.
Module 02 termine
Tu maitrises maintenant le zero/few-shot, le chain-of-thought, les system prompts structures, et le structured output. Tu as meme ecrit le prompt complet de l'agent vocal Selectra. Prochain module : RAG — donner de la memoire aux LLMs.