08 Prompt engineering
Zero-shot et few-shot
8.6 Zero-shot prompting 🎯
Définition
Le zero-shot prompting consiste à demander une tâche sans fournir d’exemple.
Tu donnes seulement une instruction.
Exemple :
Generate a Python function that validates an email address.Tu ne fournis aucun exemple d’entrée/sortie.
Le concept général de zero-shot prompting est une instruction directe sans exemple fourni au modèle. (learnprompting.org)
Exemple zero-shot simple
Prompt :
Create a TypeScript function that converts a string to kebab-case.Réponse possible :
export function toKebabCase(input: string): string {
return input
.trim()
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-+|-+$/g, "");
}Quand utiliser zero-shot ?
Zero-shot est utile pour :
- tâches simples ;
- boilerplate ;
- fonctions standards ;
- génération de petits helpers ;
- explications simples ;
- commandes courantes ;
- premiers drafts.
Limite du zero-shot
Sans exemple, Copilot peut mal comprendre :
- le format attendu ;
- les cas limites ;
- la convention métier ;
- le style du projet ;
- les règles exactes.
Exemple où zero-shot est insuffisant
Prompt :
Create a function to format customer IDs.Copilot ne sait pas si tu veux :
CUST-001
customer_001
001-CUSTOMER
UUID
format interne spécialMeilleur prompt :
Create a function to format customer IDs.
Expected format:
- Input: 42
- Output: CUST-000042
Rules:
- always prefix with CUST-
- pad numeric IDs to 6 digits
- throw ValueError for negative IDsAvec un ou plusieurs exemples, tu passes au few-shot. Le terme one-shot désigne le cas particulier d’un seul exemple : reconnais-le, mais ne le traite pas comme un objectif séparé du GH-300.
À retenir
Zero-shot = pas d’exemple.
Rapide, mais moins fiable pour les règles métier précises.
8.7 Few-shot prompting 🧩
Définition
Le few-shot prompting consiste à fournir un ou plusieurs exemples pour guider Copilot.
Tu donnes :
Voici des exemples d’entrée/sortie.
Maintenant applique la même logique à ce nouveau cas.Le few-shot prompting donne au modèle plusieurs démonstrations afin de guider sa réponse et améliorer la performance sur des tâches plus complexes. (promptingguide.ai)
Les exemples orientent la réponse courante ; ils ne réentraînent pas Copilot et ne remplacent pas la validation humaine.
Exemple simple
Prompt :
Create a function that normalizes product SKUs.
Examples:
Input: " abc-123 " → Output: "ABC-123"
Input: "sku_999" → Output: "SKU-999"
Input: "Product 42" → Output: "PRODUCT-42"
Rules:
- trim spaces
- uppercase letters
- replace spaces and underscores with hyphens
- keep numbersCopilot comprend beaucoup mieux le format attendu.
Exemple en code
Prompt :
Implement normalizeSku(input: string): string using these examples:
normalizeSku(" abc-123 ") should return "ABC-123"
normalizeSku("sku_999") should return "SKU-999"
normalizeSku("Product 42") should return "PRODUCT-42"
Also add Jest tests for these examples.Réponse possible :
export function normalizeSku(input: string): string {
return input
.trim()
.toUpperCase()
.replace(/[\s_]+/g, "-");
}Tests :
describe("normalizeSku", () => {
it("normalizes SKU with spaces", () => {
expect(normalizeSku(" abc-123 ")).toBe("ABC-123");
});
it("replaces underscores with hyphens", () => {
expect(normalizeSku("sku_999")).toBe("SKU-999");
});
it("replaces spaces with hyphens", () => {
expect(normalizeSku("Product 42")).toBe("PRODUCT-42");
});
});Exemple métier
Tu veux classifier des tickets.
Prompt few-shot :
Classify support tickets into: Billing, Authentication, Performance, Bug, Feature Request.
Examples:
"User cannot reset password" → Authentication
"Invoice amount is incorrect" → Billing
"Dashboard takes 20 seconds to load" → Performance
"Export button throws 500" → Bug
"Can we add CSV export?" → Feature Request
Classify:
"Login works but MFA code is never received"Réponse attendue :
AuthenticationQuand utiliser few-shot ?
Utilise few-shot pour :
- règles métier ;
- format précis ;
- conventions internes ;
- transformation de données ;
- génération de tests alignés ;
- classification ;
- messages d’erreur standardisés ;
- code style spécifique ;
- mapping complexe.
Few-shot dans un contexte dev
Tu peux fournir un exemple de test existant :
it("returns 400 when email is missing", async () => {
const response = await request(app)
.post("/users")
.send({ name: "Alice" });
expect(response.status).toBe(400);
expect(response.body.error).toBe("email is required");
});Puis demander :
Generate tests for missing password and invalid email using the same style.Copilot va imiter le style.
À retenir
Few-shot = donner un ou plusieurs exemples pour guider le format et la logique.
Très utile pour réduire l’ambiguïté.
À retenir pour le GH-300
- Zero-shot signifie une instruction sans exemple fourni ; il convient souvent à une tâche simple ou à un premier brouillon.
- Few-shot fournit quelques exemples représentatifs pour montrer un format, une classification ou une règle métier ambiguë.
- Les exemples doivent être sélectionnés et cohérents : le few-shot n’est pas automatiquement meilleur et des exemples bruités peuvent induire la réponse en erreur.
Pratique : Zero-shot ou few-shot ?
Préparation des situations…
Questions de la leçon
Chargement de la question…
Pour finir
À retenir
- Zero-shot signifie une instruction sans exemple fourni ; il convient souvent à une tâche simple ou à un premier brouillon.
- Few-shot fournit quelques exemples représentatifs pour montrer un format, une classification ou une règle métier ambiguë.
- Les exemples doivent être sélectionnés et cohérents : le few-shot n’est pas automatiquement meilleur et des exemples bruités peuvent induire la réponse en erreur.
Objectif GH-300
- Zero-shot / Few-shot (Use zero-shot and few-shot prompting)
Achèvement
Il reste à faire : , .