← Retour
Module 02

Prompt Engineering

L'art de parler aux LLMs. Few-shot, chain-of-thought, system prompts, structured output — avec des exemples concrets pour un agent Selectra.

01

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.

Analogie

Un LLM, c'est comme un stagiaire brillant mais literal. Si tu lui dis "fais un resume", il va te faire un resume — mais peut-etre pas dans le format, la longueur, ou le style que tu veux. Le prompt engineering, c'est apprendre a donner des instructions precises a ce stagiaire.

Prompt naivePrompt engineereDifference
"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
02

Zero-shot vs Few-shot

Concept cle

Zero-shot

Tu donnes une instruction au modele sans aucun exemple. Tu comptes sur le fait qu'il a deja vu des taches similaires pendant son entrainement.

zero-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.

Concept cle

Few-shot

Tu donnes 2 a 5 exemplesde la tache avant de poser ta question. Le modele comprend le pattern et le reproduit. C'est comme montrer a quelqu'un "voila le format que je veux" avant de lui demander de bosser.

few-shot (3 exemples)
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.

ApprocheQuand l'utiliserAvantageInconvenient
Zero-shotTache simple, bien connue du modeleRapide, moins de tokensMoins fiable sur des taches specifiques
One-shot1 exemple suffit a montrer le formatBon compromis tokens/fiabiliteUn seul exemple peut etre trompeur
Few-shot (2-5)Tache specifique, format precis, domaine metierTres fiable, le modele 'comprend' le patternConsomme plus de tokens (= plus cher)

Attention

Regle pour Selectra :utilise TOUJOURS du few-shot pour la classification d'intent dans l'agent vocal. Un client qui dit "je veux changer" peut vouloir changer de fournisseur OU changer d'offre chez le meme fournisseur. Les exemples levent l'ambiguite.

Quiz

Un client dit : 'Votre commercial m'a appele et j'ai souscrit mais je ne recois rien'. Zero-shot ou few-shot pour classifier ?

03

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".

Concept cle

Chain-of-Thought

Au lieu de demander directement la reponse, tu demandes au modele de raisonner etape par etape. Ca reduit considerablement les erreurs sur les taches complexes.

Exemple sans CoT :

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 :

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)." ← CORRECT

La 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.

Analogie

C'est comme en maths a l'X : ton prof te demande de montrer ton raisonnement, pas juste le resultat. Si tu forces le modele a montrer ses etapes, il se trompe moins — parce que chaque etape est un point de controle.

Attention

Quand NE PAS utiliser le CoT :pour des taches simples (classification d'intent, extraction d'une adresse). Le CoT ajoute de la latence et des tokens. Utilise-le uniquement quand il y a un vrai raisonnement a faire (comparaisons, calculs, decisions multi-criteres).

Quiz

Pour l'agent vocal Selectra, quand utiliser le Chain-of-Thought ?

04

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.

Concept cle

Structure d'un system prompt pro

Un bon system prompt suit cette structure : Role → Contexte → Tache → Contraintes → Format de sortie → Exemples. Plus tu es precis, moins le modele improvise.

system prompt — agent Selectra
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.
1

Role (qui tu es)

Definis clairement l'identite. "Tu es un agent de qualification Selectra" est bien meilleur que "Tu es un assistant utile".

2

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.

3

Tache (ce que tu dois faire)

Liste ordonnee des informations a collecter. L'ordre compte — on ne demande pas le PDL avant l'adresse.

4

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.

5

Format de sortie

Specifie exactement comment la sortie doit etre structuree. Pour du tool calling : quand appeler quel outil, avec quels parametres.

Attention

Les guardrails sont CRITIQUES.Sans la contrainte "ne donne jamais de prix invente", le modele va halluciner des tarifs. Sans "pose une question a la fois", il va bombarder le client avec 3 questions d'un coup (horrible en vocal). Teste toujours les cas limites.

Quiz

Quel est le probleme de ce system prompt : 'Tu es un assistant Selectra. Aide les clients.' ?

05

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.

Concept cle

Pourquoi le structured output ?

L'agent vocal Selectra doit remplir une fiche client avec des champs precis (adresse, PDL, fournisseur...). Tu ne veux pas parser du texte libre avec des regex — tu veux que le modele te donne directement un objet JSON type.

Le Vercel AI SDK rend ca trivial avec + un schema Zod :

typescript — extraction structuree
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

Attention

Structured output ≠ JSON dans le prompt.Demander "reponds en JSON" dans le prompt est fragile — le modele peut ajouter du texte autour, mal fermer une accolade, ou utiliser des types incorrects. Output.object() avec Zod garantit la structure au niveau du SDK.

Quiz

Pourquoi utiliser un schema Zod plutot que demander 'reponds en JSON' dans le prompt ?

06

Techniques avancees

Quelques techniques supplementaires que tu croiseras en production.

Concept cle

Delimiters (separateurs)

Utilise des delimiters clairs pour separer les parties de ton prompt : le contexte, les exemples, et la question. Ca evite que le modele confonde les exemples avec la vraie question.

delimiters
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.

Concept cle

Negative prompting

Dis au modele ce qu'il ne doit PAS faire. C'est souvent plus efficace que de dire ce qu'il doit faire.

negative prompting
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"

Concept cle

Role-play prompting

Donne un role tres precis au modele. Plus le role est specifique, meilleur est le resultat.

Prompt vagueRole-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."
07

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.

system prompt complet — production
## 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 :

TechniqueOu dans le prompt
Role-play"Tu es l'agent vocal de qualification Selectra"
Structure (Role → Contexte → Tache → Contraintes)Les sections ##
Few-shotLes exemples de conversation
Negative promptingLes contraintes "JAMAIS", "NE PAS"
DelimitersLes ## pour separer les sections
Specifique vs vagueChaque etape du processus est detaillee
08

Quiz final

Verifions que le prompt engineering n'a plus de secrets pour toi.

Quiz

Un client dit : 'Mon voisin a eu une super offre chez Engie, je veux la meme'. Comment l'agent doit reagir ?

Quiz

Quelle est la difference entre 'reponds en JSON' dans le prompt et Output.object() du AI SDK ?

Quiz

Pourquoi le system prompt de l'agent Selectra inclut 'UNE question a la fois' ?

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.