Prompts

Comment fonctionnent les optimiseurs automatiques de prompts?

· Par Robert Scales · 5 min de lecture

Réponse courte

Un optimiseur automatique de prompts traite le prompt comme une chose à chercher : il essaie de nombreuses versions des consignes et des exemples, note chacune sur des exemples étiquetés à l’aide d’une mesure que vous définissez, et garde la version qui obtient le meilleur score. Des outils comme DSPy le font en quelques lignes de Python, à condition que vous fournissiez de bonnes données de test et une façon honnête de noter les réponses.

Quand vous écrivez un prompt à la main, vous faites une hypothèse, testez quelques cas et ajustez. Un optimiseur automatique de prompts fait la même boucle, mais de façon systématique et beaucoup plus de fois. Vous lui donnez trois choses : une tâche avec ses entrées et ses sorties, un ensemble d’exemples avec les bonnes réponses, et une mesure, une petite fonction qui dit si une réponse est bonne. L’optimiseur génère alors des prompts candidats, les exécute, les note et garde le meilleur.

L’outil à code source ouvert le plus connu pour cela est DSPy, créé par des chercheurs de Stanford. Leur article de 2023 soutenait que les gabarits de prompts trouvés par essais et erreurs sont fragiles, et proposait d’écrire la tâche sous forme de code et de laisser un « compilateur » optimiser les prompts en fonction d’une mesure. Un article de suivi publié en 2024 a présenté MIPRO, un optimiseur qui améliore à la fois les consignes écrites et les exemples résolus contenus dans un prompt.

Ce que l’optimiseur modifie vraiment

Un prompt pour une tâche comme le classement comporte deux parties qu’un optimiseur peut ajuster :

  • La consigne, la phrase ou le paragraphe qui dit au modèle quoi faire.
  • Les démonstrations, quelques exemples résolus d’une entrée et de la bonne sortie (aussi appelés exemples few-shot).

MIPRO s’occupe des deux. Pour les démonstrations, il exécute la tâche sur vos exemples d’entraînement et garde comme exemples candidats les exécutions qui satisfont votre mesure. Pour les consignes, il demande à un modèle de langage de proposer de nouvelles formulations, éclairées par vos données et votre tâche. Il teste ensuite des combinaisons sur de petits lots d’exemples tirés au hasard et utilise les scores pour s’orienter vers les choix prometteurs au lieu de tout essayer. La documentation de DSPy le présente sous le nom dspy.MIPROv2, à côté d’optimiseurs plus simples qui ne font que choisir des exemples (dspy.BootstrapRS) ou qui ajustent finement les poids du modèle (dspy.BootstrapFinetune).

Un exemple concret : trier les messages des clients

Supposons qu’une petite boutique en ligne veuille que chaque message reçu soit étiqueté order (commande), return (retour), product question (question sur un produit) ou other (autre). Vous avez 200 anciens messages, chacun étiqueté par une personne. Vous les séparez : 100 pour entraîner l’optimiseur, 100 mis de côté pour le tester.

from typing import Literal
import dspy

dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))

class Route(dspy.Signature):
    """Classe un message de client pour l'équipe de soutien."""
    message: str = dspy.InputField()
    category: Literal["order", "return", "product question", "other"] = dspy.OutputField()

classify = dspy.Predict(Route)

# labeled = [("Où est mon colis?", "order"), ...]  # vos 200 messages étiquetés
examples = [dspy.Example(message=m, category=c).with_inputs("message") for m, c in labeled]
trainset, testset = examples[:100], examples[100:]

def correct(example, pred, trace=None):
    return example.category == pred.category

def accuracy(program, data):
    return sum(correct(ex, program(message=ex.message)) for ex in data) / len(data)

print("avant :", accuracy(classify, testset))

optimizer = dspy.MIPROv2(metric=correct, auto="light", num_threads=8)
tuned = optimizer.compile(classify, trainset=trainset)

print("après :", accuracy(tuned, testset))

Remarquez ce que vous n’avez pas écrit : le prompt lui-même. La signature Route déclare l’entrée, la sortie et les étiquettes permises; DSPy en fait un prompt, et l’optimiseur l’améliore. Le réglage auto="light" demande une recherche courte et peu coûteuse. La documentation de DSPy estime qu’une exécution simple typique coûte environ deux dollars américains et prend une vingtaine de minutes, et prévient que les grands modèles ou les grands jeux de données coûtent plus cher.

Supposons (chiffres donnés à titre d’illustration) que l’exactitude sur l’ensemble de test passe de 78 % avant à 88 % après. Le programme ajusté contient maintenant une consigne reformulée et une poignée de messages d’exemple avec leurs étiquettes, choisis parce qu’ils ont aidé. Vous pouvez les afficher et les lire.

À essayer : prenez une tâche de tri que vous faites à la main, comme étiqueter des courriels ou classer des reçus. Étiquetez vous-même 60 vrais exemples. Avant de toucher à un optimiseur, écrivez un prompt fait à la main et notez-le sur 30 d’entre eux. Ce chiffre est la référence que tout optimiseur devra battre, et constituer l’ensemble étiqueté représente l’essentiel du travail.

Pourquoi ça fonctionne, et ses limites

L’optimiseur a un avantage sur vous : la patience. Il testera des dizaines de formulations et d’ensembles d’exemples sur les mêmes données et les comparera équitablement. L’article sur DSPy a rapporté de grands gains par rapport aux prompts few-shot standard pour des tâches comme les problèmes de mathématiques écrits et les questions-réponses en plusieurs étapes, et MIPRO a battu les optimiseurs antérieurs sur cinq des sept programmes à plusieurs étapes de ses tests.

Mais il n’optimise que ce que vous mesurez. Si votre mesure vérifie l’étiquette et rien d’autre, l’optimiseur ne se souciera ni du ton, ni de la longueur, ni de la sécurité. Si vos exemples étiquetés ne sont pas représentatifs, par exemple s’ils viennent tous de la même saison, le prompt ajusté collera à cette saison. Et le résultat est lié au modèle sur lequel vous l’avez ajusté; si vous changez de modèle, vous devriez relancer l’optimisation.

Quand peut-on s’y fier?

Fiez-vous au résultat quand il tient la route sur des données que l’optimiseur n’a jamais vues. C’est pourquoi l’exemple garde un ensemble de test distinct. Un prompt qui obtient un bon score sur ses propres exemples d’entraînement a seulement montré qu’il pouvait s’y ajuster. C’est le score sur les exemples mis de côté qu’il faut rapporter et comparer.

Fiez-vous-y davantage quand la mesure correspond à ce qui vous importe vraiment. Pour un classeur, la correspondance exacte de l’étiquette est une mesure raisonnable. Pour la rédaction libre, une mesure est plus difficile à définir, et un optimiseur peut apprendre à plaire à une mesure faible plutôt qu’à bien écrire. Dans ce cas, vérifiez des échantillons à la main, ou utilisez une grille de correction soignée et vérifiez aussi le correcteur par sondage.

Lisez ce qu’il a produit. La consigne et les exemples ajustés sont du texte ordinaire. Si un exemple contient les renseignements personnels d’un client, ou si la consigne comprend une règle étrange qui se trouve à faire monter le score, corrigez-la avant le déploiement.

Enfin, gardez la référence. Si le prompt ajusté bat celui que vous avez écrit à la main d’un point ou deux sur un petit ensemble de test, la différence n’est peut-être que du bruit. Des gains plus grands et plus nets sur un nombre raisonnable d’exemples valent la peine d’être adoptés; les petits sont une raison de recueillir d’abord plus de données de test.

Sources

  1. DSPy documentation home page (docs/docs/index.md, commit 909b3e7) — Stanford NLP / DSPy on GitHub, 25 avril 2025
  2. DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines — arXiv (Khattab et al., Stanford), 5 octobre 2023
  3. Optimizing Instructions and Demonstrations for Multi-Stage Language Model Programs — arXiv (Opsahl-Ong, Ryan et al.), 17 juin 2024

Recevez gratuitement le Guide de l’intelligence artificielle

Abonnez-vous à l’infolettre hebdomadaire et recevez le guide gratuit : ce qui a changé en IA cette semaine, une leçon, un prompt à essayer. Désabonnement en un clic.

Ce que nous faisons de votre adresse

Retour en haut

Affichage

Vos choix sont enregistrés dans ce navigateur seulement. Aucune donnée n’est transmise.

Taille du texte
100 %
Couleurs
Lecture
Autres réglages
Déclaration d’accessibilité