Skip to content

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:

bash
pip install -e .          # registers the `potato_eval` pytest plugin

Senza 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:

python
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 assertion

expect(...) 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

bash
pytest tests/eval/ \
  --potato-threshold correct=0.8 \
  --potato-threshold similarity=0.7 \
  --potato-experiment agent-regression
OpzioneEffetto
--potato-threshold KEY=MINFa fallire l'esecuzione se mean(KEY) < MIN. Ripetibile.
--potato-experiment DATASETRegistra l'esecuzione come esperimento.
--potato-no-syncSalta 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