↓ Aller au contenu

Instructions et Prompting

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 :

NiveauRôlePriorité
RootRègles fondamentales du fournisseurMaximale
SystemComportement général et contraintes du systèmeTrès élevée
DeveloperInstructions de l’applicationÉlevée
UserDemandes de l’utilisateurStandard
GuidelineComportements par défaut, adaptablesFaible
Untrusted DataDocuments, sorties d’outils, textes citésAucune 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émentObjectifExemple
RoleDéfinir la responsabilitéAgent Data Engineer
ObjectiveFormuler le résultat recherchéCorriger un pipeline
ContextFournir les informations utilesPython, DuckDB, dbt
ConstraintsEncadrer les actionsNe pas modifier les données sources
WorkflowPréciser la démarche attendueAnalyser, corriger, tester
OutputDéfinir les livrablesCode, 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.

TechniquePrincipeUtilisation
Zero-shotFournir une instruction sans exempleTâches simples
Few-shotFournir quelques exemples d’entrées et sortiesClassification, formats spécifiques
Role PromptingDéfinir un rôle ou une responsabilitéAgents spécialisés
Task DecompositionDécomposer une tâche complexeDéveloppement, analyse
Structured OutputImposer un format de sortieJSON, tableaux, schémas
Context GroundingAppuyer le travail sur des informations fourniesDocumentation, 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 Engineer

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

NotionQuestion principale
Prompt EngineeringComment formuler les instructions ?
Context EngineeringQuelles 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
#

MesureObjectif
Instruction hierarchyRespecter les priorités des instructions
Input separationSéparer les instructions des contenus non fiables
Least privilegeLimiter les permissions
Tool validationContrôler les appels sensibles
Human approvalValider les opérations critiques
SandboxRestreindre 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érifiablesDemandes vagues
Contraintes explicitesRègles implicites
Contexte pertinentDocumentation excessive
Exemples représentatifsExemples contradictoires
Critères de réussite mesurablesValidation uniquement subjective
Tests et contrôles externesConfiance aveugle dans le modèle
Prompts versionnés et évaluésModifications sans suivi

Recommandations
#

  1. Séparer les instructions permanentes des demandes ponctuelles.
  2. Définir des objectifs et critères de réussite observables.
  3. Préciser les contraintes techniques réellement nécessaires.
  4. Fournir des exemples lorsque les attentes sont ambiguës.
  5. Tester les prompts sur plusieurs cas représentatifs, y compris des échecs.
  6. Adapter les instructions au modèle et à l’environnement utilisé.
  7. É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.


Références
#

Thibault CLEMENT - Intechnia
Auteur
Thibault CLEMENT - Intechnia
Data Scientist / ML Engineer