CLI, REST API, ferramentas MCP e SDK do motor de rotulagem
Controle o motor de rotulagem pelo potato label, pelas rotas REST /api/engine/v1, por cinco ferramentas MCP do motor ou pela classe Study em Python, todos sobre um único arquivo engine.sqlite.
O servidor de anotação, a linha de comando, a REST API, as ferramentas MCP e o Python SDK controlam o mesmo motor de rotulagem sobre o mesmo arquivo engine.sqlite no diretório da tarefa. Você pode iniciar um estudo pela linha de comando, servir as solicitações a pessoas com o servidor e certificar a partir de um notebook.
Só um processo controla um estudo por vez. O planejador de um servidor em execução detém o lock de escrita do estudo e, enquanto o detém, potato label run, potato label certify e Study.run() recusam e informam isso. Nesse caso, certifique pelo servidor, com POST /api/engine/v1/certify ou pela página de administração. O lock existe porque dois controladores sorteariam duas amostras de calibração e certificariam com os rótulos um do outro. O lock é liberado quando quem o detém termina. Um detentor encerrado à força na mesma máquina é substituído na hora, e um em outra máquina após dois minutos sem heartbeat. Os comandos somente leitura (status, certificate, calls, export) funcionam a qualquer momento.
Linha de comando
Todo comando do motor recebe o arquivo de configuração do estudo:
potato label <command> <config.yaml> [options]Os nove comandos cobrem um estudo da primeira chamada a modelo até o conjunto de dados exportado:
| Comando | O que faz |
|---|---|
run | Rotula todos os itens com a cascata, sorteia a amostra de calibração cega, certifica e resolve. --until predicted (o padrão) para depois de uma passagem, e --until met continua até todos os contratos estarem cumpridos ou o motor estar esperando pessoas. Aceita também --max-items N, --budget-usd X (substitui budgets.model_usd nesta execução), --max-ticks N (20 por padrão) e --json. Uma execução interrompida retoma de onde parou sem repetir chamadas a modelos. Sai com status 1, nomeando a fonte, quando a última execução de uma fonte falhou ou todas as respostas dela foram erros, ou quando nenhuma fonte consegue rotular um esquema que um contrato nomeia. |
status | Itens, predições, solicitações por finalidade, contratos, gasto, itens ainda sem rótulo e uma linha para cada fonte com erros ou com uma execução que falhou ou está pausada. --json. |
certify | Testa todos os contratos com novos rótulos cert e novas predições. Quando só os rótulos dev mudaram, o resultado armazenado volta com uma nota, e --retest testa a regra que dev agora escolhe, na inspeção seguinte (veja Inspeções). --json. |
certificate | O certificado de qualidade. --format md (o padrão), html ou json, e --out FILE. |
export | Rótulos com proveniência, o certificado (JSON, Markdown, HTML), um dataset card e o registro de chamadas, em --out DIR (<output_annotation_dir>/labeling_engine por padrão). |
calls | O registro de auditoria de chamadas a modelos em JSON lines. --out FILE. |
distill | Treina um modelo com os rótulos até agora e o coloca em primeiro na cascata. |
optimize | Pontua todos os subconjuntos da cascata nos rótulos dev e relata o mais barato que mantém a cobertura. Quando nenhum subconjunto mantém cobertura alguma, não recomenda nenhum. --prompts N também pede a um nível LLM N paráfrases do seu prompt e pontua cada uma nos itens dev. São chamadas a modelos, registradas e contabilizadas no orçamento, e armazenadas sob versões de fonte próprias, enquanto o prompt atual é pontuado a partir das predições armazenadas. A cascata e o certificado não são alterados. |
migrate-config | Grava uma cópia da configuração com um bloco labeling_engine equivalente às suas chaves de IA mais antigas. --out FILE. Veja Migrar para o motor de rotulagem. |
Acompanhar o progresso não gasta nada, porque status, certificate e a página de administração leem resultados armazenados. Cada novo teste, seja de certify com novos rótulos ou de certify --retest, gasta parte do orçamento de erro de um contrato.
Arquivos gravados pela exportação
potato label export grava quatro tipos de arquivo no diretório de saída:
| Arquivo | Conteúdo |
|---|---|
labels.jsonl, labels.csv | Uma linha por item e esquema, rotulado ou não, com id, schema, label, label_origin (auto, human, adjudicated, ...), status (accepted, accepted_uncertified sob threshold_legacy, pending, pending_recert), source, model, source_version, confidence, contract_version e request_ids. Um rótulo de máquina cuja fonte mudou desde que foi aceito mostra pending_recert até que a passagem seguinte o certifique de novo. |
certificate.json, .md, .html | O certificado. |
README.md | Um dataset card com front matter do Hugging Face, construído a partir do certificado. |
model_calls.jsonl | Todas as chamadas a modelos, com o modelo, hashes do prompt e da resposta, tokens, latência, custo, acertos de cache e categorias de mascaramento. |
Os exportadores comuns (python -m potato.export e a exportação do painel) exportam as anotações das pessoas, e a página de formatos de exportação os lista. Entre eles, o formato labeling_engine grava os mesmos arquivos que potato label export e se recusa a rodar quando o motor não está habilitado. Com o motor ligado, as exportações CSV, Parquet e Hugging Face ganham duas colunas que dizem a qual solicitação do motor cada anotação respondeu. engine_purpose contém a finalidade, por exemplo calibration, e engine_request contém um JSON com a finalidade, a probabilidade de inclusão, a visibilidade, a divisão e o id da solicitação. Use essas colunas para separar a amostra aleatória cega das respostas de verificação.
REST API
Todas as rotas do motor ficam em /api/engine/v1 e devolvem JSON. Autentique-se com a chave de administrador no cabeçalho X-API-Key ou com uma sessão de administrador. As leituras exigem a permissão do painel de administração, certify e plan exigem gerenciamento de atribuições, e o certificado exige permissão de exportação.
| Método e caminho | Devolve |
|---|---|
GET /status | Itens, predições, solicitações, totais de chamadas, orçamentos e, para cada esquema, a cascata, os contratos e as contagens de rótulos resolvidos |
GET /schemes/<name>/contracts | O resultado mais recente de cada contrato do esquema, marcado stale se a cascata mudou |
GET /schemes/<name>/risk_coverage | Para cada limiar do último nível, a fração aceita, o erro observado e o limite superior garantido, nos rótulos cert |
GET /schemes/<name>/reliability | Faixas de confiabilidade, ECE e Brier score por nível, nos rótulos de calibração |
GET /schemes/<name>/drift | O monitor de auditorias por contrato de risco seletivo |
GET /schemes/<name>/optimize | O relatório de cascata mais barata, pontuado nos rótulos dev |
GET /requests | Contagens de solicitações por finalidade e status, e as próprias solicitações. Os filtros são purpose, status (repita o parâmetro ou separe valores com vírgulas), schema e limit (máx. 1000) |
GET /calls | O registro de chamadas, das mais recentes para as mais antigas, e totais por fonte. limit (máx. 500), offset |
GET /certificate | O certificado. format=json (o padrão), md ou html, e save=1 também o armazena |
GET /crowd | O último plano de crowdsourcing do planejador, uma simulação a menos que o gasto real esteja ligado |
POST /certify | Testa todos os contratos agora. ?retest=1 (ou {"retest": true}) também testa uma regra que só os rótulos dev mudaram |
POST /plan | Executa uma passagem do planejador agora |
As rotas respondem 404 quando o motor está desligado para o estudo. Respondem 400 com um erro em JSON para um parâmetro inválido, como um limit que não é número, um purpose ou status desconhecido, ou um format diferente de json, md ou html.
Por exemplo, esta requisição busca o certificado atual em Markdown de um servidor na porta 8000:
curl -H "X-API-Key: $ADMIN_API_KEY" \
"http://localhost:8000/api/engine/v1/certificate?format=md"Ferramentas MCP
O servidor MCP expõe cinco ferramentas do motor, com as mesmas permissões das rotas REST:
engine_statusengine_requestsengine_run, que executa uma passagem do planejadorengine_certify, que aceitaretestengine_certificate, emjson,mdouhtml
Conceder essas ferramentas com o motor desligado gera um aviso de validação. Via potato mcp connect, uma chamada recusada (uma permissão ausente, um parâmetro inválido) volta como um erro de ferramenta que traz a mensagem do servidor. A documentação do servidor MCP explica como conceder ferramentas e conectar um cliente.
Python SDK
A classe Study controla o motor a partir do Python, por exemplo em um notebook:
from potato.labeling_engine.sdk import Study
study = Study("examples/labeling-engine/text-certified-sentiment/config.yaml")
study.run() # label, sample, certify, resolve
for req in study.requests(status="open")[:5]:
study.label(req.item_id, req.schema, "positive", user="me")
study.certify()
print(study.certificate(fmt="md"))
study.export("out/")Cada método espelha um comando ou uma rota:
| Método | Faz |
|---|---|
Study(config_path) | Carrega a configuração e os itens |
run(until="predicted", max_ticks=20) | Como potato label run, e obtém o lock de escrita |
label(item_id, scheme, value, user, request_id=None) | Registra o rótulo de uma pessoa. Fecha request_id ou, na falta dele, uma solicitação que essa pessoa tem em mãos no item, e caso contrário é guardado como rótulo orgânico, que nunca certifica. Um segundo rótulo da mesma pessoa no mesmo item atualiza o primeiro |
status() | Como GET /status |
requests(status=None, purpose=None, ...) | O registro de solicitações |
certify(retest=False) | Como potato label certify |
certificate(fmt="json") | json, md ou html |
export(out_dir) | Como potato label export |
O exemplo rotula todas as solicitações abertas como "positive" só para mostrar as chamadas. Um rótulo registrado por Study.label que não responde a nenhuma solicitação é guardado como rótulo orgânico, e rótulos orgânicos nunca certificam, então um script que rotula itens que o motor não solicitou acrescenta rótulos que nenhum contrato lê.
Leitura adicional
- O motor de rotulagem
- Configuração do motor de rotulagem
- Contratos do motor de rotulagem
- Painel do administrador, que tem um link para a página de administração do motor
Para detalhes de implementação, consulte a documentação de origem.