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 :

Texte
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 :

Texte
Create a TypeScript function that converts a string to kebab-case.

Réponse possible :

TypeScript
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 :

Texte
Create a function to format customer IDs.

Copilot ne sait pas si tu veux :

Texte
CUST-001
customer_001
001-CUSTOMER
UUID
format interne spécial

Meilleur prompt :

Texte
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 IDs

Avec 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 :

Texte
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 :

Texte
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 numbers

Copilot comprend beaucoup mieux le format attendu.

Exemple en code

Prompt :

Texte
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 :

TypeScript
export function normalizeSku(input: string): string {
  return input
    .trim()
    .toUpperCase()
    .replace(/[\s_]+/g, "-");
}

Tests :

TypeScript
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 :

Texte
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 :

Texte
Authentication

Quand 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 :

TypeScript
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 :

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

D4 · Prompt engineering et context crafting · 10–15 %