preatorlabs
débogueur de prompt · v0.3

Quelles parties de ton prompt comptent vraiment ? Mesure-le, segment par segment.

preatorlabs est un outil d'analyse expérimentale : une étude d'ablation, sur trois axes orthogonaux, qui révèle ce que chaque partie de ton prompt fait réellement faire au LLM.

le problème

Aujourd'hui, ajuster un prompt, c'est jouer à pile ou face.

Le cycle standard de l'ingénierie de prompt consiste à rédiger, tester, ajuster, sans savoir ce qui produit quoi. Une phrase apparemment décorative peut être critique ; une phrase apparemment essentielle peut être ignorée. preatorlabs assume cette part d'inconnu et la traite par l'expérimentation : plutôt que de raisonner sur le prompt, on mesure son comportement réel, segment par segment.

01rédiger un prompt
02l'injecter dans le LLM
03tester sur quelques inputs
04ajuster à l'aveugle

Trois conséquences mesurables :

  • régression on supprime un segment apparemment décoratif qui était en fait critique pour un cas d'usage rare.
  • inflation on accumule des phrases "au cas où" sans savoir qu'elles sont ignorées par le modèle.
  • faux positifs on attribue à une phrase un effet qui vient en réalité d'une autre partie du prompt.
la méthode

Une étude d'ablation, sur trois axes orthogonaux.

L'ablation mesure la contribution d'un élément en le retirant et en observant ce qui change. Appliquée au prompt, l'opération est répétée segment par segment et croisée avec plusieurs scénarios, afin d'isoler l'effet propre de chaque partie sur la réponse du LLM.

Le principe. Pour chaque segment du prompt, on génère deux versions de la réponse à un même input : avec le segment, et sans. La différence entre ces deux outputs est mesurée selon trois dimensions distinctes. La répétition sur plusieurs scénarios donne l'impact moyen du segment (combien il pèse en moyenne) et la variance entre scénarios (est-il actif partout, ou seulement dans certains cas).

# Pour chaque segment Si et chaque scénario Tj : baseline(Tj) = LLM(prompt_complet, input=Tj, T=0) ablation(Si, Tj) = LLM(prompt_sans_Si, input=Tj, T=0) delta_a(Si, Tj) = | score_a(baseline) − score_a(ablation) | # a ∈ { structurel, comportemental, sémantique } # axe non applicable => exclu de l'agrégation impact(Si, Tj) = mean over a actifs of delta_a(Si, Tj) impact(Si) = mean over j of impact(Si, Tj) variance(Si) = std over j of impact(Si, Tj) activation(Si) = ratio over j where impact(Si, Tj) >= 0.30

Les trois axes de mesure

Chacun répond à une question différente. La décomposition permet de comprendre pourquoi un segment compte, pas seulement combien il compte.

axe 1
Structurel
La réponse respecte-t-elle le format attendu ?

Longueur, présence de listes, validité d'un JSON, absence d'astérisques. Cet axe vérifie si la réponse garde la forme attendue : sa structure, son gabarit et les contraintes de format imposées par le prompt.

parsing · regex · comptage
axe 2
Comportemental
La réponse suit-elle les règles métier ?

Présence ou absence de termes attendus / interdits, conformité à des patterns logiques. Détection lexicale par matching de chaînes.

exact match · liste lexicale
axe 3
Sémantique
Le sens et le style sont-ils préservés ?

Chaque réponse est convertie en vecteur, puis on mesure la distance cosinus entre la version complète et la version ablée. Deux modes : TF-IDF local (pondération des mots, gratuit, sans réseau) ou embeddings Voyage AI (représentation contextuelle, plus fine). Cet axe capte les changements de ton, de registre et de structure que les autres n'attrapent pas.

embeddings · cosinus
comment ça marche

Quatre étapes.

étape 1
Colle ton prompt

L'intégralité de ton prompt système, tel quel. La segmentation automatique propose un découpage par paragraphes et titres. Tu peux éditer chaque segment, fusionner ou supprimer.

étape 2
Ajoute des scénarios

5 à 8 entrées utilisateur représentatives des cas d'usage du prompt. C'est ce qui révèle la variance entre segments universels et segments contextuels.

étape 3
Lance l'analyse

L'outil exécute N×M+M appels API Claude avec ta clé, à température 0. Côté sémantique, tu peux choisir TF-IDF local (gratuit) ou Voyage API (optionnel). Coût et durée affichés avant lancement. Sauvegarde automatique en cas d'interruption.

étape 4
Lis les résultats

Un graphique de variance + décomposition par axe + synthèse en trois listes. Guide de lecture : comment lire.

comment lire

Cinq verdicts, une grille de décision.

Le résultat principal est un graphique de variance, où chaque barre représente un segment. La hauteur dit l'impact, la barre d'erreur dit la variance. Le verdict tient aussi compte du taux d'activation (part des scénarios où l'impact dépasse 30 %). Formules complètes : méthodologie.

Lire le graphique

  • Hauteur de barre = impact(Si) : amplitude moyenne de l'écart quand le segment est retiré.
  • Trait vertical = ±variance(Si) : dispersion entre scénarios ; un trait long signale un segment contextuel.
  • Couleur = verdict (dérivé aussi de activation(Si), seuil scénario 30 %).
  • Cartes segment : barres structurel / comport. / sémant. = deltas moyens par axe ; ligne activation = part des scénarios actifs.

Grille des verdicts

verdict signal interprétation action
critical impact élevé + activation forte + variance faible Segment fondamental, actif sur tous les scénarios. Ne pas toucher.
fort impact impact fort + activation solide + variance contenue Important et stable. Porte une part claire du style ou de la logique. Modifier avec prudence.
contextuel variance ≥ 25 % ou activation < 50 % (avec impact ≥ 15 %) Filet de sécurité : n'agit que sur certains scénarios mais y est décisif. Inclut les segments à activation partielle. Garder. Ne pas confondre impact moyen bas et inutilité.
faible 10 % ≤ impact < 20 %, variance basse, activation stable Peu d'effet. Possible redondance avec un autre segment. Tester une ablation combinée avant suppression.
placebo impact < 10 % Pas pris en compte par le LLM, malgré une formulation explicite. Supprimer ou reformuler en règle opérationnelle.

Piège d'interprétation : impact moyen et activation partielle

L'impact affiché est une moyenne sur l'ensemble des scénarios. Un segment qui n'intervient que sur une fraction des cas présente donc un impact moyen faible, alors qu'il peut y être déterminant. Conclure à son inutilité à partir de la seule hauteur de barre est une erreur de lecture fréquente.

La distinction se lit sur deux indicateurs complémentaires de l'impact moyen :

  • une variance élevée signale un effet concentré sur certains scénarios plutôt que réparti uniformément ;
  • un taux d'activation partiel indique que le segment ne franchit le seuil d'effet que sur une partie des cas testés.

Lorsque l'un de ces signaux accompagne un impact moyen modeste, le segment est classé contextuel : il agit comme un filet de sécurité ponctuel, à conserver. Avant toute décision de suppression, vérifier le comportement scénario par scénario dans le détail des outputs.

démo

Essaie sur ton prompt.

Colle ton prompt système, ajoute quelques scénarios représentatifs, configure les critères et lance l'analyse. L'outil tourne entièrement dans ton navigateur.

débogueur de prompt
aucune clé configurée
Ton prompt système
Colle l'intégralité du prompt. La segmentation est automatique : découpage par paragraphes, titres et règles numérotées. 0 segments détectés
Scénarios de test 0 scénarios
Inputs utilisateurs représentatifs. 5 à 8 scénarios variés donnent la meilleure estimation de variance.
Critères d'évaluation
Définis comment l'outil mesure la qualité d'un output sur chaque axe.
axe structurel parsing binaire
Règles détectées (structurel)
    axe comportemental détection lexicale
    Règles détectées (comportemental)
      axe sémantique embeddings + cosinus

      Comparaison réponse complète vs réponse ablée. Fournisseur sélectionnable (local gratuit ou Voyage).

      Paramètres du moteur
      modèle cible
      température
      0 isole le signal d'ablation
      fournisseur sémantique
      L'axe sémantique reste explicable: distance cosinus.
      0 appels API estimés

      Prêt à lancer l'analyse. Le moteur exécutera 0 appels API sur ta clé.

      Aucune analyse lancée. Configure puis lance l'analyse pour voir les résultats.
      tests de validation

      L'outil discrimine-t-il vraiment ?

      Deux runs diagnostiques sur des prompts structurellement opposés (support client e-commerce vs assistant pédagogique Python à sortie JSON), pour vérifier que preatorlabs mesure un signal réel et n'applique pas un patron fixe. Modèle : claude-haiku-4-5, température 0.

      Chaque run est conçu pour qu'un seul segment soit contextuel (déclenché par un seul scénario sur trois). Si l'outil discrimine, ce segment doit ressortir comme la plus haute barre et la plus haute variance. Si l'outil produit un résultat plat ou identique entre les deux tests, le signal n'existe pas.
      Test 1 · Support client e-commerce
      21 appels · ~$0.13

      6 segments, 3 scénarios. Segment-piège attendu : S3 (code promo SORRY10) → ne doit s'activer que sur le scénario « retard de livraison ». Et S5 (anti-hallucination) sur les 2 scénarios où le modèle n'a pas l'info.

      S1
      3% ±6%
      S2
      7% ±11%
      S3
      9% ±18%
      S4
      2% ±4%
      S5
      11% ±20%
      S6
      3% ±5%
      Lecture : S3 (promo) et S5 (anti-hallucination) sortent comme les deux segments les plus impactants avec la plus haute variance. Profil typique d'un segment contextuel. Les segments de ton (S4) et de signature (S6) sont stables et bas : placebo.
      Test 2 · Assistant Python (sortie JSON)
      18 appels · ~$0.11

      5 segments, 3 scénarios dont 1 hors-sujet. Segment-piège attendu : S4 (consigne « hors-sujet → réponse fixe ») → ne doit s'activer que sur « Quel est ton restaurant favori à Paris ? ».

      S1
      4% ±4%
      S2
      9% ±11%
      S3
      2% ±1%
      S4
      14% ±12%
      S5
      1% ±1%
      Lecture : S4 (hors-sujet) ressort à 14% d'impact avec la plus haute variance, exactement le profil prédit. Détail : la barre est portée à 41% par l'axe sémantique du seul scénario hors-sujet (parfaitement isolée par cosinus). S2 (contrainte JSON) capte 17% sur l'axe structurel. S5 (termes interdits) à 1% : vrai placebo, le modèle ne produit jamais ces tournures sur des questions Python.

      Ce que ces deux runs valident

      • Le signal est réel, pas un patron fixe. Le ranking des segments diffère complètement entre Test 1 (S5 > S3) et Test 2 (S4 > S2). L'outil ne renvoie pas un résultat identique calqué sur la position des segments.
      • Le segment contextuel ressort systématiquement. Dans les deux tests, le segment dont l'activation dépend d'un seul scénario présente l'impact moyen et la variance les plus élevés du run : signature exacte d'un « filet contextuel ».
      • La décomposition par axe identifie le mécanisme. S4 du Test 2 sort à 41% sur l'axe sémantique (changement de registre : réponse Python vs « Hors sujet »), tandis que S2 du Test 2 sort à 17% sur l'axe structurel (JSON valide vs prose markdown). L'outil sait dire pourquoi un segment compte, pas seulement combien.
      • Les placebos sont des vrais placebos. S5 du Test 2 (« ne jamais dire je suis une IA ») est mesuré à 1% d'impact : le modèle ne produit pas ces tournures même sans la consigne. Confirmation comportementale.

      Limite identifiée. Sur Claude Haiku, les seuils de verdict calibrés pour Sonnet peuvent rester trop stricts : la variance brute peut être plus informative que le label final. La V0.3 corrige déjà une partie du biais via l'activation et l'agrégation sur axes applicables, mais la calibration cross-modèles reste un chantier V0.4. Détail dans la roadmap.

      questions fréquentes

      Ce que tu te poses comme question.

      Pourquoi pas un LLM qui juge la qualité du prompt ?

      Parce qu'un LLM-juge produit une réponse plausible, pas une mesure. La sortie dépend du LLM utilisé, du wording de la consigne, et n'est pas reproductible. preatorlabs reste strictement sur des métriques parsables ou calculables. Détail dans la rationale scientifique.

      Combien ça coûte vraiment ?

      Le coût est linéaire : N×M+M appels API où N = segments et M = scénarios. Exemple Reachy (12 segments, 6 scénarios) = 78 appels ≈ $0.20 sur Claude Haiku, $1 sur Sonnet, $5 sur Opus (plafond max_tokens, en pratique souvent moins). L'estimation $ est affichée avant chaque lancement.

      Mes données partent où ?

      Nulle part sauf vers les APIs que tu actives. preatorlabs n'a aucun backend, aucun tracking, aucun cookie d'analytics. Ton prompt, tes scénarios, tes résultats et tes clés API restent dans ton navigateur (localStorage). Les clés servent uniquement aux appels api.anthropic.com et, si activé, api.voyageai.com. Détails dans la section confidentialité ci-dessous.

      Pourquoi la génération est centrée sur Claude en V0.3 ?

      Parce que les APIs CORS-friendly côté navigateur sont encore inégales. Anthropic expose un header officiel (anthropic-dangerous-direct-browser-access) qui permet d'appeler son API depuis un navigateur sans backend. En V0.3, l'axe sémantique est déjà multi-provider (TF-IDF local ou Voyage). Le support multi-LLM complet pour la génération est planifié via le moteur Python optionnel.

      Comment preatorlabs gère un prompt très long ?

      L'outil te prévient au-delà de ~10 000 tokens estimés (≈ 40 000 caractères) et au-delà de 150 appels totaux. Tu peux quand même lancer, mais tu seras alerté du coût et de la durée. Pour des batches très volumineux, le moteur Python V1 est plus adapté.

      Que se passe-t-il si l'analyse plante au milieu ?

      Chaque appel réussi est sauvegardé en localStorage au fur et à mesure. Si l'analyse échoue (réseau, rate limit non récupérable, fermeture d'onglet), un bandeau "Reprendre l'analyse interrompue" apparaît au prochain lancement. Tu reprends exactement à l'appel suivant, sans rejouer ce qui a déjà été calculé.

      Le projet est-il open source ?

      Oui, licence MIT. Le code source est sur GitHub. Les choix méthodologiques sont documentés dans docs/01-SCIENTIFIC-RATIONALE.md et docs/02-METHODOLOGY.md.

      confidentialité

      Tout reste sur votre navigateur

      preatorlabs fonctionne entièrement dans ton navigateur. Aucun backend, aucun tracking, aucun cookie. Les choix techniques rendent l'exfiltration impossible.

      Ce qui reste sur ta machine

      Stocké en localStorage uniquement, dans l'origine de ce site :

      • preatorlabs.apiKey : ta clé API Anthropic
      • preatorlabs.voyageApiKey : ta clé API Voyage (si utilisée)
      • preatorlabs.runState : sauvegarde incrémentale d'une analyse en cours, pour reprise après erreur
      • preatorlabs.lastResults : derniers résultats agrégés

      Le bouton "Supprimer la clé" et un effacement manuel via les outils du navigateur suffisent à tout retirer.

      Ce qui sort de ton navigateur

      Strictement les requêtes vers api.anthropic.com pour la génération, et api.voyageai.com si tu actives le fournisseur sémantique Voyage.

      La Content-Security-Policy de la page interdit toute requête sortante en dehors des domaines explicitement autorisés (Anthropic/Voyage + CDN de polices/Chart.js). Une injection malveillante ne pourrait pas exfiltrer de données vers un domaine arbitraire.

      Aucun analytics, aucun pixel, aucun script tiers de tracking. Pas de Google Fonts en mode tracking, uniquement le CSS et les fichiers WOFF2.

      analyse de corpus

      Un tableau de bord pour tes exports.

      Exporte plusieurs analyses, dépose-les dans le tableau de bord et compare-les : distribution des verdicts, profils d'axes, corrélations entre métriques et suivi des segments à travers les versions d'un même prompt. Tout reste local, dans ton navigateur.