Skip to content

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:

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

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

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

bash
pytest tests/eval/ \
  --potato-threshold correct=0.8 \
  --potato-threshold similarity=0.7 \
  --potato-experiment agent-regression
OptionWirkung
--potato-threshold KEY=MINLässt den Lauf fehlschlagen, wenn mean(KEY) < MIN. Mehrfach angebbar.
--potato-experiment DATASETZeichnet 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