Skip to content

Avaliação em CI

Execute avaliações do Potato dentro da sua própria suíte pytest e condicione o CI a limiares de pontuação, para que uma mudança de prompt ou de modelo que degrade a qualidade do agente quebre o build como um teste unitário. Inclui uma API de asserções expect() e um exemplo de workflow do GitHub Actions.

Execute avaliações do Potato dentro da sua própria suíte pytest e condicione o CI a limiares de pontuação agregada, para que uma mudança de prompt ou de modelo que degrade a qualidade quebre o build da mesma forma que um teste unitário. Esta é a camada de "operacionalizar a avaliação" sobre os avaliadores programáticos e os conjuntos de dados e experimentos.

Instalação

O plugin é distribuído com o Potato e carrega automaticamente após a instalação:

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

Sem instalar, carregue-o explicitamente: pytest -p potato.testing.pytest_plugin.

Escrevendo testes de avaliação

Marque um teste com @pytest.mark.potato_eval e solicite a 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(...) oferece .to_equal, .to_contain, .to_be_less_than, .to_be_greater_than, .to_be_between, .to_be_close_to, além de expect.edit_distance(a, b) e expect.embedding_distance(a, b). As pontuações de log_feedback são agregadas (média por chave) em todos os testes de avaliação.

Condicionando o build

bash
pytest tests/eval/ \
  --potato-threshold correct=0.8 \
  --potato-threshold similarity=0.7 \
  --potato-experiment agent-regression
OpçãoEfeito
--potato-threshold KEY=MINFalha a execução se mean(KEY) < MIN. Pode repetir.
--potato-experiment DATASETRegistra a execução como um Experimento.
--potato-no-syncNão registra o experimento.

Se um limiar for violado, a execução termina com código diferente de zero (fazendo o job de CI falhar) e imprime THRESHOLD FAILED: <key> = <actual> < <min>. Os experimentos registrados são arquivos simples ($POTATO_EVAL_STORE, padrão ./eval_store) que você pode enviar como artefato de CI.

GitHub Actions

Um workflow de exemplo está em examples/agent-traces/ci-eval/ci_workflow_example.yml. Ele executa a suíte em cada PR, aplica os limiares e envia os registros de experimento como artefato.

Relacionados