Nehos Groupe

L'essentiel

Le prompt engineering avancé désigne l'ensemble des techniques structurées — chain-of-thought, few-shot, structured output, system prompts architecturés — qui permettent d'extraire 40 à 70 % de qualité supplémentaire des LLM par rapport au prompting naïf.

Chain-of-thought force le modèle à raisonner étape par étape avant de répondre, réduisant drastiquement les erreurs de logique et de calcul sur des tâches complexes comme la classification ou l'analyse contractuelle.

Le JSON mode combiné à un schéma Zod de validation garantit des sorties structurées exploitables directement par vos APIs métier, sans parsing fragile ni hallucination de format.

Un système d'évaluation des prompts (LLM-as-judge + eval dataset représentatif) est non négociable en production : sans mesure, un changement de prompt peut dégrader silencieusement vos résultats.

Sur l'agent d'extraction juridique Nehos, l'application combinée de ces techniques a réduit le taux d'erreur de 30 % à 3 %, représentant une économie de 2,1 ETP et un traitement 30 fois plus rapide.

Prompt engineering avancé en entreprise : techniques, évaluation et optimisation 2026

Chain-of-thought, few-shot, structured output, system prompts de production — maîtriser ces techniques transforme la qualité des outputs LLM. Voici ce que les équipes Nehos appliquent sur chaque déploiement en production.

Adapté à toute taille de structure

Artisan
Startup
PME / TPE
ETI
Grand Groupe
C
Chokri Siala
··agents-ia

#Au-delà du prompting basique

Le prompting naïf ressemble à ceci : vous copiez-collez une question dans ChatGPT et espérez une bonne réponse. Le prompt engineering avancé, c'est une discipline d'ingénierie : concevoir, tester, versionner et optimiser les instructions données à un LLM pour obtenir des outputs fiables, reproductibles et directement exploitables dans un système de production.

La différence n'est pas cosmétique. Sur les benchmarks internes Nehos, le passage d'un prompt naïf à un prompt engineering structuré produit des gains de +40 à +70 % de qualité output mesurée (précision factuelle, cohérence du format, taux de conformité aux instructions). Ces chiffres varient selon la tâche, mais l'ordre de grandeur est systématiquement là.

Quatre familles de techniques constituent le socle du prompt engineering avancé en contexte professionnel :

  • Chain-of-thought (CoT) : forcer le modèle à décomposer son raisonnement avant de donner une réponse
  • Few-shot prompting : fournir des exemples input/output pour calibrer le comportement attendu
  • Structured output : contraindre la sortie à un format JSON, XML ou autre schéma défini
  • System prompts architecturés : définir rigoureusement le contexte, la persona, les contraintes et le format attendu

Pourquoi ça compte en entreprise ? Parce que la qualité d'un LLM en production n'est pas fixée par le modèle — elle est co-déterminée par la qualité du prompt. Deux entreprises qui utilisent GPT-4o peuvent obtenir des résultats radicalement différents sur une même tâche selon leur maîtrise du prompt engineering.


#Chain-of-Thought (CoT) et ses variantes

Le Chain-of-Thought est né d'une observation de Wei et al. (Google Brain, 2022) : ajouter simplement «Réfléchissons étape par étape» ("Think step by step") à un prompt améliore significativement les performances des LLM sur des tâches de raisonnement. L'explication : les tokens générés pour décrire le raisonnement intermédiaire servent d'espace de travail au modèle, lui permettant de mobiliser des capacités qu'il ne peut pas activer dans une réponse directe.

#CoT standard et Zero-shot CoT

CoT standard : vous fournissez des exemples de raisonnement complet (problème + chaîne de pensée + réponse). Le modèle apprend le schéma de raisonnement attendu. Efficace pour des tâches répétitives où vous pouvez investir dans la création d'exemples de qualité.

Zero-shot CoT : pas d'exemples — juste l'instruction "Raisonne étape par étape avant de répondre." Étonnamment puissant pour les tâches ad hoc. Sur les modèles récents (Claude 3.5, GPT-4o), zero-shot CoT est souvent suffisant pour des tâches d'analyse ou de déduction de complexité modérée.

#Auto-CoT, Tree-of-Thought et ReAct

Auto-CoT automatise la génération des chaînes de raisonnement d'exemples en demandant au LLM de produire lui-même les étapes. Utile quand vous n'avez pas de ground truth de raisonnement disponible pour construire vos exemples manuellement.

Tree-of-Thought (ToT) dépasse le chemin unique du CoT classique : le modèle explore plusieurs branches de raisonnement en parallèle, les évalue, et choisit la plus prometteuse. Pertinent pour les problèmes de planification, d'optimisation ou quand plusieurs approches sont possibles. Coût en tokens significativement plus élevé — à réserver aux tâches où la qualité prime sur la vitesse.

ReAct (Reasoning + Acting) est le pattern de référence pour les agents IA : le modèle alterne entre pensée (Thought), action (Action) et observation du résultat (Observation). C'est l'architecture qui sous-tend la plupart des frameworks d'orchestration comme LangGraph, CrewAI et n8n.

#Cas d'usage B2B concrets

La classification de sinistres assurance est un exemple canonique : sans CoT, le modèle donne souvent une catégorie sans justification, ce qui rend les erreurs impossibles à auditer. Avec CoT, il explicite les éléments du sinistre qui ont déterminé la classification — résultat auditable et corrigeable. Sur les projets de scoring de risque crédit, Tree-of-Thought permet de structurer l'analyse multi-critères (financier, comportemental, sectoriel) avant de produire un score synthétique. Pour l'analyse de conformité réglementaire, ReAct permet au modèle de chercher les textes pertinents (action), lire les passages récupérés (observation) et raisonner sur leur applicabilité (thought) avant de conclure.


#Few-shot prompting : l'art des exemples

Le few-shot prompting consiste à inclure dans le prompt des exemples de comportements attendus (input → output). C'est la technique de calibration la plus accessible et souvent la plus efficace pour adapter un LLM à un domaine métier spécifique sans passer par le fine-tuning.

#Nombre optimal d'exemples

La pratique industrielle converge vers 3 à 8 exemples pour la plupart des tâches. Moins de 3 exemples, le modèle ne généralise pas suffisamment le pattern ; plus de 8, vous consommez inutilement des tokens de contexte et risquez de sur-spécialiser le modèle sur vos exemples au détriment de la généralisation. Sur des tâches très complexes (extraction multi-champs, classification avec hiérarchie fine), 8 à 12 exemples peuvent être justifiés.

#Sélection des exemples

La sélection est l'étape la plus sous-estimée. Trois principes s'imposent :

  1. Diversité : couvrir la variété réelle des inputs que le modèle rencontrera. Des exemples trop similaires créent un modèle fragile sur les cas non représentés.
  2. Représentativité : vos exemples doivent refléter la distribution réelle des cas, pas seulement les cas faciles.
  3. Edge cases : inclure 1 à 2 exemples de cas limites ou ambigus — c'est là que le comportement du modèle diverge le plus sans guidage explicite.

#Format des exemples

Pour les tâches structurées, le format Input: [...] Output: [...] est simple et efficace. Pour des tâches qui nécessitent du contexte, Contexte: [...] Question: [...] Réponse: [...] donne de meilleurs résultats. Sur des tâches conversationnelles, des exemples en format messages (role: user / role: assistant) sont préférables car ils correspondent à la structure réelle du dialogue.

#Anti-patterns à éviter

Exemples trop similaires : si vos 5 exemples sont tous des cas positifs simples, le modèle sera mauvais sur les cas négatifs ou ambigus. Exemples biaisés : si vos exemples surreprésentent une catégorie, le modèle va sur-prédire cette catégorie en production. Exemples incorrects : un seul exemple erroné peut suffire à dégrader le comportement global — une revue qualité des exemples few-shot est indispensable avant mise en production.


#Structured Output et JSON mode

Les sorties non structurées d'un LLM posent un problème fondamental en production : elles sont difficiles à parser de façon fiable. Le JSON mode et les mécanismes de sortie contrainte résolvent ce problème en garantissant que le modèle produit une sortie parseable.

#JSON mode et schéma Zod

OpenAI et Anthropic exposent tous les deux un mode de sortie JSON forcée. Avec OpenAI (response_format: { type: "json_object" }) ou Anthropic (via instruction explicite + post-processing), le modèle est contraint à générer du JSON syntaxiquement valide. Mais la validité syntaxique ne garantit pas la validité sémantique — un champ status peut être "actif" au lieu de "active" si vous n'avez pas défini l'enum attendu.

La solution robuste : combiner JSON mode avec un schéma Zod pour valider la sortie à runtime. Si la sortie du LLM ne satisfait pas le schéma, vous relancez avec un prompt de correction ou déclenchez un fallback. Ce pattern « LLM + Zod runtime validation » est ce que Nehos implémente systématiquement sur ses agents en production.

#Function calling et Instructor

Le function calling (OpenAI) ou tool use (Anthropic) est une alternative puissante : vous définissez une fonction avec ses paramètres typés, et le modèle génère un appel à cette fonction plutôt qu'une réponse en texte libre. Le runtime extrait les paramètres typés directement — c'est structurellement plus fiable que le JSON mode libre.

La bibliothèque Instructor (Python, TypeScript) abstrait cette complexité : vous définissez un modèle Pydantic/Zod, et Instructor gère le retry automatique si la sortie ne valide pas le schéma. En production, c'est un gain de robustesse significatif.

#Cas d'usage : extraction et enrichissement

Le structured output est la technique de choix pour : l'extraction d'entités nommées (NER) avec Zod schema → { name: string, role: string, company: string }, la classification multi-labels avec enum de catégories, le remplissage de formulaires documents non structurés, et les APIs d'enrichissement qui doivent retourner un objet typé exploitable directement par un système aval. Ce dernier cas est au cœur du cas Nehos décrit en section 9.


#System prompts enterprise-grade

Un system prompt est l'instruction de base envoyée au modèle avant chaque conversation. En production enterprise, sa conception est un travail d'ingénierie à part entière — pas une simple description en quelques lignes.

#Architecture d'un system prompt de production

Un system prompt enterprise-grade se décompose en cinq blocs :

  1. Identité et contexte : qui est cette IA, pour quelle entreprise, dans quel périmètre d'action. «Tu es un assistant juridique de la société Acme SA, spécialisé dans l'analyse des contrats commerciaux de droit français.»
  2. Contraintes absolues : ce que le modèle ne fait jamais, quelles que soient les instructions utilisateur. «Tu ne donnes jamais d'avis juridique contraignant. Tu indiques toujours qu'une validation par un avocat est nécessaire.»
  3. Format de sortie : structure attendue, longueur, style. Référencer un schéma JSON si applicable.
  4. Persona et ton : niveau de formalisme, vocabulaire préféré, exemples de formulations attendues.
  5. Exemples de comportements : 2 à 3 échanges attendus pour illustrer les cas critiques.

#Versioning et évaluation automatisée

Les system prompts doivent être versionnés comme du code — dans git, avec des messages de commit explicites et un changelog. Un changement en apparence mineur (reformuler une contrainte, ajouter un exemple) peut significativement modifier le comportement du modèle. Sans historique, vous ne pouvez pas identifier quelle modification a causé une dégradation en production.

Le versioning s'accompagne d'une suite d'évaluation automatisée : à chaque modification du system prompt, lancez votre eval dataset et comparez les métriques avec la version précédente. Un CI qui bloque le merge si les métriques régressent est la protection minimale pour un système critique.

#Séparation system/user selon la sensibilité

Une règle de sécurité fondamentale : les données sensibles ne vont jamais dans le system prompt. Le system prompt peut être extrait ou injecté via des attaques de prompt injection (voir section sur la sécurité). Les données confidentielles (clauses contractuelles, données personnelles, information propriétaire) doivent être injectées dans le user message ou le contexte RAG, jamais hardcodées dans le system prompt partagé.


#Prompt chaining et orchestration

Certaines tâches sont trop complexes pour être résolues par un seul prompt. Le prompt chaining consiste à décomposer la tâche en étapes séquentielles, chaque prompt prenant en entrée le résultat du précédent.

#Décomposition et gestion du contexte inter-prompts

La décomposition efficace suit deux principes : chaque prompt doit avoir une responsabilité unique et bien délimitée (Single Responsibility Principle appliqué aux prompts), et la sortie de chaque prompt doit être structurée pour faciliter son utilisation comme entrée du suivant (d'où l'importance du structured output).

Le défi du chaining est la gestion du contexte inter-prompts. Si vous chaînez 5 ou 6 prompts sur un document long, injecter l'intégralité du contexte à chaque étape dépasse rapidement la fenêtre de contexte et explose le coût en tokens. Les solutions : résumé progressif (condenser ce qui est acquis après chaque étape), extraction sélective (ne passer aux étapes suivantes que les informations pertinentes pour cette étape), et condensation (réduire le contexte à ses éléments essentiels avant injection).

#Prompt routing et parallel prompting

Le prompt routing est une technique puissante : un premier prompt classifie la requête entrante, et cette classification détermine quel prompt spécialisé est appliqué ensuite. Plutôt qu'un prompt généraliste médiocre sur tout, vous avez un ensemble de prompts experts, chacun optimisé pour une catégorie de tâche. Sur un agent de traitement de demandes client, le routing (facturation / technique / résiliation / autre) permet d'utiliser des prompts avec des exemples few-shot spécifiques à chaque type.

Le parallel prompting consiste à soumettre la même requête à plusieurs configurations de prompts simultanément et à comparer les résultats. Utile en phase de développement pour identifier le prompt optimal, ou en production pour les tâches critiques où un vote majoritaire entre plusieurs outputs augmente la fiabilité (prompt ensembling).


#Évaluation et tests de prompts

Sans système d'évaluation, le prompt engineering est de l'artisanat. Avec un framework d'eval, c'est de l'ingénierie.

#LLM-as-judge

Le pattern LLM-as-judge utilise un modèle puissant (GPT-4o ou Claude Opus) pour évaluer automatiquement les outputs de votre système. Le juge reçoit le prompt original, la réponse du modèle évalué, et une rubrique d'évaluation explicite (précision factuelle, respect du format, absence d'hallucination, pertinence). Il retourne un score et une justification.

Cette approche permet d'évaluer des milliers d'outputs sans labellisation humaine. Ses limites : le juge a ses propres biais, et il peut être manipulé par des réponses stylistiquement convaincantes mais factuellement fausses. Les pratiques de mitigation : utiliser un juge différent du modèle évalué, inclure des critères d'évaluation décomposés, et calibrer le juge sur un ensemble d'exemples humains.

#Eval datasets et métriques

Un eval dataset représentatif couvre les cas typiques, les edge cases et les cas adversariaux. Pour une tâche de classification, 100 à 500 exemples labellisés sont généralement suffisants pour détecter des régressions significatives. Pour des tâches génératives, les métriques automatiques (BLEU, ROUGE) mesurent la similarité textuelle mais pas la qualité réelle — préférez des métriques spécifiques comme le taux de conformité au schéma, la factual accuracy (vérification des affirmations contre la source), ou le hallucination rate (proportion d'affirmations non étayées).

#Cas Nehos : de 23 % à 4 % d'hallucinations en 6 semaines

Sur un agent RAG déployé pour un client dans le secteur des services financiers, le taux d'hallucinations initial (affirmations non étayées par les documents sources) était de 23 %. En 6 semaines d'itération outillée, ce taux est descendu à 4 %. Le processus : création d'un eval dataset de 200 questions avec réponses de référence, instrumentation du pipeline avec MLflow pour tracer chaque version de prompt, et cycles hebdomadaires d'analyse des faux positifs pour identifier les patterns de défaillance. Les trois leviers les plus efficaces : reformulation des instructions d'ancrage dans le system prompt, ajout d'une étape de vérification post-génération, et amélioration du chunking des documents sources.


#Optimisation coût/performance

En production, le coût des tokens est une contrainte réelle. Sur un agent traitant 50 000 requêtes par mois, un prompt verbeux peut représenter plusieurs milliers d'euros de coût mensuel supplémentaire.

#Prompt compression et dynamic few-shot

LLMLingua (Microsoft Research) est un outil open source qui compresse les prompts en supprimant les tokens redondants sans dégrader significativement les performances. Sur des prompts longs avec beaucoup de contexte répétitif, les gains de compression atteignent 3× à 5× avec moins de 5 % de dégradation qualité.

Le dynamic few-shot remplace les exemples statiques par une sélection dynamique : plutôt que de toujours inclure les mêmes 5 exemples, vous récupérez les k exemples les plus proches de la requête entrante via une recherche vectorielle dans votre bibliothèque d'exemples. Résultat : des exemples plus pertinents pour chaque requête spécifique, avec un nombre d'exemples réduit car mieux ciblés.

#Prefix caching et model routing

Anthropic et OpenAI proposent tous les deux du prefix caching : les tokens d'un prompt répété (notamment le system prompt qui ne change pas entre requêtes) sont mis en cache côté API et facturés à un taux réduit (~90 % moins cher chez Anthropic). Sur un agent dont le system prompt représente 1 500 tokens, et qui traite 10 000 requêtes par jour, le caching réduit de 85 à 90 % le coût lié au system prompt.

Le model routing consiste à diriger les tâches simples vers des modèles moins puissants et moins coûteux (Claude Haiku, GPT-4o mini) et réserver les modèles premium (Claude Opus, GPT-4o) aux tâches qui le justifient. Un classifier léger peut router automatiquement les requêtes : questions simples → Haiku, analyse complexe → Opus. Sur les déploiements Nehos qui appliquent ce routing, l'économie sur les coûts d'inférence atteint -60 % sans dégradation perceptible de la qualité utilisateur.


#Cas Nehos : agent extraction juridique

Ce cas concret illustre comment l'application combinée des techniques de prompt engineering avancé transforme un processus métier critique.

#Le problème

Un client du secteur legal-tech devait extraire des clauses contractuelles spécifiques (pénalités de retard, conditions de résiliation, limitations de responsabilité, délais de paiement) de 500 contrats par mois au format PDF. Le processus manuel mobilisait 2,1 ETP de juristes, avec un délai de traitement de 4 heures par contrat en moyenne pour les plus complexes.

#L'approche naïve et ses limites

La première implémentation utilisait un prompt simple : «Extrait les clauses suivantes du contrat : [liste].» Résultat : un output chaotique, avec 30 % d'erreurs — des clauses manquantes, des clauses mal attribuées à la mauvaise catégorie, des textes extraits partiellement, et des hallucinations (le modèle inventait parfois une clause inexistante plutôt que d'admettre son absence). Exploitable en l'état ? Non.

#La solution prompt engineering avancé

L'approche restructurée combinait cinq éléments :

  1. System prompt expert juridique : persona de juriste spécialisé en droit des contrats commerciaux français, avec des instructions explicites sur la gestion de l'ambiguïté («si une clause est absente, retourne null, ne génère pas de valeur par défaut»)
  2. Structured output avec schéma Zod : un schéma strict définissant chaque type de clause comme un objet typé avec champs obligatoires et optionnels, valeurs enum pour les catégories
  3. Chain-of-thought : instruction de raisonner d'abord sur la structure du contrat (type, droit applicable, parties) avant d'extraire les clauses — ce contexte améliore significativement la précision de l'extraction
  4. Few-shot 5 exemples : cinq contrats annotés manuellement couvrant les formats les plus fréquents (contrat de prestation, contrat cadre, SLA, contrat de distribution, NDA) et les cas ambigus
  5. Validation Zod + retry : chaque output validé contre le schéma ; en cas d'échec, un second prompt de correction avec l'erreur de validation explicite permettait de récupérer 85 % des cas initialement rejetés

Le pipeline s'appuyait sur l'OCR IA pour le parsing initial des PDF, suivi d'un chunking par section contractuelle avant injection dans le pipeline d'extraction.

#Résultats mesurés

  • Taux d'erreur : de 30 % à 3 % (90 % de réduction)
  • Temps de traitement : de 4 heures à 8 minutes par contrat (gain 30×)
  • Économie : 2,1 ETP libérés, réorientés sur des tâches d'analyse à haute valeur ajoutée
  • Coût d'inférence : à partir de 1 152 € par contrat en moyenne (routing Haiku pour parsing initial, Opus pour extraction complexe)

Ce type de déploiement est au cœur de notre offre de services agents IA. Si vous avez un processus similaire — extraction documentaire, classification, enrichissement structuré — la méthodologie est reproductible. Pour calculer le ROI avant de lancer le projet, nos outils de simulation sont accessibles en ligne.

Questions & Réponses

Questions fréquentes sur le prompt engineering avancé en entreprise

Le system prompt est l'instruction de base envoyée par le développeur avant toute interaction — il définit la persona, les contraintes, le format de sortie et le périmètre de l'assistant. Il est invisible pour l'utilisateur final. Le user prompt est le message envoyé par l'utilisateur à chaque tour de conversation. En termes d'autorité, le system prompt est censé prendre le dessus sur le user prompt, mais cette hiérarchie n'est pas absolue — une injection de prompt dans le user message peut tenter de la contourner. La règle de production : ne jamais mettre de données sensibles dans le system prompt, segmenter rigoureusement les responsabilités entre les deux niveaux.
Les deux modèles bénéficient significativement du few-shot prompting, mais avec des nuances. Claude (Anthropic) est généralement plus sensible à la qualité et à la cohérence des exemples — des exemples contradictoires le perturbent davantage que GPT-4o. GPT-4o a tendance à mieux généraliser à partir d'un petit nombre d'exemples sur des tâches très spécialisées. En pratique, un eval comparatif sur votre tâche spécifique est indispensable — les benchmarks généraux ne prédisent pas bien les performances sur une tâche métier précise. Consultez notre comparatif détaillé Mistral vs OpenAI vs Claude pour une analyse plus complète.
Le minimum viable est un eval dataset de 50 à 200 exemples représentatifs avec des outputs de référence validés humainement. À chaque modification de prompt, lancez le dataset complet et comparez les métriques clés (précision, conformité au format, taux d'hallucination) avec la version précédente. Des outils comme MLflow, LangSmith ou PromptLayer permettent de versionner les prompts et de comparer les résultats d'évaluation entre versions. Pour les systèmes critiques, ajoutez des tests de régression automatisés dans votre CI/CD : un merge ne passe pas si les métriques régressent de plus de X %.
Non. Le JSON mode d'OpenAI garantit la validité syntaxique du JSON (structure parseable), mais pas la validité sémantique (les valeurs correspondent au schéma attendu, les champs obligatoires sont présents, les types sont corrects). Anthropic n'a pas de JSON mode strict natif — il faut passer par des instructions explicites et un post-processing. Même avec les garanties syntaxiques, les LLMs peuvent générer du JSON syntaxiquement valide mais sémantiquement incorrect. La solution robuste en production : JSON mode + validation Zod/Pydantic à runtime + retry automatique avec l'erreur de validation réinjectée dans le prompt.
Le prefix caching Anthropic est rentable dès que vous avez un system prompt stable d'au moins 1 024 tokens et plus de quelques centaines de requêtes par jour. Le cache réduit le coût des tokens d'entrée répétés d'environ 90 % chez Anthropic (vs 50 % chez OpenAI). Pour un calcul simple : si votre system prompt fait 2 000 tokens et que vous traitez 5 000 requêtes par jour, vous économisez environ 9 000 tokens de cache par requête, soit 45 millions de tokens/jour en coût évité. Avec le pricing Sonnet à ~3 USD per million tokens, ça représente ~135 USD/jour d'économie, soit ~4 000 USD/mois — largement rentable dès quelques centaines de requêtes/jour.
Les injections de prompt sont des tentatives malveillantes via le user input de contourner les instructions du system prompt. Les mesures de défense en profondeur incluent : (1) segmentation stricte entre system prompt et user input — ne jamais interpoler directement du user input dans le system prompt ; (2) validation et sanitisation du user input avant injection dans le prompt ; (3) détection d'injection via un prompt classifier dédié (modèle secondaire qui détecte les patterns d'injection) ; (4) output validation — si la sortie contient des patterns suspects (instructions système, tokens hors format), la rejeter ; (5) principe du moindre privilège — l'agent IA ne doit avoir accès qu'aux systèmes et données strictement nécessaires. Consultez notre article sur la sécurité des agents IA selon l'OWASP LLM Top 10 pour une checklist complète.
Le prompt chaining est une séquence de prompts définie statiquement par le développeur — l'enchaînement est prédéterminé dans le code. Un agent IA autonome décide lui-même à chaque étape quelle action effectuer, quel outil appeler, si une sous-tâche est nécessaire — l'enchaînement est dynamique. Le prompt chaining est plus prévisible, plus facile à déboguer et plus approprié pour les workflows bien définis avec peu de variabilité. Les agents autonomes (basés sur ReAct ou un framework comme LangGraph) sont plus flexibles mais plus difficiles à contrôler et à évaluer. Pour déployer votre premier agent IA en PME, commencer par du prompt chaining bien structuré est souvent la voie la plus pragmatique.
Réserver un audit