[{"data":1,"prerenderedAt":1133},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Fai\u002Fversionage-prompt-et-test-ab-discipline-operationnelle-llm":13},{"i18nKey":4,"paths":5},"ai-004-2026-07",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fai\u002Fprompt-versioning-ab-testing-llm-ops","\u002Fen\u002Fai\u002Fprompt-versioning-ab-testing-llm-ops-discipline","\u002Fes\u002Fai\u002Fversionamiento-prompts-ab-testing-llm","\u002Ffr\u002Fai\u002Fversionierung-und-ab-tests-von-prompts","\u002Fit\u002Fai\u002Fprompt-versiyonlama-ab-testi-llm-disiplini","\u002Fru\u002Fai\u002Fprompt-versioning-ab-testing-llm-ops","\u002Ftr\u002Fai\u002Fprompt-versiyonlama-ve-a-b-testi-llm-operasyonun-disiplini",{"_path":14,"_dir":15,"_draft":16,"_partial":16,"_locale":17,"title":18,"description":19,"publishedAt":20,"modifiedAt":20,"category":15,"i18nKey":4,"tags":21,"readingTime":27,"author":28,"body":29,"_type":812,"_id":1128,"_source":1129,"_file":1130,"_stem":1131,"_extension":1132},"\u002Ffr\u002Fai\u002Fversionage-prompt-et-test-ab-discipline-operationnelle-llm","ai",false,"","Versionnage des prompts et tests A\u002FB : la discipline des opérations LLM","Comment tester systématiquement les sorties LLM avec Promptfoo et LangSmith ? Pratiques de construction de pipelines d'évaluation pour les applications IA en production.","2026-07-30",[22,23,24,25,26],"llm-ops","prompt-engineering","evaluation","ab-testing","mlops",8,"Roibase",{"type":30,"children":31,"toc":1114},"root",[32,40,47,52,65,70,76,90,103,435,440,447,452,457,463,468,484,490,495,500,506,511,544,554,559,594,599,605,610,615,767,772,777,783,796,804,809,984,989,1002,1008,1013,1018,1023,1078,1083,1097,1103,1108],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37],{"type":38,"value":39},"text","À partir du moment où vous déployez un LLM en production, vous découvrez le besoin de la discipline des « test suites » du génie logiciel classique. Lorsque vous modifiez un prompt, comment évolue la cohérence de la sortie ? Lorsque vous mettez à niveau la version du modèle, comment change l'équilibre coût-qualité ? Comment transformer la sensation « Claude a donné une meilleure réponse » en une métrique numérique ? En 2026, dans les opérations LLM matures, ceux qui répondent à ces questions de façon systématique — non manuelle — gagnent. Des outils comme Promptfoo, LangSmith et les pipelines d'évaluation sont l'assurance que les LLM restent en production.",{"type":33,"tag":41,"props":42,"children":44},"h2",{"id":43},"modification-de-prompt-modification-de-code",[45],{"type":38,"value":46},"Modification de prompt = Modification de code",{"type":33,"tag":34,"props":48,"children":49},{},[50],{"type":38,"value":51},"Vous avez un workflow de production de contenu marketing. Vous envoyez un prompt à l'API Claude, vous recevez un brouillon de blog. Dans la première version, vous dites « écris », dans la deuxième, vous ajoutez au system prompt « écris pour Roibase, dans un ton d'ingénierie », dans la troisième, vous ajoutez une liste de « MOTS INTERDITS ». Chaque modification affecte la sortie — mais comment mesurez-vous l'impact ?",{"type":33,"tag":34,"props":53,"children":54},{},[55,57,63],{"type":38,"value":56},"En logiciel classique, il y a les tests unitaires — l'entrée est fixe, la sortie est déterministe. Avec les LLM, l'entrée est fixe mais la sortie est stochastique. Vous ne pouvez pas décider sur la base d'une seule exécution. Vous devez exécuter le même prompt 10 fois avec différentes seeds, regarder le compte de tokens moyen, la latence, le score de cohérence. C'est pourquoi le ",{"type":33,"tag":58,"props":59,"children":60},"strong",{},[61],{"type":38,"value":62},"versionnage des prompts",{"type":38,"value":64}," est aussi critique que le versionnage du code. Vous suivez les modifications de prompt avec un commit Git, mais vous n'êtes peut-être pas en train de suivre la sortie. C'est là qu'une suite d'évaluation intervient : elle exécute automatiquement des tests à chaque commit, vous voyez les régressions de métriques.",{"type":33,"tag":34,"props":66,"children":67},{},[68],{"type":38,"value":69},"Scénario concret : dans votre workflow n8n, vous faites générer du contenu par Claude. Quand vous remplacez « 1500 mots » par « 1400-1600 mots » dans le prompt, la longueur moyenne baisse de 1520 à 1480 mots, le coût en tokens baisse de 3 %, mais le score de lisibilité recule de 0,2 points. Pour voir ce compromis sans essais manuels, un pipeline d'évaluation automatisé est obligatoire.",{"type":33,"tag":41,"props":71,"children":73},{"id":72},"promptfoo-suite-de-régression-pour-les-prompts",[74],{"type":38,"value":75},"Promptfoo : Suite de régression pour les prompts",{"type":33,"tag":34,"props":77,"children":78},{},[79,81,88],{"type":38,"value":80},"Promptfoo est un outil open source en CLI — vous définissez les prompts dans une configuration YAML, vous fournissez les cas de test en CSV ou JSON, vous écrivez des assertions. La commande ",{"type":33,"tag":82,"props":83,"children":85},"code",{"className":84},[],[86],{"type":38,"value":87},"promptfoo eval",{"type":38,"value":89}," exécute toutes les variantes et vous affiche un tableau de réussite\u002Féchec.",{"type":33,"tag":34,"props":91,"children":92},{},[93,95,101],{"type":38,"value":94},"Un typique ",{"type":33,"tag":82,"props":96,"children":98},{"className":97},[],[99],{"type":38,"value":100},"promptfoo.yaml",{"type":38,"value":102}," ressemble à ceci :",{"type":33,"tag":104,"props":105,"children":109},"pre",{"code":106,"language":107,"meta":17,"className":108,"style":17},"prompts:\n  - id: baseline\n    text: \"Write a blog post about {{topic}}\"\n  - id: roibase-tone\n    text: \"Write a blog post about {{topic}}. Use engineering discipline tone. No hype words.\"\n\nproviders:\n  - anthropic:messages:claude-3-5-sonnet-20241022\n\ntests:\n  - vars:\n      topic: \"server-side GTM setup\"\n    assert:\n      - type: contains\n        value: \"first-party\"\n      - type: javascript\n        value: output.length > 1400 && output.length \u003C 1600\n      - type: cost\n        threshold: 0.05\n","yaml","language-yaml shiki shiki-themes github-dark",[110],{"type":33,"tag":82,"props":111,"children":112},{"__ignoreMap":17},[113,131,156,174,195,212,222,235,247,255,268,285,303,316,339,357,378,395,416],{"type":33,"tag":114,"props":115,"children":118},"span",{"class":116,"line":117},"line",1,[119,125],{"type":33,"tag":114,"props":120,"children":122},{"style":121},"--shiki-default:#85E89D",[123],{"type":38,"value":124},"prompts",{"type":33,"tag":114,"props":126,"children":128},{"style":127},"--shiki-default:#E1E4E8",[129],{"type":38,"value":130},":\n",{"type":33,"tag":114,"props":132,"children":134},{"class":116,"line":133},2,[135,140,145,150],{"type":33,"tag":114,"props":136,"children":137},{"style":127},[138],{"type":38,"value":139},"  - ",{"type":33,"tag":114,"props":141,"children":142},{"style":121},[143],{"type":38,"value":144},"id",{"type":33,"tag":114,"props":146,"children":147},{"style":127},[148],{"type":38,"value":149},": ",{"type":33,"tag":114,"props":151,"children":153},{"style":152},"--shiki-default:#9ECBFF",[154],{"type":38,"value":155},"baseline\n",{"type":33,"tag":114,"props":157,"children":159},{"class":116,"line":158},3,[160,165,169],{"type":33,"tag":114,"props":161,"children":162},{"style":121},[163],{"type":38,"value":164},"    text",{"type":33,"tag":114,"props":166,"children":167},{"style":127},[168],{"type":38,"value":149},{"type":33,"tag":114,"props":170,"children":171},{"style":152},[172],{"type":38,"value":173},"\"Write a blog post about {{topic}}\"\n",{"type":33,"tag":114,"props":175,"children":177},{"class":116,"line":176},4,[178,182,186,190],{"type":33,"tag":114,"props":179,"children":180},{"style":127},[181],{"type":38,"value":139},{"type":33,"tag":114,"props":183,"children":184},{"style":121},[185],{"type":38,"value":144},{"type":33,"tag":114,"props":187,"children":188},{"style":127},[189],{"type":38,"value":149},{"type":33,"tag":114,"props":191,"children":192},{"style":152},[193],{"type":38,"value":194},"roibase-tone\n",{"type":33,"tag":114,"props":196,"children":198},{"class":116,"line":197},5,[199,203,207],{"type":33,"tag":114,"props":200,"children":201},{"style":121},[202],{"type":38,"value":164},{"type":33,"tag":114,"props":204,"children":205},{"style":127},[206],{"type":38,"value":149},{"type":33,"tag":114,"props":208,"children":209},{"style":152},[210],{"type":38,"value":211},"\"Write a blog post about {{topic}}. Use engineering discipline tone. No hype words.\"\n",{"type":33,"tag":114,"props":213,"children":215},{"class":116,"line":214},6,[216],{"type":33,"tag":114,"props":217,"children":219},{"emptyLinePlaceholder":218},true,[220],{"type":38,"value":221},"\n",{"type":33,"tag":114,"props":223,"children":225},{"class":116,"line":224},7,[226,231],{"type":33,"tag":114,"props":227,"children":228},{"style":121},[229],{"type":38,"value":230},"providers",{"type":33,"tag":114,"props":232,"children":233},{"style":127},[234],{"type":38,"value":130},{"type":33,"tag":114,"props":236,"children":237},{"class":116,"line":27},[238,242],{"type":33,"tag":114,"props":239,"children":240},{"style":127},[241],{"type":38,"value":139},{"type":33,"tag":114,"props":243,"children":244},{"style":152},[245],{"type":38,"value":246},"anthropic:messages:claude-3-5-sonnet-20241022\n",{"type":33,"tag":114,"props":248,"children":250},{"class":116,"line":249},9,[251],{"type":33,"tag":114,"props":252,"children":253},{"emptyLinePlaceholder":218},[254],{"type":38,"value":221},{"type":33,"tag":114,"props":256,"children":258},{"class":116,"line":257},10,[259,264],{"type":33,"tag":114,"props":260,"children":261},{"style":121},[262],{"type":38,"value":263},"tests",{"type":33,"tag":114,"props":265,"children":266},{"style":127},[267],{"type":38,"value":130},{"type":33,"tag":114,"props":269,"children":271},{"class":116,"line":270},11,[272,276,281],{"type":33,"tag":114,"props":273,"children":274},{"style":127},[275],{"type":38,"value":139},{"type":33,"tag":114,"props":277,"children":278},{"style":121},[279],{"type":38,"value":280},"vars",{"type":33,"tag":114,"props":282,"children":283},{"style":127},[284],{"type":38,"value":130},{"type":33,"tag":114,"props":286,"children":288},{"class":116,"line":287},12,[289,294,298],{"type":33,"tag":114,"props":290,"children":291},{"style":121},[292],{"type":38,"value":293},"      topic",{"type":33,"tag":114,"props":295,"children":296},{"style":127},[297],{"type":38,"value":149},{"type":33,"tag":114,"props":299,"children":300},{"style":152},[301],{"type":38,"value":302},"\"server-side GTM setup\"\n",{"type":33,"tag":114,"props":304,"children":306},{"class":116,"line":305},13,[307,312],{"type":33,"tag":114,"props":308,"children":309},{"style":121},[310],{"type":38,"value":311},"    assert",{"type":33,"tag":114,"props":313,"children":314},{"style":127},[315],{"type":38,"value":130},{"type":33,"tag":114,"props":317,"children":319},{"class":116,"line":318},14,[320,325,330,334],{"type":33,"tag":114,"props":321,"children":322},{"style":127},[323],{"type":38,"value":324},"      - ",{"type":33,"tag":114,"props":326,"children":327},{"style":121},[328],{"type":38,"value":329},"type",{"type":33,"tag":114,"props":331,"children":332},{"style":127},[333],{"type":38,"value":149},{"type":33,"tag":114,"props":335,"children":336},{"style":152},[337],{"type":38,"value":338},"contains\n",{"type":33,"tag":114,"props":340,"children":342},{"class":116,"line":341},15,[343,348,352],{"type":33,"tag":114,"props":344,"children":345},{"style":121},[346],{"type":38,"value":347},"        value",{"type":33,"tag":114,"props":349,"children":350},{"style":127},[351],{"type":38,"value":149},{"type":33,"tag":114,"props":353,"children":354},{"style":152},[355],{"type":38,"value":356},"\"first-party\"\n",{"type":33,"tag":114,"props":358,"children":360},{"class":116,"line":359},16,[361,365,369,373],{"type":33,"tag":114,"props":362,"children":363},{"style":127},[364],{"type":38,"value":324},{"type":33,"tag":114,"props":366,"children":367},{"style":121},[368],{"type":38,"value":329},{"type":33,"tag":114,"props":370,"children":371},{"style":127},[372],{"type":38,"value":149},{"type":33,"tag":114,"props":374,"children":375},{"style":152},[376],{"type":38,"value":377},"javascript\n",{"type":33,"tag":114,"props":379,"children":381},{"class":116,"line":380},17,[382,386,390],{"type":33,"tag":114,"props":383,"children":384},{"style":121},[385],{"type":38,"value":347},{"type":33,"tag":114,"props":387,"children":388},{"style":127},[389],{"type":38,"value":149},{"type":33,"tag":114,"props":391,"children":392},{"style":152},[393],{"type":38,"value":394},"output.length > 1400 && output.length \u003C 1600\n",{"type":33,"tag":114,"props":396,"children":398},{"class":116,"line":397},18,[399,403,407,411],{"type":33,"tag":114,"props":400,"children":401},{"style":127},[402],{"type":38,"value":324},{"type":33,"tag":114,"props":404,"children":405},{"style":121},[406],{"type":38,"value":329},{"type":33,"tag":114,"props":408,"children":409},{"style":127},[410],{"type":38,"value":149},{"type":33,"tag":114,"props":412,"children":413},{"style":152},[414],{"type":38,"value":415},"cost\n",{"type":33,"tag":114,"props":417,"children":419},{"class":116,"line":418},19,[420,425,429],{"type":33,"tag":114,"props":421,"children":422},{"style":121},[423],{"type":38,"value":424},"        threshold",{"type":33,"tag":114,"props":426,"children":427},{"style":127},[428],{"type":38,"value":149},{"type":33,"tag":114,"props":430,"children":432},{"style":431},"--shiki-default:#79B8FF",[433],{"type":38,"value":434},"0.05\n",{"type":33,"tag":34,"props":436,"children":437},{},[438],{"type":38,"value":439},"Quand vous exécutez cette configuration, Promptfoo envoie les deux prompts à Claude, regarde les assertions : le mot « first-party » est-il présent, la sortie est-elle entre 1400 et 1600 mots, le coût API est-il inférieur à 0,05 dollar ? Si une assertion échoue, Promptfoo vous dit quel prompt a échoué. Si vous l'intégrez à la CI\u002FCD, la modification du prompt est testée automatiquement dans la pull request — comme un test unitaire classique.",{"type":33,"tag":441,"props":442,"children":444},"h3",{"id":443},"pourquoi-lautomatisation-plutôt-que-le-manuel",[445],{"type":38,"value":446},"Pourquoi l'automatisation plutôt que le manuel ?",{"type":33,"tag":34,"props":448,"children":449},{},[450],{"type":38,"value":451},"Test manuel : vous envoyez 5 sujets différents à Claude, vous parcourez les sorties en les regardant, vous dites « c'est bon ». Le jour suivant, vous modifiez le prompt et testez à nouveau manuellement. À la 10e itération, vous oubliez quelle modification a affecté quelle métrique.",{"type":33,"tag":34,"props":453,"children":454},{},[455],{"type":38,"value":456},"Automatisation : vous avez 50 cas de test (des mots-clés réels que vous avez extrait de GSC), ils s'exécutent automatiquement à chaque modification de prompt. Tableau de régression : « prompt de base : 1520 mots en moyenne, nouveau prompt : 1480 — baisse de 2,6 % ». La décision est prise sur la base de la métrique, pas sur la sensation.",{"type":33,"tag":41,"props":458,"children":460},{"id":459},"langsmith-observabilité-en-production",[461],{"type":38,"value":462},"LangSmith : Observabilité en production",{"type":33,"tag":34,"props":464,"children":465},{},[466],{"type":38,"value":467},"Promptfoo est un outil de test en temps de développement. LangSmith (produit de l'équipe LangChain) vous permet de surveiller ce qui se passe en production. Chaque appel LLM est enregistré dans LangSmith : entrée, sortie, latence, compte de tokens, métadonnées. Vous visualisez les traces sur le dashboard — récupération, construction du prompt, appel LLM, post-traitement dans la chaîne, vous tracez chaque étape.",{"type":33,"tag":34,"props":469,"children":470},{},[471,473,482],{"type":38,"value":472},"Exemple : chez Roibase, dans nos travaux sur ",{"type":33,"tag":474,"props":475,"children":479},"a",{"href":476,"rel":477},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fgeo",[478],"nofollow",[480],{"type":38,"value":481},"Optimization Moteur Génératif",{"type":38,"value":483},", nous construisons un pipeline LLM pour suivre les citations ChatGPT. Pipeline : question de l'utilisateur → embedding → récupération Pinecone → injection de contexte → Claude → extraction de citation. LangSmith enregistre chaque étape. Si le taux de citation tombe en dessous de 15 %, une alerte se déclenche — une dérive du prompt ou un problème de qualité de récupération est détecté instantanément.",{"type":33,"tag":441,"props":485,"children":487},{"id":486},"trace-vs-log",[488],{"type":38,"value":489},"Trace vs log",{"type":33,"tag":34,"props":491,"children":492},{},[493],{"type":38,"value":494},"Log classique : « j'ai envoyé ce prompt à l'API Claude, j'ai reçu cette réponse ». Trace : « la récupération a pris 120 ms, 5 documents ont été retournés, la construction du prompt a pris 15 ms, Claude a pris 2,3 secondes, latence totale 2,45 secondes — pas de violation SLA ». La trace vous permet de voir le pipeline end-to-end. Dans les chaînes LLM, trouver le goulot d'étranglement est critique : si la récupération est lente, optimisez l'index de la base de données, si le LLM est lent, changez la version du modèle ou réduisez le nombre de tokens du prompt.",{"type":33,"tag":34,"props":496,"children":497},{},[498],{"type":38,"value":499},"En production, lors d'un test A\u002FB, vous utilisez aussi LangSmith : 50 % du trafic reçoit le prompt de base, 50 % le nouveau prompt — groupes de traces séparés pour chaque variante, comparaison de métriques en temps réel. Latence moyenne du baseline 2,1 secondes, nouveau prompt 1,9 secondes, mais le score de qualité baisse de 0,85 à 0,80 — un tableau de compromis en direct.",{"type":33,"tag":41,"props":501,"children":503},{"id":502},"pipeline-dévaluation-score-de-qualité-automatisé",[504],{"type":38,"value":505},"Pipeline d'évaluation : Score de qualité automatisé",{"type":33,"tag":34,"props":507,"children":508},{},[509],{"type":38,"value":510},"La sortie LLM est subjective — comment automatisez-vous la question « c'est bon ou c'est mauvais » ? Deux approches : assertions basées sur les règles et LLM-as-a-judge.",{"type":33,"tag":34,"props":512,"children":513},{},[514,519,521,527,529,535,536,542],{"type":33,"tag":58,"props":515,"children":516},{},[517],{"type":38,"value":518},"Basé sur les règles :",{"type":38,"value":520}," Les assertions dans Promptfoo comme ",{"type":33,"tag":82,"props":522,"children":524},{"className":523},[],[525],{"type":38,"value":526},"contains",{"type":38,"value":528},", ",{"type":33,"tag":82,"props":530,"children":532},{"className":531},[],[533],{"type":38,"value":534},"length",{"type":38,"value":528},{"type":33,"tag":82,"props":537,"children":539},{"className":538},[],[540],{"type":38,"value":541},"regex-match",{"type":38,"value":543},". Des règles comme « 1400-1600 mots », « pas de point d'exclamation », « au moins 1 lien interne ». Rapide, déterministe mais ne mesure pas la qualité sémantique.",{"type":33,"tag":34,"props":545,"children":546},{},[547,552],{"type":33,"tag":58,"props":548,"children":549},{},[550],{"type":38,"value":551},"LLM-as-a-judge :",{"type":38,"value":553}," Vous faites évaluer la sortie par un autre LLM (généralement GPT-4 ou Claude). Exemple : « Ce post de blog est-il rédigé dans un ton d'ingénierie ? Donne une note de 1 à 10. » Si le modèle judge donne 7,5, c'est OK, s'il donne 6, c'est un échec. Cette approche capture la qualité sémantique mais est non-déterministe — le modèle judge lui-même est stochastique. Solution : exécuter chaque évaluation 3 fois et prendre la moyenne.",{"type":33,"tag":34,"props":555,"children":556},{},[557],{"type":38,"value":558},"Dans le workflow de production de contenu de Roibase, le pipeline d'évaluation fonctionne ainsi :",{"type":33,"tag":560,"props":561,"children":562},"ol",{},[563,569,574,579,584,589],{"type":33,"tag":564,"props":565,"children":566},"li",{},[567],{"type":38,"value":568},"Claude génère un brouillon de blog",{"type":33,"tag":564,"props":570,"children":571},{},[572],{"type":38,"value":573},"Nous envoyons le brouillon à Promptfoo",{"type":33,"tag":564,"props":575,"children":576},{},[577],{"type":38,"value":578},"Basé sur les règles : compte de mots, nombre de liens internes, contrôle des mots interdits",{"type":33,"tag":564,"props":580,"children":581},{},[582],{"type":38,"value":583},"LLM-as-a-judge : GPT-4 nous attribue une note de 1 à 10 pour « conformité au ton »",{"type":33,"tag":564,"props":585,"children":586},{},[587],{"type":38,"value":588},"Toutes les métriques sont enregistrées dans Notion",{"type":33,"tag":564,"props":590,"children":591},{},[592],{"type":38,"value":593},"Si la note moyenne baisse en dessous de 8, une alerte Slack se déclenche",{"type":33,"tag":34,"props":595,"children":596},{},[597],{"type":38,"value":598},"Grâce à ce pipeline, quand vous générez 1000 articles, le standard de qualité est conservé. Au lieu que l'équipe QA manuelle lise chaque article, elle regarde seulement les échecs d'évaluation — 90 % d'économie de temps.",{"type":33,"tag":41,"props":600,"children":602},{"id":601},"test-ab-deux-prompts-deux-équilibres-coût-qualité",[603],{"type":38,"value":604},"Test A\u002FB : Deux prompts, deux équilibres coût-qualité",{"type":33,"tag":34,"props":606,"children":607},{},[608],{"type":38,"value":609},"En production, un test A\u002FB de prompt fonctionne comme un feature flagging classique. Vous utilisez LaunchDarkly ou un service de flag personnalisé : 50 % des utilisateurs reçoivent prompt_v1, 50 % prompt_v2. Vous collectez les métriques pour chaque variante : compte de tokens moyen, latence, conversion aval (par exemple, l'éditeur approuve-t-il le brouillon ?).",{"type":33,"tag":34,"props":611,"children":612},{},[613],{"type":38,"value":614},"Exemple concret : chez Roibase, nous testons une nouvelle version du prompt avec une guidance spécifique à la catégorie. Le prompt de base est général, le nouveau prompt contient des instructions supplémentaires par catégorie. Le test A\u002FB dure 2 semaines :",{"type":33,"tag":616,"props":617,"children":618},"table",{},[619,648],{"type":33,"tag":620,"props":621,"children":622},"thead",{},[623],{"type":33,"tag":624,"props":625,"children":626},"tr",{},[627,633,638,643],{"type":33,"tag":628,"props":629,"children":630},"th",{},[631],{"type":38,"value":632},"Métrique",{"type":33,"tag":628,"props":634,"children":635},{},[636],{"type":38,"value":637},"Baseline",{"type":33,"tag":628,"props":639,"children":640},{},[641],{"type":38,"value":642},"Nouveau prompt",{"type":33,"tag":628,"props":644,"children":645},{},[646],{"type":38,"value":647},"Delta",{"type":33,"tag":649,"props":650,"children":651},"tbody",{},[652,676,699,721,744],{"type":33,"tag":624,"props":653,"children":654},{},[655,661,666,671],{"type":33,"tag":656,"props":657,"children":658},"td",{},[659],{"type":38,"value":660},"Tokens moyens (input+output)",{"type":33,"tag":656,"props":662,"children":663},{},[664],{"type":38,"value":665},"3200",{"type":33,"tag":656,"props":667,"children":668},{},[669],{"type":38,"value":670},"3450",{"type":33,"tag":656,"props":672,"children":673},{},[674],{"type":38,"value":675},"+7,8 %",{"type":33,"tag":624,"props":677,"children":678},{},[679,684,689,694],{"type":33,"tag":656,"props":680,"children":681},{},[682],{"type":38,"value":683},"Latence moyenne (sec)",{"type":33,"tag":656,"props":685,"children":686},{},[687],{"type":38,"value":688},"2,1",{"type":33,"tag":656,"props":690,"children":691},{},[692],{"type":38,"value":693},"2,3",{"type":33,"tag":656,"props":695,"children":696},{},[697],{"type":38,"value":698},"+9,5 %",{"type":33,"tag":624,"props":700,"children":701},{},[702,707,712,717],{"type":33,"tag":656,"props":703,"children":704},{},[705],{"type":38,"value":706},"Coût\u002Farticle ($)",{"type":33,"tag":656,"props":708,"children":709},{},[710],{"type":38,"value":711},"0,042",{"type":33,"tag":656,"props":713,"children":714},{},[715],{"type":38,"value":716},"0,046",{"type":33,"tag":656,"props":718,"children":719},{},[720],{"type":38,"value":698},{"type":33,"tag":624,"props":722,"children":723},{},[724,729,734,739],{"type":33,"tag":656,"props":725,"children":726},{},[727],{"type":38,"value":728},"Taux d'approbation éditeur",{"type":33,"tag":656,"props":730,"children":731},{},[732],{"type":38,"value":733},"72 %",{"type":33,"tag":656,"props":735,"children":736},{},[737],{"type":38,"value":738},"81 %",{"type":33,"tag":656,"props":740,"children":741},{},[742],{"type":38,"value":743},"+12,5 %",{"type":33,"tag":624,"props":745,"children":746},{},[747,752,757,762],{"type":33,"tag":656,"props":748,"children":749},{},[750],{"type":38,"value":751},"Exactitude lien interne",{"type":33,"tag":656,"props":753,"children":754},{},[755],{"type":38,"value":756},"65 %",{"type":33,"tag":656,"props":758,"children":759},{},[760],{"type":38,"value":761},"89 %",{"type":33,"tag":656,"props":763,"children":764},{},[765],{"type":38,"value":766},"+36,9 %",{"type":33,"tag":34,"props":768,"children":769},{},[770],{"type":38,"value":771},"Le nouveau prompt est 10 % plus cher, mais le taux d'approbation des éditeurs augmente de 12,5 % — le coût de révision éditoriale baisse. L'exactitude du lien interne augmente de 36,9 % — les gains SEO compensent le coût. Décision : le nouveau prompt gagne, passage en production.",{"type":33,"tag":34,"props":773,"children":774},{},[775],{"type":38,"value":776},"Pendant la durée du test A\u002FB, LangSmith crée un groupe de traces séparé pour chaque variante. Si vous voyez une anomalie (par exemple, 5 % d'erreurs HTTP 429 de limitation de débit avec le nouveau prompt), vous la détectez immédiatement.",{"type":33,"tag":41,"props":778,"children":780},{"id":779},"versionnage-git-métadonnées",[781],{"type":38,"value":782},"Versionnage : Git + Métadonnées",{"type":33,"tag":34,"props":784,"children":785},{},[786,788,794],{"type":38,"value":787},"Vous gardez la version du prompt dans Git comme du code, mais ses métadonnées sont séparées. Dossier ",{"type":33,"tag":82,"props":789,"children":791},{"className":790},[],[792],{"type":38,"value":793},"prompts\u002F",{"type":38,"value":795}," :",{"type":33,"tag":104,"props":797,"children":799},{"code":798},"prompts\u002F\n  roibase-blog-v1.md\n  roibase-blog-v2.md\n  roibase-blog-v3.md\n",[800],{"type":33,"tag":82,"props":801,"children":802},{"__ignoreMap":17},[803],{"type":38,"value":798},{"type":33,"tag":34,"props":805,"children":806},{},[807],{"type":38,"value":808},"Chaque fichier contient des métadonnées en frontmatter :",{"type":33,"tag":104,"props":810,"children":814},{"code":811,"language":812,"meta":17,"className":813,"style":17},"---\nversion: 3\nmodel: claude-3-5-sonnet-20241022\ntemperature: 0.7\nmax_tokens: 8000\ncreated: 2026-07-15\ndeprecated: false\ntest_suite: promptfoo-blog-eval.yaml\n---\n\n# RÔLE\nTu écris pour Roibase.\n...\n","markdown","language-markdown shiki shiki-themes github-dark",[815],{"type":33,"tag":82,"props":816,"children":817},{"__ignoreMap":17},[818,826,843,860,877,894,911,928,945,952,959,968,976],{"type":33,"tag":114,"props":819,"children":820},{"class":116,"line":117},[821],{"type":33,"tag":114,"props":822,"children":823},{"style":127},[824],{"type":38,"value":825},"---\n",{"type":33,"tag":114,"props":827,"children":828},{"class":116,"line":133},[829,834,838],{"type":33,"tag":114,"props":830,"children":831},{"style":121},[832],{"type":38,"value":833},"version",{"type":33,"tag":114,"props":835,"children":836},{"style":127},[837],{"type":38,"value":149},{"type":33,"tag":114,"props":839,"children":840},{"style":431},[841],{"type":38,"value":842},"3\n",{"type":33,"tag":114,"props":844,"children":845},{"class":116,"line":158},[846,851,855],{"type":33,"tag":114,"props":847,"children":848},{"style":121},[849],{"type":38,"value":850},"model",{"type":33,"tag":114,"props":852,"children":853},{"style":127},[854],{"type":38,"value":149},{"type":33,"tag":114,"props":856,"children":857},{"style":152},[858],{"type":38,"value":859},"claude-3-5-sonnet-20241022\n",{"type":33,"tag":114,"props":861,"children":862},{"class":116,"line":176},[863,868,872],{"type":33,"tag":114,"props":864,"children":865},{"style":121},[866],{"type":38,"value":867},"temperature",{"type":33,"tag":114,"props":869,"children":870},{"style":127},[871],{"type":38,"value":149},{"type":33,"tag":114,"props":873,"children":874},{"style":431},[875],{"type":38,"value":876},"0.7\n",{"type":33,"tag":114,"props":878,"children":879},{"class":116,"line":197},[880,885,889],{"type":33,"tag":114,"props":881,"children":882},{"style":121},[883],{"type":38,"value":884},"max_tokens",{"type":33,"tag":114,"props":886,"children":887},{"style":127},[888],{"type":38,"value":149},{"type":33,"tag":114,"props":890,"children":891},{"style":431},[892],{"type":38,"value":893},"8000\n",{"type":33,"tag":114,"props":895,"children":896},{"class":116,"line":214},[897,902,906],{"type":33,"tag":114,"props":898,"children":899},{"style":121},[900],{"type":38,"value":901},"created",{"type":33,"tag":114,"props":903,"children":904},{"style":127},[905],{"type":38,"value":149},{"type":33,"tag":114,"props":907,"children":908},{"style":431},[909],{"type":38,"value":910},"2026-07-15\n",{"type":33,"tag":114,"props":912,"children":913},{"class":116,"line":224},[914,919,923],{"type":33,"tag":114,"props":915,"children":916},{"style":121},[917],{"type":38,"value":918},"deprecated",{"type":33,"tag":114,"props":920,"children":921},{"style":127},[922],{"type":38,"value":149},{"type":33,"tag":114,"props":924,"children":925},{"style":431},[926],{"type":38,"value":927},"false\n",{"type":33,"tag":114,"props":929,"children":930},{"class":116,"line":27},[931,936,940],{"type":33,"tag":114,"props":932,"children":933},{"style":121},[934],{"type":38,"value":935},"test_suite",{"type":33,"tag":114,"props":937,"children":938},{"style":127},[939],{"type":38,"value":149},{"type":33,"tag":114,"props":941,"children":942},{"style":152},[943],{"type":38,"value":944},"promptfoo-blog-eval.yaml\n",{"type":33,"tag":114,"props":946,"children":947},{"class":116,"line":249},[948],{"type":33,"tag":114,"props":949,"children":950},{"style":127},[951],{"type":38,"value":825},{"type":33,"tag":114,"props":953,"children":954},{"class":116,"line":257},[955],{"type":33,"tag":114,"props":956,"children":957},{"emptyLinePlaceholder":218},[958],{"type":38,"value":221},{"type":33,"tag":114,"props":960,"children":961},{"class":116,"line":270},[962],{"type":33,"tag":114,"props":963,"children":965},{"style":964},"--shiki-default:#79B8FF;--shiki-default-font-weight:bold",[966],{"type":38,"value":967},"# RÔLE\n",{"type":33,"tag":114,"props":969,"children":970},{"class":116,"line":287},[971],{"type":33,"tag":114,"props":972,"children":973},{"style":127},[974],{"type":38,"value":975},"Tu écris pour Roibase.\n",{"type":33,"tag":114,"props":977,"children":978},{"class":116,"line":305},[979],{"type":33,"tag":114,"props":980,"children":981},{"style":127},[982],{"type":38,"value":983},"...\n",{"type":33,"tag":34,"props":985,"children":986},{},[987],{"type":38,"value":988},"Le message de commit Git : « prompt v3 : ajout de guidance spécifique à la catégorie, liste de mots interdits étendue ». Votre CI\u002FCD voit ce commit et exécute automatiquement la suite de tests Promptfoo. Si les tests réussissent, le déploiement en environnement de staging se fait, un test A\u002FB de 24 heures s'exécute, s'il réussit, le passage en production se fait.",{"type":33,"tag":34,"props":990,"children":991},{},[992,994,1000],{"type":38,"value":993},"Le versionnage permet une mise à jour rapide : si un problème survient en production, ",{"type":33,"tag":82,"props":995,"children":997},{"className":996},[],[998],{"type":38,"value":999},"git revert",{"type":38,"value":1001},", l'ancien prompt est actif en 5 minutes.",{"type":33,"tag":41,"props":1003,"children":1005},{"id":1004},"optimisation-des-coûts-audit-des-tokens",[1006],{"type":38,"value":1007},"Optimisation des coûts : Audit des tokens",{"type":33,"tag":34,"props":1009,"children":1010},{},[1011],{"type":38,"value":1012},"Dans les applications LLM, le coût est généralement déterminé par input tokens + output tokens. Le prix API de Claude Sonnet 3.5 : 3 $\u002F1M tokens d'entrée, 15 $\u002F1M tokens de sortie (prix 2026). Un brouillon de blog de 1500 mots ~ 2000 tokens de sortie, system prompt + user prompt ~ 1200 tokens d'entrée — ~0,042 $ par article.",{"type":33,"tag":34,"props":1014,"children":1015},{},[1016],{"type":38,"value":1017},"Si vous générez 1000 articles\u002Fmois, c'est 42 $. Si vous optimisez le prompt et réduisez les tokens de sortie de 10 %, vous économisez 6,30 $ par mois — 75,60 $\u002Fan. Cela semble petit, mais à l'échelle : 10 000 articles\u002Fmois, c'est 756 $\u002Fan.",{"type":33,"tag":34,"props":1019,"children":1020},{},[1021],{"type":38,"value":1022},"Vous ajoutez une assertion de coût à la suite d'évaluation Promptfoo :",{"type":33,"tag":104,"props":1024,"children":1026},{"code":1025,"language":107,"meta":17,"className":108,"style":17},"assert:\n  - type: cost\n    threshold: 0.045\n",[1027],{"type":33,"tag":82,"props":1028,"children":1029},{"__ignoreMap":17},[1030,1042,1061],{"type":33,"tag":114,"props":1031,"children":1032},{"class":116,"line":117},[1033,1038],{"type":33,"tag":114,"props":1034,"children":1035},{"style":121},[1036],{"type":38,"value":1037},"assert",{"type":33,"tag":114,"props":1039,"children":1040},{"style":127},[1041],{"type":38,"value":130},{"type":33,"tag":114,"props":1043,"children":1044},{"class":116,"line":133},[1045,1049,1053,1057],{"type":33,"tag":114,"props":1046,"children":1047},{"style":127},[1048],{"type":38,"value":139},{"type":33,"tag":114,"props":1050,"children":1051},{"style":121},[1052],{"type":38,"value":329},{"type":33,"tag":114,"props":1054,"children":1055},{"style":127},[1056],{"type":38,"value":149},{"type":33,"tag":114,"props":1058,"children":1059},{"style":152},[1060],{"type":38,"value":415},{"type":33,"tag":114,"props":1062,"children":1063},{"class":116,"line":158},[1064,1069,1073],{"type":33,"tag":114,"props":1065,"children":1066},{"style":121},[1067],{"type":38,"value":1068},"    threshold",{"type":33,"tag":114,"props":1070,"children":1071},{"style":127},[1072],{"type":38,"value":149},{"type":33,"tag":114,"props":1074,"children":1075},{"style":431},[1076],{"type":38,"value":1077},"0.045\n",{"type":33,"tag":34,"props":1079,"children":1080},{},[1081],{"type":38,"value":1082},"Si après une modification de prompt le coût dépasse 0,045 $, le test échoue. Vous ajustez ce seuil en le liant à des métriques métier (taux d'approbation éditeur, conversion).",{"type":33,"tag":34,"props":1084,"children":1085},{},[1086,1088,1095],{"type":38,"value":1087},"Pour un audit des tokens, vous regardez les traces LangSmith : quel composant du prompt consomme le plus de tokens ? Par exemple, la section « INTERDITS » du system prompt — 300 tokens. Est-elle vraiment nécessaire à chaque appel, ou pouvez-vous la faire injecter par contexte en fonction de l'utilisateur ? Dans nos travaux sur ",{"type":33,"tag":474,"props":1089,"children":1092},{"href":1090,"rel":1091},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Ffirstparty",[478],[1093],{"type":38,"value":1094},"Architecture des données et mesure first-party",{"type":38,"value":1096},", nous utilisons une stratégie d'injection de contexte : vous modularisez le prompt, vous n'ajoutez que les modules nécessaires selon le segment utilisateur — économie de 15 à 20 % de tokens.",{"type":33,"tag":41,"props":1098,"children":1100},{"id":1099},"maintenant-que-faire",[1101],{"type":38,"value":1102},"Maintenant, que faire",{"type":33,"tag":34,"props":1104,"children":1105},{},[1106],{"type":38,"value":1107},"Si vous utilisez des LLM en",{"type":33,"tag":1109,"props":1110,"children":1111},"style",{},[1112],{"type":38,"value":1113},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":17,"searchDepth":158,"depth":158,"links":1115},[1116,1117,1120,1123,1124,1125,1126,1127],{"id":43,"depth":133,"text":46},{"id":72,"depth":133,"text":75,"children":1118},[1119],{"id":443,"depth":158,"text":446},{"id":459,"depth":133,"text":462,"children":1121},[1122],{"id":486,"depth":158,"text":489},{"id":502,"depth":133,"text":505},{"id":601,"depth":133,"text":604},{"id":779,"depth":133,"text":782},{"id":1004,"depth":133,"text":1007},{"id":1099,"depth":133,"text":1102},"content:fr:ai:versionage-prompt-et-test-ab-discipline-operationnelle-llm.md","content","fr\u002Fai\u002Fversionage-prompt-et-test-ab-discipline-operationnelle-llm.md","fr\u002Fai\u002Fversionage-prompt-et-test-ab-discipline-operationnelle-llm","md",1785967483426]