Modelo mais rápido sai toda semana, e para quem tem agente de IA em produção a pergunta é sempre a mesma: se o modelo gera texto 20 vezes mais rápido, o agente fica quanto mais rápido?

Fiz a conta com o NCM, de Stanford, que gera texto até 31 vezes mais rápido, num agente que lê o e-mail de pedido, consulta o ERP e lança o pedido em 40 segundos. O resultado fica longe de 31 vezes.

O vídeo de mesmo nome mostra as contas com animações.

01. O que é o NCM e onde ele está hoje

O NCM (Next-Concept Modeling) é um trabalho da Hazy Research, de Stanford, com a Together AI, publicado em 12 de outubro de 2026 (arXiv 2610.14162). Nas redes, virou Next Concept Model.

O modelo que você chama por API gera um token por vez, e cada token espera o anterior, então uma frase de 15 tokens leva 15 passos. O NCM escreve em níveis, do rascunho grosso ao detalhe, e todos os pedaços de um nível saem juntos.

MODELO COMUM · UM TOKEN POR PASSO 12345 678910 1112131415 passo 15 passos em sequência, cada token espera o anterior NCM · DO RASCUNHO AO DETALHE nível 1nível 2nível 3 3 passos, e os pedaços de cada nível saem juntos ilustração com 3 níveis · no paper, até 11
Em cima, o modelo comum escreve uma frase de 15 tokens em 15 passos. Embaixo, o NCM escreve a mesma frase em níveis, do rascunho grosso ao texto final.

O paper mediu de 10 a 31 vezes mais velocidade numa H100, contra modelos de difusão do mesmo tamanho. Não houve comparação com os modelos que você usa por API.

Em novembro de 2026, o NCM continua sendo pesquisa: modelos de 97 a 725 milhões de parâmetros, um checkpoint por tarefa, código com licença MIT em github.com/HazyResearch/ncm e nenhuma API ou servidor de inferência para produção. Só que a pergunta já vale hoje: trocar o modelo de um agente que usa API é mudar uma linha de configuração.

02. O cenário: o agente de pedidos por e-mail

As contas usam um cenário fictício, com empresas e pessoas criadas para o exemplo. O Vértice é um ERP para distribuidoras, com 7 devs, que roda no servidor de cada cliente. A Distribuidora Alvorada, cliente do Vértice, tem 60 usuários no faturamento e recebe boa parte dos pedidos por e-mail.

No sábado, 7 de novembro, a Renata Lima, do Supermercado Bom Lar, manda o e-mail “Pedido semana 46” com um PDF de 12 itens. O agente do Vértice faz nove passos para lançar o pedido, três deles com o modelo:

  1. busca o e-mail e o anexo;
  2. extrai o pedido do PDF, com o modelo;
  3. consulta o cadastro do cliente no ERP;
  4. consulta o estoque de cada um dos 12 itens no ERP;
  5. decide a substituição dos itens sem estoque, com o modelo;
  6. consulta o crédito do cliente no ERP;
  7. grava o pedido no ERP;
  8. redige a resposta, com o modelo;
  9. envia a confirmação para quem mandou o pedido.

Dois itens estão sem estoque, o modelo escolhe os substitutos, e o pedido 73.118 sai com 12 itens e R$ 14.326,40.

CAIXA DE ENTRADA Distribuidora Alvorada Renata Lima · Bom Lar Pedido semana 46 · 12 itens pedido-bomlar-46.pdf AGENTE modelo extrair o pedidodecidir substituiçãoredigir a resposta VÉRTICE ERP servidor no cliente cliente · 1 chamadaestoque · 12 chamadascrédito · 1 chamadagravar · 1 chamada buscare-mailresposta 15chamadasdados pedido 73.118 · Supermercado Bom Lar · 12 itens · R$ 14.326,40 9 passos por e-mail, e 3 deles chamam o modelo
O agente fica entre a caixa de entrada da Alvorada e o Vértice ERP, que roda no servidor do cliente. Cada pedido faz 15 chamadas ao ERP e 3 ao modelo.

03. Onde vão os 40 segundos

O modelo ocupa 6 dos 40 segundos do pedido. O resto é operação de I/O, e o maior pedaço é o estoque: 12 consultas de 1,25 segundo em sequência, 15 segundos no total.

PEDIDO 73.118 · DIA NORMAL 40,0 s estoque 15,0 scrédito 4,0 sgravar 9,0 s 123 456 789 0 s10 s20 s30 s40 s 34 s de I/O 6 s de modelo · 15% um span por passo no OpenTelemetry
Os nove passos do pedido, numerados como na tabela. Roxo é modelo, cinza é operação de I/O.
# PASSO TIPO TEMPO CHAMADAS AO ERP
1 buscar e-mail e anexo I/O 2,0 s 0
2 extrair o pedido modelo 3,0 s 0
3 consultar cliente I/O 2,0 s 1
4 consultar estoque, 12 × 1,25 s em sequência I/O 15,0 s 12
5 decidir a substituição de 2 itens modelo 1,5 s 0
6 consultar crédito I/O 4,0 s 1
7 gravar o pedido I/O 9,0 s 1
8 redigir a resposta modelo 1,5 s 0
9 enviar a resposta I/O 2,0 s 0
total 34 s de I/O, 6 s de modelo 40,0 s 15

Essa barra é o que um trace do OpenTelemetry mostra, com um span por passo. Sem ela, a troca de modelo é decidida no chute.

04. A lei de Amdahl e o modelo 20x mais rápido

A lei de Amdahl, de 1967, dá o limite de acelerar só uma parte de um processo:

LEI DE AMDAHL
tempo novo = parte que não muda + parte acelerada ÷ fator
tempo novo = 34 s + 6 s ÷ fator

O ganho máximo de trocar o modelo é a fatia de tempo dele, 15% neste agente. Com o modelo 20 vezes mais rápido, os 6 segundos viram 0,3 e o pedido cai para 34,3 segundos. Com 31 vezes, vai a 34,2, e um modelo instantâneo pararia em 34.

operação de I/O modelo fluxo originalmodelo 20xmodelo 31xmodelo instantâneo 40,0 s 34,3 s · −14% 34,2 s 34,0 s · −15% chão de 34 s com qualquer modelo
Os segmentos roxos encolhem com o modelo mais rápido, e a parte cinza fica igual nas quatro barras. A linha laranja marca o chão de 34 segundos.
MODELO 20X34,3 s14% a menos que os 40 s
MODELO 31X34,2 s0,1 s a menos que o modelo 20x
MODELO INSTANTÂNEO34,0 so chão, 15% a menos

05. O que ganha mais que o modelo novo

Rodar as 12 consultas de estoque 4 por vez tira 28%, o dobro do modelo 20x. Nenhuma consulta depende da outra, então são 3 rodadas de 1,25 segundo: o estoque cai de 15 para 3,75 segundos, e o pedido, para 28,75.

As duas mudanças somam: com o estoque em paralelo e o modelo 20x, o pedido leva 23,05 segundos, 42% a menos.

fluxo originalmodelo 20xestoque 4 por vezas duas juntas 40,0 s 34,3 s · −14% 28,75 s · −28% 23,05 s · −42% a parte de I/O que encolheu é o estoque, de 15,0 s para 3,75 s
A parte cinza encolhe com o estoque em paralelo, e a roxa, com o modelo 20x.

O recurso para paralelizar com limite já existe em cada linguagem:

LINGUAGEM RECURSO ONDE ENTRA O LIMITE DE 4
Node p-limit pLimit(4)
.NET Parallel.ForEachAsync MaxDegreeOfParallelism = 4
Java Semaphore com virtual threads new Semaphore(4)
Python asyncio com Semaphore asyncio.Semaphore(4)
Go errgroup g.SetLimit(4)
Elixir Task.async_stream max_concurrency: 4

Se o ERP tiver consulta de estoque em lote, as 12 chamadas viram uma. Ah, e o limite de 4 por vez tem motivo: é a conta da próxima seção.

06. O limite do ERP no servidor do cliente

A API do ERP aceita 8 chamadas por segundo, e isso limita o agente a 1.920 pedidos por hora. O Vértice roda no mesmo servidor que atende os 60 usuários do faturamento da Alvorada, e o limite foi pedido do cliente para a tela deles não travar.

Com 15 chamadas por pedido, são 8 ÷ 15 = 0,53 pedido por segundo, com qualquer modelo.

CHAMADAS POR PEDIDO15cliente, 12 de estoque, crédito e gravação
LIMITE DA INTEGRAÇÃO8/spedido da Alvorada para proteger o faturamento
VAZÃO MÁXIMA1.920pedidos por hora, com qualquer modelo

07. Segunda às 8h com 1.200 e-mails

Quanto mais curto o pedido, mais chamadas por segundo chegam ao ERP. Na segunda, 9 de novembro, às 8h, a caixa tem 1.200 e-mails e o agente processa 20 pedidos ao mesmo tempo. A carga é pedidos ao mesmo tempo × chamadas por pedido ÷ duração do pedido.

No fluxo original, a carga fica em 7,5 chamadas por segundo. Com o estoque em paralelo, sobe para 10,4, e com o modelo 20x junto, para 13. Acima de 8, o ERP responde 429.

20 PEDIDOS AO MESMO TEMPO · 15 CHAMADAS POR PEDIDO fluxo original · 40 sestoque 4 por vez · 28,75 scom o modelo 20x · 23,05 s 7,5/s 10,4/s · 429 13,0/s · 429 limite da integração: 8 chamadas/s 0481216
Carga no ERP com 20 pedidos ao mesmo tempo. A linha laranja é o limite da integração.

O estudo de Choi et al. (arXiv 2609.19947), de setembro de 2026, viu o mesmo efeito dentro da máquina: com o modelo mais rápido, as ferramentas do agente disputam mais a CPU.

A conta ao contrário dá quantos pedidos cabem no limite (limite × duração ÷ chamadas por pedido):

FLUXO DURAÇÃO CHAMADAS/S COM 20 PEDIDOS NO LIMITE
original 40,0 s 7,5 21
estoque 4 por vez 28,75 s 10,4 15
estoque 4 por vez e modelo 20x 23,05 s 13,0 12

Mesmo no limite, os 1.200 e-mails levam pelo menos 37,5 minutos. A otimização precisa de duas regras: limitar os pedidos ao mesmo tempo pelo limite do ERP e respeitar o cabeçalho Retry-After do 429.

08. A gravação que estoura o timeout

Com 3% de timeout na gravação, a segunda termina com 22 pedidos duplicados, e a velocidade do modelo não muda esse número. Gravar no Vértice leva 9 segundos, o cliente HTTP desiste em 10, e na segunda de manhã 36 gravações passam desse limite.

O agente tem um try/catch em volta do fluxo inteiro e recomeça do zero, o que gera 108 chamadas extras ao modelo. Em 22 dos 36 casos, o ERP já tinha gravado o primeiro pedido.

O Bom Lar recebe dois pedidos com os mesmos 12 itens.
TIMEOUTS NA GRAVAÇÃO363% dos 1.200 pedidos
CHAMADAS EXTRAS AO MODELO1083 por pedido que recomeçou
PEDIDOS DUPLICADOS22gravados depois do timeout

Três regras resolvem, e nenhuma depende do modelo.

1. Repetir só o passo que falhou

O retry fica no ponto da chamada: p-retry no Node, Polly no .NET, resilience4j no Java, tenacity no Python.

2. Guardar o resultado de cada passo

O agente retoma do último passo concluído, sem chamar o modelo de novo.

3. Referência externa na gravação

O pedido vai com o Message-ID do e-mail, <20261107164233.5512@bomlar.example>, como referência, e o agente consulta essa referência antes de gravar. Se o pedido existe, devolve o número. Se o ERP não tem esse campo, uma tabela de efeitos aplicados no seu banco faz o mesmo papel.

09. Quando o modelo rápido faz diferença, e como medir

Em agente de código, de raciocínio longo ou com poucas ferramentas, o modelo ocupa quase todo o tempo, e um modelo mais rápido faz diferença. Raj et al. (arXiv 2511.00739, abril de 2026) mediram os dois extremos: ferramentas com mais de 80% do tempo em agentes de RAG e de química, e o modelo com 77% a 88% no Toolformer.

No seu agente, a resposta sai de um span por passo e de quatro números, depois de uma semana de produção:

01FATIA DO MODELO15% no cenárioTeto do ganho de trocar o modelo.
02P95 DE CADA PASSOestoque 17,1 s · gravar 9,6 s · crédito 5,2 sA gravação em 9,6 s, perto do timeout de 10 s, já avisava o problema de segunda.
03CHAMADAS AO ERP POR PEDIDO15O limite da API dividido por esse número dá a vazão máxima.
04429 POR MINUTO0 num dia normalQuando sobe, o agente passou do limite do ERP.

10. O agente numa execução durável

Aqui entra o skail, e já aviso: eu faço parte da skail, então leia com esse filtro. O skail é uma plataforma de execução durável: o processo vira uma função escrita de cima para baixo, e a plataforma guarda o estado e retoma de onde parou quando algo falha.

A function orquestra os passos. Cada operação de I/O e cada chamada ao modelo vira um command, com o resultado gravado no histórico, e um command concluído não roda de novo na retomada (Functions e commands).

ProcessarPedidoEmail · TypeScript
import { Skail, SkailCommand, SkailFunction } from "@skail/runtime";

export class PedidosEmail {
  @SkailFunction()
  async ProcessarPedidoEmail(emailId: string): Promise<string> {
    const email = await this.BuscarEmail(emailId);
    const pedido = await this.ExtrairPedido(emailId);
    const cliente = await this.ConsultarCliente(pedido.cnpj);

    // estoque em lotes de 4: os commands começam juntos e o whenAll espera os 4
    const saldos: Saldo[] = [];
    for (let i = 0; i < pedido.itens.length; i += 4) {
      const lote = pedido.itens.slice(i, i + 4);
      const consultas = lote.map((item) => this.ConsultarEstoque(item.sku));
      saldos.push(...(await Skail.whenAll(consultas)));
    }

    const ajustado = await this.DecidirSubstituicao(pedido, saldos);
    const credito = await this.ConsultarCredito(cliente.id, ajustado.total);
    const numero = await this.GravarPedido(email.messageId, ajustado, credito.aprovado);
    const resposta = await this.RedigirResposta(ajustado, numero);
    await this.EnviarResposta(email.remetente, resposta);
    return numero;
  }

  @SkailCommand({ retryCount: 8 })
  async GravarPedido(
    messageId: string, pedido: PedidoAjustado, creditoAprovado: boolean
  ): Promise<string> {
    // regra da duplicidade: consulta pela referência do e-mail antes de gravar
    const existente = await this.erp.buscarPedidoPorReferencia(messageId);
    if (existente) return existente.numero;

    const criado = await this.erp.criarPedido(pedido, creditoAprovado, {
      referenciaExterna: messageId,
    });
    return criado.numero;
  }
}
  • Estoque em lotes de 4. Os commands são chamados sem await, e o Skail.whenAll espera os 4 e devolve os resultados na ordem da lista (Rodar em paralelo e juntar).
  • Gravação sem duplicar. O GravarPedido consulta pela referência antes de gravar, que é o caso 3 de Escrever commands idempotentes, e usa retryCount: 8 porque repetir é seguro.
  • Rede e relógio nos commands. Dentro da function, fetch() e Date.now() lançam erro, e o paralelo usa Skail.whenAll no lugar de Promise.all (SDKs e linguagens).
os outros commands, na mesma classe · TypeScript
  @SkailCommand()
  async BuscarEmail(emailId: string): Promise<EmailInfo> {
    return await this.caixa.buscar(emailId);
  }

  @SkailCommand()
  async ExtrairPedido(emailId: string): Promise<PedidoExtraido> {
    return await this.modelo.extrairPedido(await this.caixa.anexo(emailId));
  }

  @SkailCommand({ retryCount: 8 })
  async ConsultarEstoque(sku: string): Promise<Saldo> {
    return await this.erp.saldo(sku);
  }

  // ConsultarCliente e ConsultarCredito seguem o ConsultarEstoque;
  // DecidirSubstituicao e RedigirResposta seguem o ExtrairPedido

  @SkailCommand()
  async EnviarResposta(para: string, texto: string): Promise<void> {
    await this.smtp.enviar(para, texto);
  }

Eu completei o corpo dos commands no estilo da doc. Os clientes caixa, erp, modelo e smtp são classes da aplicação.

O Vértice dispara uma execução por e-mail com POST /api/v1/trigger/pedidos-email/v1.0.0/ProcessarPedidoEmail/{id}, usando o id do e-mail, que é um GUID, como id da execução (Disparar uma função pela API). Não sobra fila, job nem tabela de controle para lembrar em que passo cada pedido está.

A segunda-feira no Monitor

Às 8h, o Vértice dispara 1.200 execuções. Cada instância da aplicação trata um número limitado de execuções por vez, e o resto fica Na fila (Limites e cotas). O time ajusta as réplicas até a carga no ERP chegar perto de 8 chamadas por segundo.

No Monitor, a execução da Renata sai da fila às 08:14:05, e a linha do tempo mostra a mesma barra da seção 3, sem instrumentação, com o estoque em 3 lotes de 4.

ProcessarPedidoEmail 7b3d9e41-0000-4000-8000-000000020611 · pedidos-email v1.0.0 Concluída Duração 32,7 s · E2E 14 min 33,7 s 08:00:04 trigger · Na fila até 08:14:05, enquanto as réplicas atendem os outros e-mails HORÁRIOPASSORESULTADO 08:14:05,0008:14:07,0008:14:10,0008:14:12,00 08:14:15,7508:14:17,2508:14:21,2508:14:34,2008:14:35,70 BuscarEmail ExtrairPedido ConsultarCliente ConsultarEstoque × 12 DecidirSubstituicao ConsultarCredito GravarPedido RedigirResposta EnviarResposta PDF de 12 itens12 itens extraídosBom Lar · prazo de 28 dias 2 substitutos escolhidoscrédito aprovado confirmação redigidaenviada para a Renata 3 lotes de 4 · 2 itens sem saldo 73.118, já existia Tentativas: 2 / 9. A primeira estourou o timeout de 10 s.
Representação simplificada da execução do e-mail da Renata no Monitor. Em roxo, os três commands que chamam o modelo.

O GravarPedido estoura os 10 segundos na primeira tentativa. Na segunda, a consulta pela referência acha o 73.118, gravado depois do timeout, e devolve o número sem gravar de novo. Os passos anteriores voltam do histórico, sem chamar o modelo.

DURAÇÃO DA EXECUÇÃO32,7 s14 min 33,7 s contando a fila
PEDIDOS DUPLICADOS0nos 36 timeouts da manhã
CHAMADAS EXTRAS AO MODELO0os passos concluídos voltam do histórico

11. Tabela de decisão

O que atacar primeiro, de acordo com o que a medição mostrar:

O QUE A MEDIÇÃO MOSTRA O QUE FAZER PRIMEIRO ONDE ESTÁ
o modelo ocupa a maior parte do tempo testar um modelo mais rápido Seção 4
consultas ao ERP em sequência paralelizar com limite, ou consultar em lote Seção 5 e Rodar em paralelo e juntar
pedidos por hora parados num número fixo controlar a concorrência pelo limite do ERP e tratar o 429 Seções 6 e 7
falha no meio do fluxo retry do passo, retomada e idempotência Seção 8 e Escrever commands idempotentes

FAQ

Perguntas frequentes

O que é o NCM (Next Concept Model)?

É o Next-Concept Modeling, um trabalho da Hazy Research, de Stanford, com a Together AI, publicado em 12 de outubro de 2026. Em vez de gerar um token por vez, o modelo escreve em níveis, do rascunho grosso ao detalhe, e os pedaços de cada nível saem ao mesmo tempo. O paper mediu de 10 a 31 vezes mais velocidade numa GPU H100, contra modelos de difusão do mesmo tamanho.

O NCM já pode ser usado em produção?

Não. Em novembro de 2026, o NCM é pesquisa: os modelos têm de 97 a 725 milhões de parâmetros, um checkpoint por tarefa, código com licença MIT e nenhuma API ou servidor de inferência pronto. A única forma documentada de rodar é localmente, com o script de avaliação do repositório.

Um modelo mais rápido deixa o agente de IA mais rápido?

Na proporção do tempo que o modelo ocupa no agente, pela lei de Amdahl. Num agente de pedidos que leva 40 segundos, com 6 segundos de modelo e 34 de consultas ao ERP, um modelo 20 vezes mais rápido leva o pedido a 34,3 segundos, 14% a menos, e um modelo instantâneo pararia em 34 segundos.

Como medir onde o agente de IA gasta o tempo?

Instrumente o agente com um span por passo no OpenTelemetry e olhe quatro números: a fatia do tempo no modelo, o p95 de cada passo, quantas chamadas ao ERP cada pedido faz e quantos 429 aparecem por minuto. A fatia do modelo é o teto do ganho de trocar o modelo.

Como evitar pedido duplicado quando o agente repete a gravação no ERP?

Grave o pedido com uma referência externa estável, como o Message-ID do e-mail, e consulte essa referência antes de gravar. Se o pedido já existe, devolva o número que está lá. Quando o ERP não tem esse campo, use uma tabela de efeitos aplicados no seu banco, consultada antes e gravada depois da chamada.

PRÓXIMO PASSO

Por onde começar

O primeiro passo é medir: instrumente o agente, rode uma semana e calcule os quatro números da seção 9.

Se quiser levar o agente para execução durável, a doc do skail tem o caso de uso Agente de IA com ferramentas e o guia Migrar código existente, que tira jobs, fila e tabela de controle sem reescrever o sistema.

As contas com animações e a execução no Monitor estão no vídeo do NCM.