Skip to content

Começar

Escrevendo uma suíte

Uma suíte é composta de dois arquivos e um dataset. oloproof init gera a estrutura dos dois, e essa estrutura vem comentada porque a primeira sessão de onboarding perdeu quatro tentativas por causa de uma string ausente, e não de um recurso ausente.

O arquivo do projeto

oloproof.yaml declara o que é medido e o que faz a medição.

version: 1
project: example
dataset: data/example.jsonl
system:
  name: example-support-bot
  version: "1"
  callable: app:answer
  config: {}
evaluators:
  - type: exact_match
    criterion: exact_label
    field: label

system.callable é um caminho de import para a coisa sob teste. criterion é o nome que uma métrica, um limiar e um relatório vão todos usar para o resultado deste avaliador, então vale a pena escolher uma palavra que você reconheça em um gate.

Os tipos de avaliador

Todo type: que o arquivo aceita, por família. Um campo rejeitado responde com os campos que aquele avaliador aceita, então um palpite errado fica a uma execução do certo.

FamíliaTipos
Determinísticosexact_match, contains, regex, json_schema
Juiz LLMrubric_judge, groundedness_judge, citation_support_judge, probability_judge, cascade
modelomodel_classifier
Recuperaçãohit_rate, recall, mrr, ndcg, citation_validity
Agenteagent_max_steps, agent_tool_called, agent_no_tool_loop, agent_tool_sequence, agent_no_undeclared_tool, agent_constraints_satisfied
Multiagenteagent_route, agent_tool_permissions, agent_max_handoffs
Preditivospredictive_correct, predictive_precision, predictive_recall, predictive_ranking, predictive_brier, predictive_log_loss, predictive_absolute_error

Um juiz LLM em um endpoint que não seja o da OpenAI precisa de mais dois campos: base_url: e api_key_env:. A chave é lida do ambiente no momento da chamada e nunca é armazenada.

Executando

oloproof run

Uma execução roda cada caso, julga cada um com todos os avaliadores e armazena os resultados como registros endereçados por conteúdo. Executá-la de novo contra um sistema e um dataset inalterados reaproveita o que já existe, e é por isso que uma execução repetida quase não custa nada e não é medida.

oloproof plan RUN_ID --run informa o que seria necessário para resolver uma regra não decidida, com o preço calculado a partir do que aquela execução realmente gastou. Se receber o id de uma comparação, não precisa de flag.

Réplicas

Um caso medido uma vez diz o que aconteceu uma vez. replicates: mede cada caso mais de uma vez e informa quantos mudaram de veredito entre medições idênticas.

Vale a pena saber esse número antes de confiar em qualquer comparação: contra um assistente real, cerca de um em cada nove casos observados mudou de veredito entre execuções idênticas.

Próximos passos

Classificadores e regressores tratam dos tipos de recuperação, agente e preditivos.

  • Gate no CI transforma uma decisão em um código de saída.
  • Juízes trata do que um juiz LLM precisa atingir antes de poder servir de gate para um lançamento.
  • Conceitos básicos explica os quatro estados de decisão e por que os denominadores importam.