Évaluation en CI
Exécutez les évaluations Potato dans votre propre suite pytest et conditionnez la CI à des seuils de score, afin qu'un changement de prompt ou de modèle qui dégrade la qualité de l'agent fasse échouer le build comme un test unitaire. Inclut une API d'assertions expect() et un exemple de workflow GitHub Actions.
Exécutez les évaluations Potato dans votre propre suite pytest et conditionnez la CI à des seuils de score agrégés, de sorte qu'un changement de prompt ou de modèle qui dégrade la qualité fasse échouer le build exactement comme un test unitaire. C'est la couche « opérationnalisation de l'éval » au-dessus des évaluateurs programmatiques et des jeux de données et expériences.
Installation
Le plugin est livré avec Potato et se charge automatiquement une fois installé :
pip install -e . # registers the `potato_eval` pytest pluginSans installation, chargez-le explicitement : pytest -p potato.testing.pytest_plugin.
Écrire des tests d'évaluation
Marquez un test @pytest.mark.potato_eval et demandez la fixture potato_eval :
import pytest
from potato.testing import expect
@pytest.mark.potato_eval
@pytest.mark.parametrize("case", CASES, ids=[c["q"] for c in CASES])
def test_agent(case, potato_eval):
out = my_agent(case["q"])
potato_eval.log_inputs({"question": case["q"]})
potato_eval.log_outputs(out)
potato_eval.log_reference_outputs(case["expected"])
potato_eval.log_feedback("correct", 1.0 if out == case["expected"] else 0.0)
potato_eval.log_feedback("similarity", 1.0 - expect.edit_distance(out, case["expected"]).value)
expect(out).to_contain(case["expected"]) # per-case hard assertionexpect(...) propose .to_equal, .to_contain, .to_be_less_than, .to_be_greater_than, .to_be_between, .to_be_close_to, ainsi que expect.edit_distance(a, b) et expect.embedding_distance(a, b). Les scores de log_feedback sont agrégés (moyenne par clé) sur l'ensemble des tests d'évaluation.
Conditionner le build
pytest tests/eval/ \
--potato-threshold correct=0.8 \
--potato-threshold similarity=0.7 \
--potato-experiment agent-regression| Option | Effet |
|---|---|
--potato-threshold KEY=MIN | Fait échouer l'exécution si mean(KEY) < MIN. Répétable. |
--potato-experiment DATASET | Enregistre l'exécution comme une expérience. |
--potato-no-sync | Désactive l'enregistrement de l'expérience. |
Si un seuil est franchi, l'exécution se termine avec un code non nul (ce qui fait échouer le job CI) et affiche THRESHOLD FAILED: <key> = <actual> < <min>. Les expériences enregistrées sont de simples fichiers ($POTATO_EVAL_STORE, par défaut ./eval_store) que vous pouvez téléverser comme artefact de CI.
GitHub Actions
Un exemple de workflow se trouve dans examples/agent-traces/ci-eval/ci_workflow_example.yml. Il exécute la suite sur chaque PR, applique les seuils et téléverse les enregistrements d'expérience comme artefact.
Pages liées
- Référence complète sur Read the Docs — toutes les options pytest et variables d'environnement, alignée sur la version
- Évaluateurs programmatiques
- Jeux de données et expériences