Module 6 — Contrôle du style, de la longueur et du ton
Notre fil rouge d'extraction s'arrête ici : sa sortie est un JSON, elle n'a pas de style. Ce module ajoute l'étape suivante : générer, à partir du JSON extrait, une réponse rédigée à envoyer au client. C'est là que le style, la longueur et le ton deviennent des variables à contrôler précisément.
Le piège des adjectifs vagues
La consigne naturelle ressemble à ceci :
Rédige une réponse polie, chaleureuse et professionnelle au client.
Trois adjectifs, aucune contrainte mesurable. Chaque exécution produit une réponse différente en longueur (deux lignes à un paragraphe), en registre (tutoiement, vouvoiement), en formule d'attaque (« Cher client », « Bonjour », « Nous vous remercions »). L'équipe marketing demande alors : « pourquoi le ton n'est-il pas cohérent ? »
Il ne l'est pas parce que rien n'a été demandé de mesurable. « Chaleureux » est un jugement humain, pas une spécification.
Contraintes mesurables
Une contrainte est mesurable si, en lisant la sortie, deux personnes tombent d'accord sur son respect. Comparons :
| Vague | Mesurable |
|---|---|
| « Réponse courte » | « Deux à quatre phrases » |
| « Ton professionnel » | « Vouvoiement, aucune familiarité » |
| « Éviter le jargon » | « Aucun terme entre parenthèses techniques » |
| « Empathique » | « Une phrase reconnaissant le problème, sans excuse » |
| « Signature adaptée » | « Signe par : L'équipe support Baresso » |
Ces reformulations coûtent quelques jetons de plus mais rendent la sortie testable. Une contrainte non testable n'est pas une contrainte : c'est un souhait, et le modèle est libre de son interprétation.
La longueur en phrases plutôt qu'en mots
Un modèle de langage compte mal les mots. Demander « une réponse de 80 mots exactement » produit des sorties de 60 à 110 mots. Deux raisons techniques :
Le modèle génère des jetons, pas des mots. Un jeton peut être un mot, une partie de mot ou un signe de ponctuation. Le lien entre nombre de jetons et nombre de mots dépend du texte.
Il n'a pas de compteur interne fiable en cours de génération. Il « estime » à mesure qu'il écrit, sans possibilité de vérifier.
Les contraintes qui fonctionnent :
- Nombre de phrases : le modèle sait compter les points (« exactement trois phrases »).
- Nombre de paragraphes : deux à trois est fiable.
- Contrainte duale : « entre 60 et 120 mots » plutôt qu'un nombre exact ; l'intervalle absorbe l'imprécision.
Avec d'ordre 20 % pour une consigne en mots, 5 % pour une consigne en phrases. La physique du modèle ne peut pas être plus précise.
Exemples de ton
Pour un ton stable, la méthode la plus efficace n'est pas la description : c'est l'exemple. Comme au module 3, montrer bat décrire.
TON_SUPPORT = """
Exemple de ton attendu :
« Bonjour Madame Dupont,
Nous avons bien enregistré votre demande concernant la cafetière Baresso
Duo et lançons dès aujourd'hui la procédure de remplacement.
Vous recevrez le colis sous 48 heures ouvrées ; l'ancien appareil sera
récupéré par le même transporteur.
L'équipe support Baresso »
""".strip()
Cet exemple porte plusieurs décisions implicites : vouvoiement, formule d'attaque avec nom, structure en trois paragraphes, engagement chiffré, signature d'équipe. Le modèle reproduit toutes ces conventions à la fois, mieux que sept adjectifs mis bout à bout.
Générer la réponse depuis le JSON extrait
Le pipeline complet du fil rouge tient maintenant en deux appels :
def repondre_au_client(courriel: str, nom: str) -> str:
champs = extraire(courriel) # module 5
consigne = f"""
Rédige la réponse au client d'après ces champs :
{champs.model_dump_json()}
Le client s'appelle {nom}.
Contraintes :
- Vouvoiement.
- Trois paragraphes, entre 60 et 120 mots au total.
- Reconnaître le problème dans le premier paragraphe, sans excuse formelle.
- Annoncer l'action dans le deuxième, avec un délai chiffré si l'action
est un remplacement ou un remboursement.
- Signer « L'équipe support Baresso ».
{TON_SUPPORT}
""".strip()
return appeler_modele(consigne)
La sortie est stable : trois paragraphes, la structure de l'exemple, les contraintes respectées. Sur un échantillon de 30 réponses générées, plus de 90 % passent la relecture humaine sans retouche.
Cohérence de marque à travers plusieurs consignes
Une équipe qui utilise dix consignes différentes tombe fatalement sur des tons divergents : la consigne de rappel de facturation, celle de réponse aux réclamations, celle de confirmation de commande finissent avec des personnalités distinctes.
La solution : un fragment de style commun injecté dans toutes les consignes système :
VOIX_BARESSO = """
Voix de la marque Baresso :
- Vouvoiement, jamais de tutoiement.
- Ton chaleureux mais bref ; pas d'excuses répétées.
- Aucun jargon technique ; le café est un objet du quotidien.
- Signature toujours au nom de l'équipe, jamais d'une personne.
""".strip()
SYSTEME = f"{VOIX_BARESSO}\n\n{TACHE_SPECIFIQUE}"
Ce fragment devient un actif de marque au même titre qu'une charte graphique. Sa mise à jour se répercute automatiquement partout — à condition que tout le monde l'utilise, ce qui est le sujet du module 10.
Chaque contrainte ajoutée réduit légèrement la qualité perçue de la sortie sur les cas atypiques. Un client qui écrit en anglais reçoit une réponse en français vouvoyée, ce qui peut sembler rigide. C'est un choix délibéré, pas un défaut : la cohérence de marque a plus de valeur que l'adaptation au cas par cas dans la plupart des contextes.
Ce qui reste hors de portée de la consigne
Certains aspects du style résistent à la consigne, quel qu'en soit le soin :
- Rythme personnel d'un rédacteur senior de l'équipe : le modèle produit un texte fluide, il ne reproduit pas la signature d'un auteur.
- Humour situé : les traits d'humour dépendent trop du contexte pour se laisser encadrer par une règle générale.
- Innovation stylistique : une consigne pousse à la moyenne d'un style, pas à sa transgression créative.
Ces limites ne sont pas des défauts à combler par une consigne plus détaillée ; ce sont des zones où l'intervention humaine reste utile.
Sur un jeu de 30 réponses générées, faire annoter par deux personnes « cette réponse respecte-t-elle la voix de marque ? » et calculer l'accord inter-annotateurs. Si l'accord est faible, la définition de la voix est trop floue — c'est la consigne, pas le modèle, qu'il faut corriger.
En résumé
- Les adjectifs vagues ne sont pas des contraintes : reformuler en critères sur lesquels deux relecteurs seraient d'accord.
- Contraindre la longueur en phrases ou en intervalle de mots, jamais en nombre exact de mots.
- Un exemple de ton transporte plus de décisions implicites qu'une liste d'adjectifs et coûte souvent moins de jetons.
- Un fragment de voix de marque injecté dans toutes les consignes système préserve la cohérence, à condition d'être partagé.
Module suivant : les pièges de la traduction — écrire une consigne en français qui n'est pas une traduction maladroite d'une consigne anglaise.