Tests de régression pour agents IA

Vérifier que les nouvelles versions d’agents ne cassent pas le comportement existant.
Sur cette page
  1. Idée en 30 secondes
  2. Le problème
  3. Quand l'utiliser
  4. Implémentation
  5. Comment cela fonctionne sur un run
  6. 1. Figer baseline et version du dataset
  7. 2. Exécuter candidate dans les mêmes conditions
  8. 3. Calculer diff avec des seuils de risque
  9. 4. Regarder les cas, pas seulement le summary
  10. 5. Ajouter regression gate dans CI
  11. Notes pour QA et l'automatisation
  12. Erreurs typiques
  13. Écrasement automatique de baseline
  14. Conditions de run différentes entre baseline et candidate
  15. Comparer seulement des métriques globales
  16. Pas de seuils clairs pour CI gate
  17. Cas instables dans le set de regression
  18. En bref
  19. FAQ
  20. Et ensuite

Idée en 30 secondes

Le regression testing pour agents IA compare candidate à baseline sur les mêmes cas et dans les mêmes conditions.

Sa valeur principale est de montrer précisément où le comportement du système a changé après des modifications de modèle, prompts, outils ou runtime.

Le problème

Sans regression testing, l'équipe voit souvent seulement un signal global "mieux/pire", sans savoir ce qui s'est cassé exactement.

Conséquences typiques :

  • des régressions discrètes passent en release ;
  • des scénarios critiques se dégradent alors que le résultat moyen semble correct ;
  • il devient difficile d'expliquer si la cause vient du code, du modèle, du prompt ou des conditions de run.

Au final, la release paraît sûre, mais des incidents répétitifs apparaissent en production.

Quand l'utiliser

Le regression testing est nécessaire dès que des changements peuvent affecter le comportement de l'agent :

  • version du modèle mise à jour ;
  • prompt ou règles de policy modifiés ;
  • outils ajoutés ou refactorés ;
  • paramètres runtime modifiés (timeouts, retries, limits).

Le regression testing répond à une question : qu'est-ce qui a changé entre versions du système.

Il faut aussi le lancer après des incidents, pour vérifier qu'un correctif n'a pas cassé des scénarios voisins.

Implémentation

En pratique, la règle est unique : mêmes cas, mêmes conditions de run, et comparaison avec un baseline figé. Les exemples ci-dessous sont schématiques et non liés à un framework précis.

Comment cela fonctionne sur un run

Flux de regression testing
📉 Run de regression
🗂️
Version du datasetmêmes cas pour baseline et candidate
📌
Rapport baselinesnapshot de référence du comportement
▶️
Run candidatenouvelle version en conditions identiques
🧮
Comparaison diffdeltas par cas et en résumé
🚦
CI gatedécision de release selon seuils
Succèsle release peut continuer
🔁
Échecanalyser et corriger la régression
Ce qui rend le test valide
⚙️ même dataset, même runtime, mêmes checks
📊 le diff doit refléter le comportement, pas le bruit

Un run de regression exécute généralement le même eval harness, mais avec comparaison des résultats contre baseline.

Cycle court d'un run de regression
  • Dataset version - figer une version de cas pour les deux runs.
  • Baseline report - prendre le rapport de référence comme point de comparaison.
  • Candidate run - exécuter la nouvelle version de l'agent dans les mêmes conditions.
  • Diff compare - calculer les écarts par cas et sur les métriques clés.
  • CI gate - bloquer ou laisser passer la release selon les seuils.

1. Figer baseline et version du dataset

PYTHON
regression_context = {
    "dataset_version": "golden-v1.4",
    "baseline_report": "reports/baseline-golden-v1.4.json",
    "model_version": "gpt-4o-2024-08-06",
}

baseline doit être lié à une version précise du dataset, du modèle et des conditions de run.

2. Exécuter candidate dans les mêmes conditions

PYTHON
def run_candidate(agent, dataset, runtime_config):
    return run_eval_suite(
        agent=agent,
        dataset=dataset,
        timeout_sec=runtime_config["timeout_sec"],
        max_steps=runtime_config["max_steps"],
        tool_mocks=runtime_config["tool_mocks"],
    )

Sans conditions identiques, diff devient vite bruité et perd sa valeur diagnostique.

3. Calculer diff avec des seuils de risque

PYTHON
def compare_summary(candidate, baseline):
    deltas = {
        "task_success_drop": baseline["task_success_rate"] - candidate["task_success_rate"],
        "latency_growth": candidate["p95_latency"] - baseline["p95_latency"],
        "cost_growth": candidate["avg_token_cost"] - baseline["avg_token_cost"],
    }
    return deltas

Les seuils doivent être explicites pour garder des décisions de release déterministes.

4. Regarder les cas, pas seulement le summary

PYTHON
def critical_case_regressions(case_diffs):
    bad = []
    for diff in case_diffs:
        if diff["status"] == "regressed" and "critical" in diff["tags"]:
            bad.append(diff["case_id"])
    return bad

Même si le summary semble correct, des régressions sur des cas critiques doivent bloquer la release.

5. Ajouter regression gate dans CI

PYTHON
deltas = compare_summary(candidate_summary, baseline_summary)
critical_failures = critical_case_regressions(case_diffs)

if deltas["task_success_drop"] > 0.03:
    fail("gate_failed:task_success_drop")
if deltas["latency_growth"] > 800:  # ms
    fail("gate_failed:latency_growth")
if critical_failures:
    fail(f"gate_failed:critical_cases:{critical_failures}")

Le regression gate doit être obligatoire pour les changements qui touchent modèle, prompts, outils ou runtime.

Notes pour QA et l'automatisation

Les équipes QA lancent généralement regression après une mise à jour de modèle ou de prompt pour voir immédiatement le diff de comportement contre baseline.

En pratique, cela devient un run CI obligatoire pour les changements de configuration model/prompt et une suite de regression complète planifiée pour suivre les dégradations lentes.

Erreurs typiques

Écrasement automatique de baseline

L'équipe perd un point de comparaison stable, et l'historique des régressions devient flou.

Cause typique : baseline est mis à jour automatiquement sans décision explicite.

Conditions de run différentes entre baseline et candidate

Les runs sont comparés, mais avec des timeouts, un modèle ou des mocks différents.

Cause typique : pas de runtime config figé pour regression.

Comparer seulement des métriques globales

Le résultat moyen paraît correct, mais des cas critiques se dégradent.

Cause typique : pas de diff au niveau cas dans le rapport.

Pas de seuils clairs pour CI gate

La décision de release est prise "au ressenti", et le signal de regression est perdu.

Cause typique : seuils non fixés dans les règles CI.

Cas instables dans le set de regression

Le même cas passe puis échoue de façon aléatoire, et l'équipe ne fait plus confiance au rapport.

Cause typique : des scénarios flaky sont entrés dans le set principal sans stabilisation.

En bref

En bref
  • Le regression testing compare candidate et baseline sur les mêmes cas.
  • Un diff valide est possible seulement avec dataset et conditions runtime identiques.
  • La décision de release doit reposer sur des seuils et des cas critiques, pas sur une impression de summary.
  • Baseline doit être versionné avec la même discipline que le code et le dataset.

FAQ

Q : Quelle différence entre regression testing et eval harness ?
R : Eval harness exécute un run standardisé, et regression testing utilise ce run pour comparer candidate contre baseline.

Q : Quand mettre à jour baseline ?
R : Après une release confirmée, quand l'équipe accepte explicitement le nouveau comportement comme référence.

Q : Qu'est-ce qui bloque le plus souvent une release dans regression gate ?
R : Dégradation de cas critiques, baisse de task_success_rate, forte hausse de latency ou de token cost.

Q : Les cas synthétiques suffisent-ils pour regression ?
R : Pour démarrer oui, mais un signal plus solide vient de la combinaison de cas synthétiques et de scénarios replay issus de production.

Et ensuite

Après avoir configuré le regression gate, branchez les cas stables via Golden Datasets et les runs standardisés via Eval Harness. Pour les vérifications locales de logique, utilisez Unit Testing, et analysez les incidents avec Replay and Debugging.

⏱️ 6 min de lectureMis à jour 13 mars 2026Difficulté: ★★☆
Intégré : contrôle en productionOnceOnly
Ajoutez des garde-fous aux agents tool-calling
Livrez ce pattern avec de la gouvernance :
  • Budgets (steps / plafonds de coût)
  • Permissions outils (allowlist / blocklist)
  • Kill switch & arrêt incident
  • Idempotence & déduplication
  • Audit logs & traçabilité
Mention intégrée : OnceOnly est une couche de contrôle pour des systèmes d’agents en prod.
Auteur

Cette documentation est organisée et maintenue par des ingénieurs qui déploient des agents IA en production.

Le contenu est assisté par l’IA, avec une responsabilité éditoriale humaine quant à l’exactitude, la clarté et la pertinence en production.

Les patterns et recommandations s’appuient sur des post-mortems, des modes de défaillance et des incidents opérationnels dans des systèmes déployés, notamment lors du développement et de l’exploitation d’une infrastructure de gouvernance pour les agents chez OnceOnly.