Saltar para o conteúdo
20/30Capítulo 20 de 30

Fine-tuning, retrieval ou prompt? A decisão é económica

A mesma pergunta de suporte respondida de três formas e custeada de ponta a ponta. O fine-tuning só compensa após remover 492 tokens.

Nesta página

Aqui está uma pergunta de suporte — qual é a versão mínima do Node que este projeto espera? — respondida de quatro formas contra a mesma documentação, e custeada de ponta a ponta.

rotatokens enviadoscusto de uma resposta
a documentação inteira no prompt, sem cache43.311$0,066317
a documentação inteira no prompt, com cache43.311$0,007864
os quatro melhores excertos, obtidos por retrieval1.037$0,002906
um modelo com fine-tuning, sem documentação nenhuma28$0,002088

O fine-tune é o mais barato. É também, para este problema, a resposta errada — e ambas as coisas podem ser demonstradas com a mesma aritmética, não com uma opinião.

Três números nessa tabela já contradizem o conselho que lerá em todo o lado. Ligar a cache poupou 88 % por pergunta e, com cem perguntas por mês, torna a mesma rota cinco vezes mais cara. Retrieval envia quarenta e duas vezes menos tokens do que a rota com prompt em cache e custa apenas 2,7 vezes menos. E o modelo com fine-tuning, reduzido a um prompt de vinte e oito tokens, poupa só 28 % face a retrieval — porque 97 % do que paga é a resposta, e o treino não encurta respostas.

Capítulo 16 construiu uma função de custo para ler uma fatura. Aqui, a mesma função decide uma arquitetura.

Mostrar detalhes

O que este capítulo precisa dos anteriores.

  • Capítulo 11 construiu LoRA e QLoRA como técnica: o que é um adaptador de baixo posto, porque treina várias ordens de grandeza menos parâmetros. Este capítulo nunca o volta a explicar e limita-se a atribuir-lhe preço.
  • Capítulo 16 construiu computeCost, os cinco grupos faturáveis, e a regra do prefixo para prompt caching. A folha de custos abaixo é essa função com três rotas inseridas.
  • Capítulo 19 construiu o retriever: chunking com um cabeçalho contextual, pesquisa híbrida, quatro espaços de excertos, citações. Este capítulo reutiliza-o e mede o custo de o executar, não como funciona.

Tudo aqui é TypeScript, porque são tarifas, aritmética e contabilidade, sem tensores à vista — com uma exceção, declarada quando acontece: para descobrir o que o fine-tuning realmente ensina, este capítulo faz fine-tuning de um modelo, e essa parte é Python.

«Devemos fazer fine-tuning?» é perguntado como se fosse uma questão sobre um modelo. É uma questão sobre um orçamento, com uma forma a que nenhum benchmark responde: o que é pago uma vez, o que é pago por pergunta, e o que volta a ser pago sempre que o mundo muda.

As três rotas também não são três formas de fazer a mesma coisa, e os fornecedores dizem-no de forma mais clara do que a maioria dos blog posts. A própria tabela da OpenAI sobre aquilo para que o supervised fine-tuning é melhor lista quatro usos: classificação, tradução matizada, geração de conteúdo num formato específico e correção de falhas no seguimento de instruções.1 Nenhum deles é «ensinar ao modelo algo que ele não sabe». O resumo do benefício é que «pode usar prompts mais curtos, com menos exemplos e dados de contexto, o que poupa custos de tokens em escala e pode reduzir a latência» — um argumento sobre a fatura, vindo da empresa que vende a funcionalidade.

Portanto:

  • Fine-tuning ensina forma e comportamento. Tom, formato, a estrutura de uma resposta, um limite que consegue demonstrar mas não descrever. A versão publicada mais forte é a Hipótese de Alinhamento Superficial do LIMA: o conhecimento vem do pretraining, o alinhamento ensina sobretudo em que subdistribuição de formatos falar — razão pela qual mil exemplos curados foram suficientes nesse caso.2
  • Retrieval fornece factos que mudam. É a única das três em que uma edição à documentação chega à resposta sem tocar no modelo.
  • Prompting cobre a maioria dos casos reais, e é a baseline honesta. In-context learning tem sido o padrão desde Language Models are Few-Shot Learners: a tarefa é demonstrada dentro do prompt e nenhum peso se move.3

Dois artigos medidos fecham a porta ao erro no meio. Ovadia e colegas compararam injetar conhecimento por fine-tuning não supervisionado com injetá-lo por retrieval, e retrieval venceu de forma consistente, incluindo em factos que o modelo base já tinha visto no pretraining.4 Gekhman e colegas mediram os danos: exemplos que introduzem novo conhecimento são ajustados lentamente, e quando o modelo finalmente os ajusta, a taxa de alucinação em outras perguntas aumenta.5 Ensinar factos por fine-tuning não só falha; degrada respostas nas quais nem estava a treinar.

Essa metade está resolvida. A metade económica não, e ocupa o resto do capítulo.

Um caso, executado de três formas: suporte técnico sobre a sua própria documentação, que muda todas as semanas.

O corpus é real e está neste disco: os 23 documentos Markdown que um repositório de software em uso mantém como documentação interna — o guia de build, as regras de marca, o briefing de tradução, dez manuais de serviço, as notas de desempenho e segurança. Medido com o200k_base, a codificação do Capítulo 7:

the corpus, measuredTEXT
documents                              23
characters                        159,223
words                              22,194
tokens (o200k_base)                42,921
tokens with per-file headers       43,158

Quarenta e três mil tokens é um tamanho confortável para esta decisão: cabe em qualquer context window moderna, por isso as três rotas estão genuinamente disponíveis. Aos dez milhões, a decisão está tomada por si, e é retrieval.

Agora, o trabalho que a palavra «semanalmente» está a fazer. A rotatividade da documentação costuma ser afirmada; aqui é contada, a partir do histórico de versões desse repositório:

medido nas últimas 26 semanasvalor
commits que tocaram nos 23 documentos40
desses, edições a um documento que já existia21
semanas de calendário distintas com pelo menos uma alteração11
commits que tocaram no catálogo de texto visível para o utilizador nos seus 8 semanas de vida157
semanas de calendário dessas 8 em que mudou8

Os documentos mexem-se mais ou menos de duas em duas semanas. As strings visíveis para o utilizador — que são aquilo sobre que uma equipa de suporte é realmente interrogada — mexeram-se em todas as semanas em que existiram, a cerca de vinte commits por semana. Qualquer rota que escolhamos tem de sobreviver a isso, e «com que frequência muda a coisa em que treinou?» afinal tem um número no seu próprio repositório, não uma opinião.

Foram escritas vinte perguntas realistas de suporte contra este corpus, uma por tema, e todos os valores abaixo são calculados sobre essas vinte.

A coisa mais simples que funciona: pôr o corpus inteiro no system prompt, a pergunta no fim, e deixar o modelo encontrá-la.

one call, route oneTEXT
system instructions                       140 tokens
the 23 documents                       43,158 tokens
the question (median of 20 measured)       13 tokens
the answer (the one assumption)           150 tokens

Todos os números aí foram contados, exceto o último: 150 output tokens é uma suposição, escolhida dentro do intervalo de turnos de assistente faturados no Capítulo 16. É o único valor aqui que não foi executado, é aplicado de forma idêntica às três rotas, e a secção de break-even mostra exatamente quanto a conclusão se move quando o altera.

Às tarifas lidas na página do fornecedor em 7 de setembro de 2026 — $1,50 por milhão de input tokens, $9,00 por milhão de output6 — isto dá $0,066317 por pergunta. Está a pagar para reler quarenta e três mil tokens a fim de responder a treze.

A correção do Capítulo 16 aplica-se diretamente: o corpus é estável e está à frente, por isso é um prefixo de cache perfeito, e relê-lo custa um décimo — $0,007864 por pergunta, um corte de 88 %. O aviso do Capítulo 16 também se aplica, na forma que esse capítulo assinalou e não orçamentou. Este fornecedor não cobra prémio de escrita; cobra renda. Uma cache explícita custa $0,000001 por token armazenado por hora,6 por isso manter 43.298 tokens quentes custa

43,298×$0.000001=$0.043298 per hour43{,}298 \times \$0.000001 = \$0.043298 \ \text{per hour}

quer alguém faça perguntas, quer não. São $189,78 ao longo de seis meses, por uma sala vazia. Divida a renda pela poupança por pergunta e a condição sai numa linha: guardar este corpus em cache paga-se acima de 0,74 perguntas por hora — 546 por mês depois de contar também a reconstrução semanal da cache. Abaixo disso, a funcionalidade que ativou para poupar dinheiro fá-lo perder dinheiro.

seis meses, 100 perguntas por mêstotal
corpus inteiro, sem cache$39,79
corpus inteiro, com cache$196,18

Mesma rota, mesmo código, uma flag, cinco vezes a fatura. O Capítulo 16 encontrou uma versão disto causada por um timestamp no sítio errado; aqui nada está errado exceto o tráfego. Uma cache é uma aposta no volume, e neste fornecedor essa aposta é feita à hora.

O retriever do Capítulo 19, sem alterações: cortar por limites de secção com um cabeçalho contextual, indexar, pôr os quatro melhores excertos no prompt. Medido sobre as vinte perguntas:

the retrieval route, measuredTEXT
chunks produced from the corpus              330
mean tokens of a chunk's own text          124.9
mean tokens of the four retrieved extracts   884
prompt per question (140 + 884 + 13)       1,037
one-off embedding of every chunk        46,823 tokens

Quarenta e duas vezes menos prompt tokens do que a rota um, a $0,002906 por pergunta. O índice custa $0,0070 a construir, a $0,15 por milhão de embedding tokens6 — menos do que três perguntas — e os mesmos $0,0070 a reconstruir de raiz sempre que a documentação muda. Reconstruir o índice inteiro todas as semanas durante seis meses custa dezoito cêntimos.

Vale a pena parar num ponto. Retrieval destrói prompt caching. O prefixo estável é agora a instrução de sistema de 140 tokens; a partir do token 141, o prompt difere em cada chamada, porque os excertos são escolhidos por pergunta. E 140 tokens está abaixo de todos os mínimos de cache citados no Capítulo 16. Portanto, a rota dois não pode ser posta em cache de todo, o que soa mal e não é: não guardar 1.037 tokens em cache é mais barato do que guardar 43.298.

É uma regra geral que vale a pena levar consigo: as duas grandes técnicas de poupança de tokens são mutuamente exclusivas sobre o mesmo conteúdo, e ganha a que remove mais tokens. Retrieval remove 97,6 % deles.

Treinar em duzentos exemplos no estilo da casa, depois fazer perguntas sem anexar documentação nenhuma.

the fine-tuned route, measuredTEXT
training examples                            200
training tokens                           24,389
epochs                                         3
prompt per question (15 + 13)                 28

O treino custa 24.389 × 3 × $10,00 por milhão = $0,7317. Esse é todo o custo de construção, menos do que um café, que é exatamente a razão pela qual tantas equipas o pagam antes de verificar se ajuda.

Agora a armadilha, e é por isso que este capítulo existe. Um modelo com fine-tuning não custa o mesmo a executar que o seu modelo base. A página de preços diz isso numa frase: «for model inference starting from Gemini 3, tuned model endpoint prediction price will be 1.5 times of the base model6 Não é o treino. É a inferência, em cada token, enquanto o modelo existir.

Portanto, ponha-o numa fórmula. Sejam pip_i e pop_o os preços base de input e output, mm o multiplicador do modelo tuned, LRL_R o comprimento do prompt da rota que está a substituir, LFL_F o comprimento do prompt depois do fine-tuning, e OO o comprimento da resposta. Fine-tuning só é mais barato por pergunta quando

LR  >  mLF  +  (m1)OpopiL_R \;>\; m\,L_F \;+\; \frac{(m-1)\,O\,p_o}{p_i}

O primeiro termo é óbvio: o novo prompt curto, com majoração. O segundo não é, e é onde o dinheiro vai parar — a sobretaxa sobre a resposta, que não tem nada que ver com o seu prompt e que o treino não consegue encurtar. Com os números medidos — m=1.5m = 1.5, LF=28L_F = 28, O=150O = 150, po/pi=6p_o/p_i = 6 — o limiar é

the break-even prompt lengthTEXT
answer   50 tokens -> the prompt it replaces must exceed   192 tokens
answer  150 tokens -> the prompt it replaces must exceed   492 tokens
answer  400 tokens -> the prompt it replaces must exceed 1,242 tokens
answer 1000 tokens -> the prompt it replaces must exceed 3,042 tokens

Com o comprimento de resposta medido, 492 tokens — dos quais 450 são a sobretaxa da resposta, não o prompt. Substituir um prompt mais curto do que isso fica mais caro por pergunta, para sempre, a qualquer volume; e o limiar cresce linearmente com o quanto o assistente diz, por isso um assistente que escreve respostas longas nunca conseguirá, através de fine-tuning, chegar a um token mais barato, por mais prompt que elimine.

O mesmo facto visto do outro lado é a frase a reter. Dos $0,002088 por pergunta da rota com fine-tuning, 97,0 % é a resposta. Fine-tuning otimiza os restantes três por cento.

Quatro números descrevem qualquer uma destas rotas: o que paga uma vez, o que paga quando a documentação muda, o que paga à hora independentemente de tudo, e o que paga por pergunta. Isto estende o computeCost do Capítulo 16 sem o modificar.

costsheet.tsTS
import { computeCost, type Pricing, type Usage } from "./cost";   // Chapter 16

export interface Route {
  name: string;
  setupUSD: number;            // paid once, before the first question
  perRefreshUSD: number;       // paid every time the documentation changes
  standingUSDPerHour: number;  // paid per hour whatever the traffic
  pricing: Pricing;
  usage: Usage;                // one question and its answer
}

export const perQueryUSD = (r: Route) => computeCost(r.pricing, r.usage);

const HOURS_PER_MONTH = (24 * 365.25) / 12;

export function totalUSD(
  r: Route, months: number, queriesPerMonth: number, refreshesPerMonth: number,
) {
  return r.setupUSD
       + months * refreshesPerMonth * r.perRefreshUSD
       + months * HOURS_PER_MONTH * r.standingUSDPerHour
       + months * queriesPerMonth * perQueryUSD(r);
}

/** Monthly volume at which `b` overtakes `a`. null = it never does. */
export function crossover(
  a: Route, b: Route, months: number, refreshesPerMonth: number,
): number | null {
  const fixed = (r: Route) =>
      r.setupUSD
    + months * refreshesPerMonth * r.perRefreshUSD
    + months * HOURS_PER_MONTH * r.standingUSDPerHour;
  const dFixed = fixed(b) - fixed(a);                     // b's extra fixed cost
  const dVar = perQueryUSD(a) - perQueryUSD(b);           // b's per-question saving
  if (dVar <= 0) return null;                             // b is never cheaper
  return Math.max(0, dFixed / dVar / months);
}

O modelo tuned não é uma tabela de preços diferente, é a mesma multiplicada:

the tuned endpoint is the base list times 1.5TS
const TUNED_MULTIPLIER = 1.5;   // read from the provider's pricing page, 2026-09-07

const scale = (p: Pricing, k: number): Pricing => ({
  input: p.input.map(t => ({ ...t, price: t.price * k })),
  cachedInput: p.cachedInput!.map(t => ({ ...t, price: t.price * k })),
  output: p.output.map(t => ({ ...t, price: t.price * k })),   
});

Essa linha destacada é todo o argumento da secção anterior escrito como código: o multiplicador também cai sobre output.

Seis meses, com a documentação atualizada semanalmente:

perguntas / mêsprompt, com cacheprompt, sem cacheretrievalfine-tune
100$196,18$39,79$1,93$21,01
1.000$238,65$397,90$17,62$32,28
10.000$663,32$3.978,99$174,52$145,04
100.000$4.909,98$39.789,90$1.743,49$1.272,56

E os pontos de crossover, que são os quatro números de que um orçamento realmente precisa:

crossovers, six monthsTEXT
retrieval -> fine-tune, documentation never changes:     148 questions / month
retrieval -> fine-tune, documentation refreshed weekly: 3,989 questions / month
prompt (no cache) -> retrieval:                            1 question / month
prompt (no cache) -> prompt (cached):                    546 questions / month

Leia os dois primeiros em conjunto, porque são o ponto do capítulo. Um corpus estacionário faz o fine-tuning pagar-se em cento e cinquenta perguntas; um corpus que muda semanalmente desloca o mesmo crossover por um fator de vinte e sete, e nada no modelo mudou — só a frequência com que paga por ele outra vez. O custo de construção é uma nota de rodapé; o custo de manutenção é a decisão.

Se agora concluir que uma equipa de suporte movimentada deve fazer fine-tuning, a aritmética concorda consigo. Continua a estar errado, e a secção seguinte explica porquê.

A folha de custos tem uma coluna que não consegue calcular, por isso esta secção executa o fine-tune: localmente, num pequeno modelo aberto, com o adaptador escrito à mão em vez de importado de uma biblioteca. O Capítulo 11 construiu LoRA; aqui está, nos q_proj e v_proj de todas as 24 camadas de Qwen2.5-0.5B-Instruct com rank 8:

lora.py — the whole adapterPYTHON
class LoRALinear(nn.Module):
    def __init__(self, base: nn.Linear, r=8, alpha=16):
        super().__init__(); self.base = base
        for p in self.base.parameters():
            p.requires_grad = False              # the model is frozen  
        self.A = nn.Parameter(torch.zeros(r, base.in_features))
        nn.init.normal_(self.A, std=1 / r)
        self.B = nn.Parameter(torch.zeros(base.out_features, r))
        self.s = alpha / r
        self.on = True                           # so the same run can compare both

    def forward(self, x):
        y = self.base(x)
        return y + (x @ self.A.T @ self.B.T) * self.s if self.on else y

Os duzentos exemplos de treino vêm mecanicamente do corpus, por isso reproduzem-se: a pergunta é um título de secção transformado em pergunta, a resposta é o próprio texto dessa secção num estilo de casa rígido — uma linha a começar por Short answer:, uma linha a começar por Source: com o caminho do ficheiro. O formato é a forma que está a ser ensinada; o caminho é o facto. Depois, dois números sobre vinte perguntas held-out: a resposta sai no estilo da casa, e nomeia o ficheiro que responde realmente à pergunta?

Duas baselines tornam a tabela legível, e ambas vêm da insistência do Capítulo 4, não de uma reflexão tardia. Dez das vinte respostas certas estão no mesmo ficheiro, por isso um modelo que ignora a pergunta e responde sempre CLAUDE.md pontua 10/20. E o retriever tem o seu próprio teto: nestas vinte perguntas, os seus quatro excertos contêm o ficheiro certo 14 vezes e classificam-no em primeiro 7, por isso 14/20 é o máximo que qualquer reader conseguiria pontuar usando-o.

measuredTEXT
LoRA modules 48   trainable parameters 540,672 (0.109 % of the model)
400 steps, 2 epochs, 0.76 s/step on 16 CPU threads, 304 s in total
mean loss over the first 50 steps 3.7363 -> over the last 50 steps 2.4197

                                        house style   correct source
always answer the most common file             --          10 / 20
the retriever's own ceiling                    --          14 / 20
base model, closed book                    0 / 20           0 / 20
fine-tuned, closed book                   19 / 20           8 / 20
base model, four retrieved extracts       13 / 20           2 / 20
fine-tuned, four retrieved extracts        1 / 20           1 / 20

A forma foi aprendida, completa e rapidamente. De zero para dezanove em vinte, com um adaptador de 540.672 parâmetros — 0,109 % do modelo — em cinco minutos de treino num processador sem placa gráfica à vista.

Os factos não. Oito em vinte não se distingue dos dez que obtém ao ignorar totalmente a pergunta, e o intervalo do Capítulo 4 sobre vinte amostras di-lo em voz alta. Esses caminhos de ficheiro estavam nos dados de treino três vezes; o que saiu foi o hábito de terminar com uma linha Source: de aspeto plausível. Quando lhe foi feita a pergunta do topo deste capítulo, o modelo com fine-tuning respondeu Short answer: 10.x . . . e citou CLAUDE.md. A resposta certa, que está em CLAUDE.md, é 18.17.0.

E depois a forma quebrou, que é a linha que justifica a experiência. Entregue ao modelo com fine-tuning mil tokens de excertos obtidos por retrieval — uma forma de prompt que nunca viu, visto que todos os training prompts tinham vinte e oito tokens — e o estilo da casa colapsa de 19/20 para 1/20. Na pergunta do topo deste capítulo, responde 18.17.0 — correto, e sem nenhum do formato para o qual foi treinado. Portanto, fine-tuning não ensinou um formato; ensinou um formato condicionado aos prompts no conjunto de treino, e o primeiro prompt que pareceu diferente levou o formato consigo. Aquilo em que fizer fine-tuning torna-se a única distribuição de input em que o seu modelo é bom, e ninguém põe isso na folha de cálculo.

Uma última nota sobre a métrica, apontando diretamente ao Capítulo 29: «fonte correta» pontua forma e facto em conjunto, razão pela qual ambas as linhas de retrieval parecem péssimas, embora ambos os modelos tenham acertado no facto dessa pergunta. Um único número end-to-end estava a esconder três coisas — um retriever com 14/20 de recall, um reader de 0,5B e um formato de citação — e escolher o que corrigir implica separá-las antes de medir, não depois.

Agora a coluna que os fornecedores preenchem por si. Um modelo com fine-tuning não é um ativo que possui; é um aluguer sobre o modelo base de outra pessoa, com uma data de fim impressa. Em 7 de setembro de 2026, a secção de fine-tuning da página de preços da OpenAI trazia este aviso na íntegra:

A OpenAI está a descontinuar a plataforma de fine-tuning. A plataforma já não está acessível a novos utilizadores, mas os utilizadores existentes da plataforma de fine-tuning poderão criar jobs de treino nos próximos meses. Todos os modelos com fine-tuning continuarão disponíveis para inferência até os respetivos modelos base serem descontinuados.7

A cronologia está datada ao dia: 7 de maio de 2026, fechada a organizações que nunca tinham feito fine-tuning; 2 de julho de 2026, fechada às que não tinham executado inferência num modelo com fine-tuning em sessenta dias; 6 de janeiro de 2027, sem novos jobs de todo.8 A mesma página agenda o encerramento dos próprios modelos com fine-tuning — ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano, ft-babbage-002, ft-davinci-002 — em 23 de outubro de 2026, cada um com um modelo base de substituição recomendado, que é uma forma educada de dizer: treine-o outra vez.

O outro fornecedor de fronteira nunca lhe vendeu esse aluguer. O índice da documentação da Anthropic lista 699 páginas e nem uma é sobre fine-tuning; as secções de personalização de modelos da página de preços do Bedrock cobrem Amazon Nova, Amazon Titan, Cohere, Meta e modelos OpenAI open-weight, e nenhum Claude.910 Se a sua arquitetura depende de um fine-tune, uma das três famílias de fronteira está simplesmente indisponível para si, a qualquer orçamento.

Self-hosting substitui o aluguer de um modelo pelo aluguer de uma máquina, e a AWS faz essa aritmética na sua própria página: uma model unit de provisioned throughput para um modelo personalizado, compromisso de um mês, é «1 model unit × $21,18 × 24 horas × 31 dias = $15.757,92» por mês.10 Alugar o metal diretamente é mais barato e não é grátis — $3,99 por GPU-hora on demand para uma H100, $1,99 preemptible11 — cerca de $2.900 por mês por uma placa que tem de estar ligada quer alguém faça perguntas, quer não. Toda a rota de retrieval a dez mil perguntas por mês custa $174,52 por seis meses.

É aqui que LoRA conquista o seu lugar, como argumento orçamental e não técnico. Medido no mesmo modelo, um adaptador de rank 16 sobre attention e as camadas feed-forward tem 8.798.208 parâmetros — 1,781 % do modelo, 17,6 MB em bfloat16 — contra 0,988 GB de pesos base, e o seu estado de otimizador e gradient é 140,77 MB, enquanto o full fine-tuning precisa de 7,90 GB, um fator de 56. A consequência não é treino mais barato, mas o facto de um único modelo base carregado poder servir muitos adaptadores, que é a única forma de dividir o custo fixo de uma GPU por alguma coisa. O treino gerido reflete isso: $0,48 por milhão de tokens low-rank até 16B contra $0,54 full, com um mínimo de $4,00 por job.11 Esse piso é o detalhe. Com 24.389 tokens por três epochs, cada novo treino neste corpus fatura $4,00 em vez dos $0,04 que a aritmética daria — $104 de mínimos em vinte e seis execuções semanais, por noventa e um cêntimos de aritmética.

O que a privacidade custa, e porque distillation não é uma quarta opção

Ligação para a secção: O que a privacidade custa, e porque distillation não é uma quarta opção

Mais duas colunas que só aparecem na fatura.

A residência dos dados custa cerca de dez por cento, e dois fornecedores concordam no valor. A OpenAI cobra «a 10 % uplift» em endpoints de residência de dados para modelos lançados em ou após 5 de março de 2026;7 a Vertex precifica os seus endpoints não globais a $1,65 contra $1,50, os mesmos dez por cento.6 Compare isto com os cinquenta por cento que um endpoint tuned custa e o folclore inverte-se: residência é barata e fine-tuning não é — e fine-tuning não é a opção privada de qualquer forma, pois o corpus chega ao fornecedor na mesma, uma vez no treino em vez de uma vez por chamada.

O preço mais explícito alguma vez atribuído aos seus dados está na mesma página, que lista duas vezes um modelo com fine-tuning: com partilha de dados ativada, a inferência custa exatamente metade — $2,00 contra $4,00 input, $8,00 contra $16,00 output.7 Deixar o fornecedor guardar o que enviou vale um desconto de 50 %, o que lhe diz quanto isso vale para ele.

Distillation — treinar um modelo pequeno seu com as respostas de um grande — é normalmente apresentado como uma saída para ambos. Ponha-lhe preço e não é, porque o professor é o sistema que estava a tentar substituir: produzir duzentos exemplos de treino perguntando duzentas vezes à rota de retrieval custa 200 × $0,002906 = $0,58, além dos $0,73 para treinar com eles. Distillation é algo que faz depois de a pipeline de retrieval funcionar, para a tornar mais barata, e herda todos os factos em que o retriever se enganou.

O dinheiro é a metade visível. A outra chega como espera, com a mesma causa da fatura: o modelo lê o prompt inteiro antes de dizer uma palavra. O Capítulo 13 mediu prefill contra decode num modelo em que se podia tocar; aqui está a mesma medição, uma execução, uma máquina, contra o comprimento do prompt:

prompt tokenstempo até ao primeiro tokenpor token
28312 ms11,14 ms
1.0374.971 ms4,79 ms
4.09622.272 ms5,44 ms
8.19249.443 ms6,04 ms

Os números absolutos pertencem a um modelo de 0,5B em dezasseis threads de CPU e nada dizem sobre um modelo de fronteira hospedado. A forma transfere-se exatamente: prefill cresce com o comprimento do prompt, e o custo por token sobe lentamente à medida que o termo quadrático do Capítulo 9 começa a aparecer — 4,79 ms a mil tokens contra 6,04 ms a oito mil, uma penalização de 26 % apenas por ser mais longo.

A consequência para as três rotas é direta. A rota um faz prefill de quarenta e três mil tokens por pergunta, e um cache hit é o que torna isso suportável — o Capítulo 16 explicou porquê: uma leitura de cache substitui trabalho de prefill, por isso compra latência e dinheiro numa só transação. A rota dois faz prefill de mil e acrescenta primeiro uma ida e volta ao índice. A rota três faz prefill de vinte e oito e não acrescenta nada, o que a torna mensuravelmente a mais rápida das três a responder. Só está a responder à coisa errada.

Três falhas que parecem problemas de modelo e não são — dez minutos aqui poupam um mês mais tarde:

Retrieval não consegue recuperar o que ninguém escreveu, e fazer fine-tuning nisso só ensina o modelo a soar confiante. Se a sua principal pergunta de suporte não está respondida em lado nenhum do corpus, a solução é um technical writer.

«Onde está a minha encomenda?» é uma consulta à base de dados, não uma pergunta de conhecimento. Isso é um tool call — Capítulo 18 — e nem treino nem retrieval o substituem.

Quando dois produtos partilham um nome, a melhor resposta possível é pedir esclarecimento. Isso é uma decisão de produto sobre o input, não uma decisão de modelação sobre o output.

E o requisito sobre tudo isto: esta decisão não pode ser tomada sem um conjunto de avaliação, e o fornecedor que vende o fine-tune di-lo. O guia da OpenAI abre com «Só invista em fine-tuning depois de configurar evals. Precisa de uma forma fiável de determinar se o seu modelo com fine-tuning tem melhor desempenho do que um modelo base», e acrescenta que, se cinquenta bons exemplos não mudarem nada, o problema é a tarefa ou o prompt, não o volume de dados.1 Vinte perguntas, que foi o que este capítulo usou, mostram um mecanismo e não conseguem escolher um fornecedor — o Capítulo 4 mediu porquê, e o que fazer quando vinte casos são tudo o que tem — repeti-los, emparelhá-los e medir a dispersão entre execuções — é o Capítulo 29.

Quatro colunas, e só a última decide:

promptretrievalfine-tune
o que ensinatudo o que conseguir escreverfactos que mudamforma e comportamento
custo de construçãozero$0,0070 mais uma tarde$0,7317 mais um conjunto de avaliação
custo por pergunta$0,0079 com cache, $0,0663 sem$0,0029$0,0021, acima de 492 prompt tokens
custo de manutençãozero, ou $0,043 por hora de renda$0,0070 por reconstruçãoum novo treino por alteração, mais um por cada modelo base retirado

A regra que sai daqui, e é curta o suficiente para guardar: comece pelo prompt; acrescente retrieval quando os factos se mexem; faça fine-tuning apenas quando tiver medido que aquilo que ainda lhe falta é uma forma, não um facto — e dê preço à resposta, não ao prompt, antes de o fazer.

A versão desconfortável, para quem chegou com a decisão já tomada: no caso medido neste capítulo, fine-tuning é a rota mais barata acima de quatro mil perguntas por mês, e nos factos continua a não conseguir bater responder CLAUDE.md a tudo.

Todos os preços aqui foram por token, e cada rota foi uma forma diferente de organizar tokens. Isso está prestes a deixar de ser verdade.

O Capítulo 21 sai do texto. Uma imagem que entra num modelo não é uma string, mas uma grelha de patches com uma contagem de tokens que não escolheu; um minuto falado é faturado ao segundo num fornecedor e por audio token noutro; fala sintética é vendida por caráter, transcrição por minuto, compute bruto por GPU-segundo. A pergunta a que este capítulo respondeu com uma função de custo — qual é mais barato? — nem sequer pode ser feita até as unidades coincidirem, e nenhuma calculadora na internet as normaliza.

É também aí que o treino volta a surgir: um adaptador de imagem com uma trigger word, e uma voz clonada a partir de uma amostra. O que levanta a pergunta com que o próximo capítulo abre, e não é retórica: se fazer fine-tuning de um modelo de linguagem é quase sempre a compra errada, porque é que fazer fine-tuning de um modelo de imagem é quase sempre a compra certa?


Todos os preços, limiares e multiplicadores neste capítulo foram lidos na própria página do fornecedor em 7 de setembro de 2026 e são citados com essa data, porque todos se vão mexer. Os valores medidos — contagens de tokens, tamanhos de chunks, tamanhos de retrieval, training loss, pontuações, latências e contagens do histórico de versões — foram produzidos numa máquina no mesmo dia e são reproduzíveis a partir do corpus descrito acima.

As experiências locais usaram Qwen/Qwen2.5-0.5B-Instruct com greedy decoding, por isso reproduzem exatamente; o adaptador é a classe de doze linhas impressa acima, com rank 8 sobre q_proj e v_proj. O corpus é a documentação Markdown seguida por um repositório de software em uso, excluindo dois logs append-only, e a sua taxa de alteração foi contada a partir do histórico de versões desse repositório.

  1. OpenAI, Supervised fine-tuning, developers.openai.com/api/docs/guides/supervised-fine-tuning, e Model optimization, .../guides/model-optimization, ambos consultados em 2026-09-07. Fonte de: a tabela daquilo para que supervised fine-tuning é melhor (classificação, tradução matizada, geração de conteúdo num formato específico, correção de falhas no seguimento de instruções); os quatro benefícios alegados, incluindo prompts mais curtos e menor latência; o mínimo de 10 exemplos de treino e a recomendação de começar com 50; e «Only invest in fine-tuning after setting up evals.» 2

  2. Zhou, C. et al. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023). A Hipótese de Alinhamento Superficial — o conhecimento vem do pretraining, o alinhamento ensina em que formato falar — e a razão pela qual mil exemplos curados foram suficientes.

  3. Brown, T. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). A fonte do in-context learning como baseline honesta: a tarefa é demonstrada dentro do prompt e nenhum peso é atualizado.

  4. Ovadia, O., Brief, M., Mishaeli, M. and Elisha, O. Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLMs. arXiv:2312.05934 (2023). Retrieval superou fine-tuning não supervisionado na injeção de conhecimento, incluindo em factos já vistos no pretraining.

  5. Gekhman, Z. et al. Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations? arXiv:2405.05904 (2024). Exemplos que introduzem novo conhecimento são ajustados lentamente, e ajustá-los aumenta a alucinação em perguntas não relacionadas.

  6. Google, Vertex AI generative AI pricing, cloud.google.com/vertex-ai/generative-ai/pricing, consultado em 2026-09-07. Todos os valores na folha de custos deste capítulo: Gemini 3.5 Flash no endpoint global a $1,50 por milhão de input tokens, $0,15 cached input e $9,00 text output, com endpoints não globais 10 % mais altos; supervised fine-tuning do mesmo modelo a $0,01 por 1.000 training tokens, em que «training tokens are calculated by the total number of tokens in your training dataset, multiplied by your number of epochs»; armazenamento explícito de context cache a $0,000001 por token por hora; Gemini Embedding input a $0,00015 por 1.000 tokens online; e a nota de que «for model inference starting from Gemini 3, tuned model endpoint prediction price will be 1.5 times of the base model.» 2 3 4 5

  7. OpenAI, Pricing, developers.openai.com/api/docs/pricing, consultado em 2026-09-07. Fonte do aviso de descontinuação citado na íntegra, e das tarifas de texto atuais usadas para a validação cruzada: gpt-5.6-terra standard short context a $2,00 input, $0,20 cached input, $2,50 cache write e $12,00 output por milhão de tokens, com o escalão batch a metade de cada. A página traz dez linhas de fine-tuning sobre sete modelos base, e exatamente uma delas é faturada por tempo em vez de por tokens: reinforcement fine-tuning de o4-mini-2025-04-16 a $100,00 por hora de treino. A mesma página indica uma majoração de 10 % em endpoints de residência de dados para modelos lançados em ou após 5 de março de 2026. 2 3

  8. OpenAI, Deprecations, developers.openai.com/api/docs/deprecations, consultado em 2026-09-07. Fonte da cronologia de self-serve fine-tuning (7 de maio de 2026, 2 de julho de 2026, 6 de janeiro de 2027) e do encerramento em 23 de outubro de 2026 de ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano-2025-04-14, ft-babbage-002 e ft-davinci-002, cada um listado com um modelo base de substituição recomendado.

  9. Anthropic, índice da documentação para developers, platform.claude.com/llms.txt, consultado em 2026-09-07. 699 páginas listadas, nenhuma sobre fine-tuning; platform.claude.com/docs/en/build-with-claude/fine-tuning devolve 404.

  10. Amazon Web Services, Amazon Bedrock pricing, aws.amazon.com/bedrock/pricing/, consultado em 2026-09-07. Fonte das secções de personalização de modelos (Amazon Nova, Amazon Titan, Cohere, Meta, Qwen e modelos OpenAI open-weight — sem Claude), da cobrança mensal de $1,95 para armazenar cada modelo personalizado, e do exemplo trabalhado citado: «1 model unit × $21,18 × 24 horas × 31 dias = $15.757,92». 2

  11. Together AI, Pricing, together.ai/pricing, consultado em 2026-09-07. Fine-tuning por milhão de tokens para modelos até 16B: $0,48 low-rank e $0,54 full para supervised fine-tuning, $1,20 e $1,35 para direct preference optimisation, com o preço calculado como «training dataset size × number of epochs» mais evaluation tokens e «a minimum charge of $4.00» por job. Capacidade GPU: $3,99 por GPU-hora on demand para HGX H100, $1,99 preemptible, $5,99 para H200. 2

Pronto para deixar a LIA escolher?

Construa com todos os modelos de IA num só sítio — comece grátis hoje.