08 Prompt engineering
Contexte, source de vérité et ambiguïté
8.4 Fournir du contexte utile 📚
Définition
Le context crafting consiste à fournir à Copilot le bon contexte pour améliorer la qualité de sa réponse.
D’où Copilot tire son contexte est expliqué en 7.1 ; ici, tu décides quoi fournir et quoi omettre. GitHub recommande de supprimer les requêtes qui ne sont plus utiles dans une conversation Copilot Chat. (docs.github.com)
Contexte utile typique
Tu peux fournir :
- langage
- framework
- fichier concerné
- fonction sélectionnée
- erreur complète
- stack trace nettoyée
- tests existants
- comportement attendu
- comportement actuel
- convention du projet
- règle métier
- dépendances autorisées
- contraintes de sécurité
Exemple sans contexte ❌
Why is this broken?Copilot ne sait pas :
- ce qui est cassé ;
- quel est le comportement attendu ;
- quelle erreur apparaît ;
- quels fichiers sont concernés ;
- ce qui a changé récemment.
Exemple avec contexte ✅
This Jest test fails after the recent change to UserService.
Expected behavior:
- deactivated users should not receive password reset emails.
Actual behavior:
- the service still sends a reset email.
Use:
- UserService.ts
- PasswordResetService.ts
- user.service.test.ts
Find the root cause and propose the minimal fix.
Do not change the public API.Exemple avec stack trace
Mauvais prompt :
Fix this error.Bon prompt :
Analyze this stack trace and the selected code.
Error:
TypeError: Cannot read properties of undefined (reading 'items')
Expected behavior:
If the order has no items, return an empty summary.
Constraints:
- Do not hide other data quality issues.
- Add a unit test for the missing items case.Exemple avec conventions projet
Generate a new RefundService following the same structure as PaymentService.ts.
Use:
- the same logging pattern
- the same error handling style
- the same dependency injection approach
- Jest tests similar to payment.service.test.tsBon contexte ≠ beaucoup de contexte
Attention : donner trop de contexte peut aussi dégrader la réponse.
Mauvais :
Voici 18 fichiers, toute l’architecture, 3 anciennes versions, 2 logs non liés, et une vague demande.Meilleur :
Voici le service, le test qui échoue, la stack trace, et le comportement attendu.À retenir
Le bon contexte est pertinent, minimal et orienté tâche.
8.5 Référencer le bon fichier ou extrait de code 📁
Définition
Référencer le bon fichier signifie guider Copilot vers la bonne source de vérité.
Dans l’IDE, cela peut passer par :
- ouvrir les fichiers pertinents ;
- sélectionner le bon bloc ;
- mentionner explicitement un fichier ;
- utiliser les références disponibles selon l’environnement ;
- fermer les fichiers non pertinents.
Exemple classique
Tu as trois fichiers :
PaymentService.ts
PaymentService.old.ts
PaymentService.experimental.tsPrompt vague :
Follow the payment service style.Risque :
Copilot peut utiliser le mauvais fichier comme inspiration.
Meilleur prompt
Use PaymentService.ts as the source of truth.
Ignore PaymentService.old.ts and PaymentService.experimental.ts.
Create RefundService.ts with the same dependency injection, logging, and error handling style.Exemple avec sélection
Tu sélectionnes :
export function calculateRiskScore(user: User): number {
let score = 0;
if (user.failedLoginAttempts > 5) {
score += 20;
}
if (user.hasNewDevice) {
score += 15;
}
return score;
}Bon prompt :
Review only the selected function.
Goal:
Improve readability and make scoring rules easier to extend.
Constraints:
- Do not change current scoring values.
- Do not add demographic or protected attributes.
- Keep return type as number.
- Suggest unit tests.Exemple avec fichier de test
Generate tests for UserService.ts.
Follow the style and naming conventions in user.service.test.ts.
Do not create a new test framework setup.Exemple avec README
Use the API behavior described in README.md.
Update the selected endpoint implementation to match the documented response format.À retenir
Copilot répond mieux quand tu lui indiques explicitement la source de vérité.
8.11 Réduire l’ambiguïté 🧭
Définition
Réduire l’ambiguïté consiste à empêcher Copilot de deviner ce que tu veux dire.
Un prompt ambigu laisse trop de choix à Copilot.
Exemples de prompts ambigus
Fix this.
Improve this service.
Make it secure.
Optimize this.
Rewrite this module.Problème :
Ces prompts ne disent pas :
- quoi modifier ;
- pourquoi le modifier ;
- ce qu’il faut préserver ;
- ce qu’il faut éviter ;
- comment valider le résultat.
Exemples améliorés
Au lieu de :
Optimize this service.Écris :
Optimize this service to reduce database calls.
Preserve the response format and public API.
Identify repeated queries.
Suggest caching only if it does not introduce stale data risks.
Add tests or explain what tests should be updated.Au lieu de :
Make it secure.Écris :
Review this Express route for authentication, authorization, input validation, SQL injection, sensitive logging, and unsafe error messages.
Return risks and recommended fixes.
Do not modify code yet.À retenir pour le GH-300
- Le bon contexte est pertinent, autorisé et lié à la tâche : plus de fichiers ne signifie pas automatiquement une meilleure réponse.
- Une source de vérité explicite réduit l’ambiguïté ; un fichier obsolète ou sans rapport peut au contraire orienter Copilot dans la mauvaise direction.
- Le contexte explique ce que Copilot peut utiliser, tandis que le prompt exprime la demande : ils se complètent sans imposer un modèle unique.
Pratique : Améliorer un prompt vague
Voici des prompts vagues. Réécris-en au moins quelques-uns pour qu’ils énoncent explicitement un objectif, du contexte, l’entrée concernée, des contraintes, le format attendu et des critères de validation. Aucune IA n’intervient : seule la complétude du prompt est analysée, à partir de sa formulation.
Prompt 1 sur 5
Prompt à améliorer
Why is this broken?
Écris-le comme tu le saisirais dans Copilot Chat, en anglais (comme dans le cours) ou en français. Invente les détails utiles (langage, fichier, règle métier…).
Questions de la leçon
Chargement de la question…
Pour finir
À retenir
- Le bon contexte est pertinent, autorisé et lié à la tâche : plus de fichiers ne signifie pas automatiquement une meilleure réponse.
- Une source de vérité explicite réduit l’ambiguïté ; un fichier obsolète ou sans rapport peut au contraire orienter Copilot dans la mauvaise direction.
- Le contexte explique ce que Copilot peut utiliser, tandis que le prompt exprime la demande : ils se complètent sans imposer un modèle unique.
Objectifs GH-300
- Détermination du contexte (Understand how context is determined)
- Principes (Explain prompt engineering principles)
Achèvement
Il reste à faire : , .