Especificação de métricas e fórmulas¶
Recomendado para leitura prévia
- Protocolo de avaliação — desenho experimental, bateria e critérios de desfecho.
- Runbook de reprodutibilidade — passos para repetir uma corrida com evidências.
- Gabarito da bateria — quando publicado.
- Tarifas GPT-5.4 Nano — referência de custo do provedor (documentação oficial do provedor).
- Tarifas Gemini 3.5 Flash — referência de custo do provedor (documentação oficial do provedor).
Unidade experimental¶
1 pergunta = 1 sessão = 1 corrida. FinOps por sessão = por corrida (\(C_i\)).
Inventário de métricas¶
A. Modo MCP (essenciais)¶
| Símbolo | Nome | Unidade | Agregação |
|---|---|---|---|
| \(o_i\) | Desfecho da corrida \(c_i\) | enum (6 classes) | distribuição |
| \(A_{\mathrm{est}}\) | Aderência estrutural | [0,1] | média sobre \(\mathcal{C}\) |
| \(A_{\mathrm{exec}}\) | Executabilidade | [0,1] | média |
| \(A_{\mathrm{part}}\) | Sucesso parcial | [0,1] | média |
| \(T\) | Rastreabilidade | [0,1] | média |
| \(k_i\) | Tool calls consumidas | inteiro ≥ 0 | — |
| \(\bar{k}\) | Média de tool calls | adimensional | média |
| \(R_{\mathrm{budget}}\) | Respeito ao orçamento (≤10) | [0,1] | média |
| \(L_i\) | Latência ponta a ponta | s | — |
| \(L_{p50}\), \(L_{p95}\) | Percentis de latência | s | sobre \(\{L_i\}\) |
| \(n_{\mathrm{in},i}\), \(n_{\mathrm{out},i}\) | Tokens entrada/saída | tokens | — |
| \(C_i\) | Custo FinOps LLM | USD | — |
| \(\bar{C}\), \(C_{\mathrm{total}}\) | Custo médio / total campanha | USD | agregados |
B. Modo MCP (taxas de erro complementares)¶
| Símbolo | Fórmula |
|---|---|
| \(A_{\mathrm{syn}}\) | \(\|\{c_i: o_i=\texttt{syntax\_error}\}\|/N\) |
| \(A_{\mathrm{struct}}\) | \(\|\{c_i: o_i=\texttt{structural\_error}\}\|/N\) |
| \(A_{\mathrm{execErr}}\) | \(\|\{c_i: o_i=\texttt{execution\_error}\}\|/N\) |
| \(A_{\mathrm{budget}}\) | \(\|\{c_i: o_i=\texttt{budget\_exceeded}\}\|/N\) |
C. Modo baseline¶
| Símbolo | Nome |
|---|---|
| \(g_i\) | Gabarito atendido (booleano) |
| \(A_{\mathrm{gab}}\) | Fração de respostas corretas vs gabarito |
D. Infraestrutura (separada)¶
| Símbolo | Nome |
|---|---|
| \(C_{\mathrm{infra}}\) | Estimativa custo cluster AWS (período da campanha) |
Não entra em \(C_i\). Latência, tokens e FinOps aplicam-se apenas ao modo MCP.
Algoritmo de desfecho¶
Seja \(S_i = \{s_{i,1},\ldots,s_{i,n_i}\}\) com \(n_i \leq 5\) SQLs válidos e \(G_i\) o gabarito da pergunta. Avaliar pipeline MCP (parse Calcite → estrutural → execução Hive) e match com \(G_i\) na resposta agregada.
Ordem de precedência (primeira condição verdadeira define \(o_i\)):
budget_exceeded— \(k_i > 10\)syntax_error— falha de parse Calcite em algum SQLstructural_error— referência inválida ao catálogo canônicoexecution_error— falha Hive ou nenhum SQL bate gabaritopartial_success— parte dos SQLs válidos bate gabarito, não todossuccess— pipeline OK e todos os SQLs exigidos batem gabarito
Fórmulas — modo MCP¶
Conjunto de corridas: \(\mathcal{C}=\{c_1,\ldots,c_N\}\), \(|\mathcal{C}|=N\).
\(\text{trilha}(c_i)\) completa sse session.jsonl cobre: pergunta → tool calls → metadados → todos os SQLs
→ desfechos por statement.
Ordenar \(\{L_i\}\): \(L_{p50} = L_{(\lceil 0{,}5\,N \rceil)}\), \(L_{p95} = L_{(\lceil 0{,}95\,N \rceil)}\).
FinOps por corrida¶
Tarifas por modelVersion \(m\) (USD por token):
| Modelo | \(p_{\mathrm{in},m}\) | \(p_{\mathrm{out},m}\) |
|---|---|---|
gpt-5.4-nano |
\(0{,}20 / 10^6\) | \(1{,}25 / 10^6\) |
gemini-3.5-flash |
\(1{,}50 / 10^6\) | \(9{,}00 / 10^6\) |
MVP: sem custo monetário de tool calls Atlas em FinOps; \(k_i\) é métrica de controle.
Fórmulas — modo baseline¶
Sem MCP: \(k_i = 0\); não calcular \(A_{\mathrm{est}}\), \(T\), \(R_{\mathrm{budget}}\).
Na campanha baseline-static v1, \(N_{\mathrm{base}} = 30\) com um único modelVersion (gemini-3.5-flash).
Extensão futura a segundo provedor é opcional e não se mistura com esta v1. A executabilidade das colas \(G_i\)
no MySQL é pré-requisito documentado no gabarito e não entra em \(A_{\mathrm{gab}}\).
Schema metrics.json¶
Campos obrigatórios por corrida (modo MCP):
{
"runId": "run-20260609-1430-a1b2",
"campaignId": "mcp",
"modelVersion": "gpt-5.4-nano",
"outcome": "partial_success",
"toolCalls": 7,
"latencySec": 4.2,
"n_in": 12000,
"n_out": 800,
"cost_usd": 0.0034,
"sqlCount": 3,
"traceComplete": true
}
Campos obrigatórios (modo baseline):
{
"runId": "run-20260609-1500-c3d4",
"campaignId": "baseline-static",
"modelVersion": "gemini-3.5-flash",
"gabaritoMatch": true
}
| Campo | Tipo | Descrição |
|---|---|---|
runId |
string | Identificador da corrida |
campaignId |
string | mcp ou baseline-static |
modelVersion |
string | Modelo fixado na corrida |
outcome |
string | Uma das 6 classes (só MCP) |
toolCalls |
integer | \(k_i\) (0 no baseline) |
latencySec |
number | \(L_i\) em segundos (só MCP) |
n_in, n_out |
integer | Tokens reportados pela API (só MCP) |
cost_usd |
number | \(C_i\) calculado pela fórmula FinOps (só MCP) |
gabaritoMatch |
boolean | \(g_i\) (baseline) |
sqlCount |
integer | \(n_i \leq 5\) (MCP) |
traceComplete |
boolean | Trilha completa (MCP) |
Metadados de reprodutibilidade permanecem em context.json (ver runbook).
Exemplo numérico¶
Corrida \(c_i\), gpt-5.4-nano: \(n_{\mathrm{in}}=12\,000\), \(n_{\mathrm{out}}=800\), \(k_i=7\), \(L_i=4{,}2\,\mathrm{s}\),
\(o_i=\texttt{partial\_success}\).
Campanha \(N=60\): agregar \(A_{\mathrm{est}}\), \(\bar{k}\), \(L_{p50}\), \(\bar{C}\) sobre o conjunto de corridas.
Recomendado para leitura posterior
Seguinte: Runbook de reprodutibilidade — passos para repetir uma corrida com evidências.