O log de sessão do DeepSeek Harness como registro de custos
Updated August 16, 2026 · first published August 16, 2026
A maioria das stacks de agentes aparafusa o rastreio de custo depois: um wrapper em volta da chamada ao modelo que escreve tokens num sistema separado, o qual acaba divergindo da realidade. O DeepSeek Harness faz o contrário. O log de sessão é o artefato primário, e o uso de tokens mora dentro dele.
A sessão é um log de eventos append-only
Uma sessão é uma sequência ordenada e apenas-acrescentável de entradas SessionEvent tipadas. Cada evento carrega quatro campos:
| Campo | O que significa |
|---|---|
type | O tipo de evento, por exemplo assistant/message |
seq | Número de sequência monotônico dentro da sessão |
time | Carimbo de tempo |
data | A carga útil específica do tipo |
Eventos de superfície (o que uma interface exibe) acrescentam dois campos: sourceEventSeqs, que aponta de volta para os eventos brutos dos quais derivam, e surfaceOp. Esses ponteiros são a razão de um número de custo poder ser rastreado até exatamente os eventos que o produziram.
Os eventos que interessam a um modelo de custo
turn/starteturn/end: o colchete externo de um pedido do usuário.turn/endcarrega umTurnEndReasondizendo se o turno concluiu, foi abortado ou truncado.step/startestep/end: um passo é um pedido ao modelo mais as chamadas de ferramenta que ele dispara. É a unidade natural de cobrança.assistant/message: saída do modelo, comTokenUsageopcional.assistant/chunk: saída em streaming, incluindo chunks de uso.tool/calletool/result: execução de ferramentas; o resultado pode carregarmeta.request/headererequest/context: oEpochHeadere o contexto do pedido com provedor, modelo e janela de contexto. Esse par é o que coloca preço num número de uso.
A regra que guia a documentação é: o que é visível ao modelo fica registrado. Tudo o que entra no contexto do modelo deixa um evento. Isso torna o log completo por construção, em vez de completo enquanto ninguém esquecer de instrumentá-lo.
O uso viaja com a saída
O uso de tokens não é escrito num canal lateral: viaja com a saída à qual pertence. Prefira os chunks de uso (assistant/chunk com { type: 'usage' }) porque ficam o mais perto possível do que o provedor de fato cobrou; recorra a assistant/message.usage quando não houver chunk. Um modelo de custo que lê assim nunca consegue atribuir um número a um passo que não o gerou.
Histórico derivado, não duplicado
O histórico de mensagens que o modelo vê é projetado a partir do log de eventos, em vez de mantido ao lado como uma segunda verdade. Essa é a diferença entre um sistema cujos números de custo concordam com sua execução e um em que os dois divergem e ninguém sabe qual está certo.
«Visível ao modelo significa registrado» é a única regra que torna possível reconstruir custo. Sem ela, todo número de atribuição é uma estimativa com margem de erro desconhecida.
O que construir em cima
- Junte
step/startestep/endpara formar spans de passo: a unidade contra a qual você reportará custo. - Anexe
request/context(provedor, modelo, janela de contexto) e o preço a partir do uso do chunk a cada span. - Conte o fan-out de
tool/callpor passo: a ramificação de ferramentas é o motivo habitual de um turno passar a custar dez vezes mais. - Observe a distribuição de
TurnEndReason. Turnos abortados e truncados são trabalho pago sem resultado, e são a primeira métrica que você não tem sem um log.
Related
- O que é DeepSeek Harness? Guia completo
- Tudo é um plugin: a arquitetura (EN)
- Onde colocar os limites de gasto (EN)
- Convenções GenAI do OpenTelemetry (EN)
Want this applied to your own LLM spend? FinOps LLM runs a free audit of your AI costs and shows where the savings are. Book free audit →