CI-Bewertung
Führen Sie Potato-Bewertungen in Ihrer eigenen pytest-Suite aus und lassen Sie die CI an Punktzahl-Schwellenwerten scheitern, sodass eine Prompt- oder Modelländerung, die die Agentenqualität verschlechtert, den Build wie ein Unit-Test fehlschlagen lässt. Mit expect()-Assertion-API und einem Beispiel-Workflow für GitHub Actions.
Führen Sie Potato-Bewertungen in Ihrer eigenen pytest-Suite aus und lassen Sie die CI an aggregierten Punktzahl-Schwellenwerten scheitern, sodass eine Prompt- oder Modelländerung, die die Qualität verschlechtert, den Build genauso fehlschlagen lässt wie ein Unit-Test. Dies ist die Schicht zum Operationalisieren der Bewertung, aufgesetzt auf programmatische Evaluatoren sowie Datensätze & Experimente.
Installation
Das Plugin wird mit Potato ausgeliefert und lädt sich nach der Installation automatisch:
pip install -e . # registers the `potato_eval` pytest pluginOhne Installation laden Sie es explizit: pytest -p potato.testing.pytest_plugin.
Eval-Tests schreiben
Markieren Sie einen Test mit @pytest.mark.potato_eval und fordern Sie die potato_eval-Fixture an:
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(...) bietet .to_equal, .to_contain, .to_be_less_than, .to_be_greater_than, .to_be_between, .to_be_close_to sowie expect.edit_distance(a, b) und expect.embedding_distance(a, b). Die log_feedback-Punktzahlen werden über alle Eval-Tests hinweg aggregiert (Mittelwert pro Schlüssel).
Den Build absichern
pytest tests/eval/ \
--potato-threshold correct=0.8 \
--potato-threshold similarity=0.7 \
--potato-experiment agent-regression| Option | Wirkung |
|---|---|
--potato-threshold KEY=MIN | Lässt den Lauf fehlschlagen, wenn mean(KEY) < MIN. Mehrfach angebbar. |
--potato-experiment DATASET | Zeichnet den Lauf als Experiment auf. |
--potato-no-sync | Überspringt die Experiment-Aufzeichnung. |
Wird ein Schwellenwert verletzt, endet der Lauf mit einem Exit-Code ungleich null (der CI-Job schlägt fehl) und gibt THRESHOLD FAILED: <key> = <actual> < <min> aus. Aufgezeichnete Experimente sind einfache Dateien ($POTATO_EVAL_STORE, standardmäßig ./eval_store), die Sie als CI-Artefakt hochladen können.
GitHub Actions
Ein Beispiel-Workflow liegt unter examples/agent-traces/ci-eval/ci_workflow_example.yml. Er führt die Suite bei jedem PR aus, prüft die Schwellenwerte und lädt die Experiment-Aufzeichnungen als Artefakt hoch.
Verwandte Themen
- Vollständige Referenz auf Read the Docs — alle pytest-Optionen und Umgebungsvariablen, versionsgenau
- Programmatische Evaluatoren
- Datensätze & Experimente