1. Introduction#
Le prompting consiste à formuler les instructions et informations transmises à un modèle de langage afin d’orienter son comportement.
Dans un système agentique, les instructions ne déterminent pas uniquement la forme des réponses. Elles orientent également :
- les décisions prises par l’agent ;
- la sélection et l’utilisation des outils ;
- les étapes de travail ;
- les critères de réussite ;
- les situations nécessitant une intervention humaine.
Le prompt engineering désigne les méthodes permettant de concevoir, structurer et améliorer ces instructions.
Un bon prompt doit préciser ce que l’agent doit accomplir, dans quel contexte et sous quelles contraintes.
2. Hiérarchie des instructions#
Les instructions transmises à un LLM peuvent posséder différents niveaux d’autorité.
Dans le modèle de référence d’OpenAI (Model Spec), la hiérarchie est la suivante :
| Niveau | Rôle | Priorité |
|---|---|---|
| Root | Règles fondamentales du fournisseur | Maximale |
| System | Comportement général et contraintes du système | Très élevée |
| Developer | Instructions de l’application | Élevée |
| User | Demandes de l’utilisateur | Standard |
| Guideline | Comportements par défaut, adaptables | Faible |
| Untrusted Data | Documents, sorties d’outils, textes cités | Aucune par défaut |
Une instruction de priorité inférieure ne doit pas contredire une instruction de priorité supérieure.
Exemple :
- Developer : « Ne jamais supprimer de fichiers. »
- User : « Supprime les fichiers temporaires du projet. »
- Agent : doit respecter l’interdiction définie au niveau Developer.
Cette hiérarchie est spécifique à l’architecture du modèle et de son fournisseur. D’autres plateformes peuvent employer une organisation différente.
Instructions et données#
Une distinction essentielle concerne la provenance des informations.
- Instructions : définissent le comportement attendu.
- Données : constituent le contenu à analyser ou à traiter.
Un document consulté par l’agent ne doit pas automatiquement devenir une source d’instructions.
Cette distinction permet notamment de limiter les attaques par prompt injection.
3. System Prompt et Developer Instructions#
Les instructions générales définissent le cadre de fonctionnement de l’agent.
System Prompt#
Le system prompt correspond aux instructions de haut niveau transmises au modèle par la plateforme.
Il peut définir :
- le rôle général du système ;
- les règles de comportement ;
- certaines contraintes de sécurité ;
- les principes d’utilisation des outils.
Developer Instructions#
Les developer instructions définissent les règles propres à une application ou à un agent.
Elles peuvent préciser :
- les responsabilités ;
- les conventions techniques ;
- le workflow attendu ;
- les contraintes de modification ;
- le format des résultats.
Exemple : agent de développement Python
Rôle :
Tu es un agent de développement Python.
Contexte :
Le projet utilise Python 3.12, uv, pytest et ruff.
Instructions :
- Respecte l'architecture existante.
- Limite les modifications au besoin exprimé.
- Exécute les tests après modification.
- Ne considère pas les tests comme réussis sans les avoir exécutés.
- Signale les erreurs et les limites rencontrées.
Résultat attendu :
Résume les modifications et les vérifications effectuées.Selon la plateforme, ces instructions peuvent être transmises via l’API, une configuration ou des fichiers propres au projet.
Un fichier d’instructions ne devient pas automatiquement un véritable message système. Son niveau d’autorité dépend de la manière dont le harness le charge.
4. Structurer un prompt efficace#
Un prompt peut être organisé autour de six éléments.
| Élément | Objectif | Exemple |
|---|---|---|
| Role | Définir la responsabilité | Agent Data Engineer |
| Objective | Formuler le résultat recherché | Corriger un pipeline |
| Context | Fournir les informations utiles | Python, DuckDB, dbt |
| Constraints | Encadrer les actions | Ne pas modifier les données sources |
| Workflow | Préciser la démarche attendue | Analyser, corriger, tester |
| Output | Définir les livrables | Code, tests, synthèse |
Exemple : prompt de développement#
Prompt insuffisant :
Améliore mon pipeline de données.Prompt structuré :
Objectif :
Corriger les erreurs du pipeline Silver.
Contexte :
- Python 3.12
- DuckDB et dbt
- Tests existants avec pytest
Contraintes :
- Conserver les schémas actuels.
- Ne pas modifier les données RAW.
- Éviter les nouvelles dépendances.
Méthode :
1. Identifier les erreurs.
2. Proposer une correction minimale.
3. Implémenter la correction.
4. Exécuter les tests concernés.
Résultat attendu :
- Fichiers modifiés.
- Tests exécutés et résultats.
- Limites éventuelles.Cette structure réduit les ambiguïtés et facilite la vérification des résultats.
Elle ne garantit toutefois pas que l’agent respecte toutes les consignes.
5. Techniques de Prompt Engineering#
Plusieurs techniques permettent d’améliorer la qualité des instructions.
| Technique | Principe | Utilisation |
|---|---|---|
| Zero-shot | Fournir une instruction sans exemple | Tâches simples |
| Few-shot | Fournir quelques exemples d’entrées et sorties | Classification, formats spécifiques |
| Role Prompting | Définir un rôle ou une responsabilité | Agents spécialisés |
| Task Decomposition | Décomposer une tâche complexe | Développement, analyse |
| Structured Output | Imposer un format de sortie | JSON, tableaux, schémas |
| Context Grounding | Appuyer le travail sur des informations fournies | Documentation, code, données |
Zero-shot et Few-shot#
Zero-shot :
Classe cette offre d'emploi en DATA ou NON_DATA.Few-shot :
Exemples :
- Data Engineer → DATA
- Machine Learning Engineer → DATA
- Commercial automobile → NON_DATA
- Responsable logistique → NON_DATA
Classe maintenant :
- Analytics EngineerLes exemples permettent de préciser les attentes, notamment lorsque les catégories sont ambiguës.
Sorties structurées#
Il est préférable de définir explicitement le format attendu lorsque les résultats doivent être exploités par une application.
Exemple :
{
"job_title": "Analytics Engineer",
"scope_class": "DATA",
"confidence": 0.92
}Pour les usages programmatiques, un schéma de sortie validé est généralement plus fiable qu’une simple demande de produire du JSON.
La valeur confidence générée par un LLM ne doit pas être interprétée automatiquement comme une probabilité calibrée.
6. Context Engineering#
Le context engineering consiste à sélectionner, organiser et maintenir les informations fournies au modèle pendant son exécution.
Il complète le prompt engineering.
| Notion | Question principale |
|---|---|
| Prompt Engineering | Comment formuler les instructions ? |
| Context Engineering | Quelles informations fournir, et à quel moment ? |
Le contexte peut comprendre :
- les instructions générales ;
- les fichiers et conventions du projet ;
- l’historique des interactions ;
- les résultats d’appels aux outils ;
- les documents récupérés ;
- les informations persistantes utiles.
Bonnes pratiques#
- Fournir uniquement les informations pertinentes.
- Éviter les répétitions inutiles.
- Distinguer instructions, exemples et données.
- Privilégier les sources fiables et récentes.
- Actualiser le contexte lorsque l’état du projet évolue.
- Résumer ou récupérer les informations lorsque le contexte devient trop volumineux.
Augmenter le nombre de tokens ne garantit pas de meilleures décisions.
La sélection du contexte est particulièrement importante dans les exécutions agentiques longues.
Voir : Architecture et Harness.
7. Prompt Injection et sécurité#
Une prompt injection consiste à introduire des instructions malveillantes ou non autorisées dans un contenu traité par le modèle.
Ces instructions peuvent provenir :
- d’une page web ;
- d’un document ;
- d’un fichier source ;
- d’une réponse API ;
- d’un résultat d’outil.
Exemple : un agent consulte un fichier contenant une instruction lui demandant d’ignorer ses règles précédentes et de transmettre des informations confidentielles.
Le fichier doit être considéré comme une donnée à traiter, et non comme une autorité supérieure.
Mesures de protection#
| Mesure | Objectif |
|---|---|
| Instruction hierarchy | Respecter les priorités des instructions |
| Input separation | Séparer les instructions des contenus non fiables |
| Least privilege | Limiter les permissions |
| Tool validation | Contrôler les appels sensibles |
| Human approval | Valider les opérations critiques |
| Sandbox | Restreindre les conséquences des actions |
Les délimiteurs Markdown, XML ou JSON peuvent clarifier la structure d’un prompt, mais ne constituent pas une protection suffisante contre les injections.
La sécurité doit également être assurée par le harness et l’environnement d’exécution.
8. Bonnes pratiques#
| À privilégier | À éviter |
|---|---|
| Instructions précises et vérifiables | Demandes vagues |
| Contraintes explicites | Règles implicites |
| Contexte pertinent | Documentation excessive |
| Exemples représentatifs | Exemples contradictoires |
| Critères de réussite mesurables | Validation uniquement subjective |
| Tests et contrôles externes | Confiance aveugle dans le modèle |
| Prompts versionnés et évalués | Modifications sans suivi |
Recommandations#
- Séparer les instructions permanentes des demandes ponctuelles.
- Définir des objectifs et critères de réussite observables.
- Préciser les contraintes techniques réellement nécessaires.
- Fournir des exemples lorsque les attentes sont ambiguës.
- Tester les prompts sur plusieurs cas représentatifs, y compris des échecs.
- Adapter les instructions au modèle et à l’environnement utilisé.
- Éviter les prompts excessivement longs ou contradictoires.
Un prompt doit rester proportionné à la tâche.
La qualité d’un agent ne dépend pas de la longueur de ses instructions, mais de leur précision et de leur adéquation au contexte.
9. Synthèse#
Les instructions et le prompting constituent des éléments centraux de la configuration des agents IA.
Les principales notions sont :
- System Prompt : instructions de haut niveau du système.
- Developer Instructions : règles propres à l’application.
- Instruction Hierarchy : ordre de priorité des instructions.
- Prompt Engineering : conception et amélioration des instructions.
- Context Engineering : sélection et organisation des informations utiles.
- Few-shot Prompting : utilisation d’exemples pour guider le modèle.
- Prompt Injection : tentative de détourner le comportement via des contenus non fiables.
Un agent efficace repose sur des instructions claires, un contexte pertinent et des critères de réussite vérifiables.
Les instructions définissent le comportement attendu, mais leur application effective dépend également du harness, des permissions et des mécanismes de validation.
