Valutazione in CI
Esegui le valutazioni di Potato all'interno della tua suite pytest e vincola la CI a soglie di punteggio, così una modifica al prompt o al modello che degrada la qualità dell'agente fa fallire la build come uno unit test. Include un'API di asserzioni expect() e un workflow GitHub Actions di esempio.
Esegui le valutazioni di Potato all'interno della tua suite pytest e vincola la CI a soglie sui punteggi aggregati, così una modifica al prompt o al modello che degrada la qualità fa fallire la build esattamente come uno unit test. È lo strato di "operazionalizzazione della valutazione" costruito sopra i valutatori programmatici e i dataset ed esperimenti.
Installazione
Il plugin è incluso in Potato e si carica automaticamente una volta installato:
pip install -e . # registers the `potato_eval` pytest pluginSenza installazione, caricalo esplicitamente: pytest -p potato.testing.pytest_plugin.
Scrivere i test di valutazione
Marca un test con @pytest.mark.potato_eval e richiedi 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(...) offre .to_equal, .to_contain, .to_be_less_than, .to_be_greater_than, .to_be_between, .to_be_close_to, oltre a expect.edit_distance(a, b) ed expect.embedding_distance(a, b). I punteggi di log_feedback vengono aggregati (media per chiave) su tutti i test di valutazione.
Vincolare la build
pytest tests/eval/ \
--potato-threshold correct=0.8 \
--potato-threshold similarity=0.7 \
--potato-experiment agent-regression| Opzione | Effetto |
|---|---|
--potato-threshold KEY=MIN | Fa fallire l'esecuzione se mean(KEY) < MIN. Ripetibile. |
--potato-experiment DATASET | Registra l'esecuzione come esperimento. |
--potato-no-sync | Salta la registrazione dell'esperimento. |
Se una soglia viene violata, l'esecuzione termina con codice diverso da zero (facendo fallire il job CI) e stampa THRESHOLD FAILED: <key> = <actual> < <min>. Gli esperimenti registrati sono semplici file ($POTATO_EVAL_STORE, predefinito ./eval_store) che puoi caricare come artefatto della CI.
GitHub Actions
Un workflow di esempio si trova in examples/agent-traces/ci-eval/ci_workflow_example.yml. Esegue la suite su ogni PR, applica le soglie e carica i record degli esperimenti come artefatto.
Correlati
- Riferimento completo su Read the Docs — tutte le opzioni pytest e le variabili d'ambiente, allineato alla versione
- Valutatori programmatici
- Dataset ed esperimenti