{"id":723,"date":"2026-09-15T18:34:29","date_gmt":"2026-09-15T21:34:29","guid":{"rendered":"https:\/\/yellowkode.com\/blog\/consistency-gap-agentes-ia-mean-pass\/"},"modified":"2026-09-15T18:34:29","modified_gmt":"2026-09-15T21:34:29","slug":"consistency-gap-agentes-ia-mean-pass","status":"publish","type":"post","link":"https:\/\/yellowkode.com\/blog\/consistency-gap-agentes-ia-mean-pass\/","title":{"rendered":"Consistency Gap em Agentes de IA: Entendendo a Diferen\u00e7a entre Mean@k e Pass^k"},"content":{"rendered":"<p>Um agente de IA acerta uma tarefa no ensaio e erra a mesma tarefa no dia seguinte, sem nada mudar no pedido. Isso n\u00e3o \u00e9 bug de c\u00f3digo, \u00e9 uma caracter\u00edstica estat\u00edstica do pr\u00f3prio agente que quase nenhum benchmark reporta. A IBM Research publicou no blog do Hugging Face em 15 de setembro de 2026 um artigo mostrando um diagn\u00f3stico espec\u00edfico para esse problema, junto com uma extens\u00e3o do toolkit open source ALTK-Evolve. O artigo original \u00e9 <em>Your Agent Aced the Task. Will It Do It Again?<\/em>, dos times de Evelyn Duesterwald e Vinod Muthusamy.<\/p>\n<p>O n\u00famero que abre o texto \u00e9 o que interessa: no benchmark AppWorld, Evolve melhorou a confiabilidade do agente em +8,9 pontos no geral, com aumento relativo de 74% em tarefas dif\u00edceis multi-step. Mas o dado novo \u00e9 outro. Um agente ReAct rodando GPT-4.1 no AppWorld tem 77,4% de acerto m\u00e9dio em 5 execu\u00e7\u00f5es, e apenas 53,0% das tarefas passam nas 5 rodadas. A diferen\u00e7a de 24,4 pontos \u00e9 o que eles chamam de <em>consistency gap<\/em>.<\/p>\n<h2>O que o benchmark esconde: Mean@k, Pass@k e Pass^k<\/h2>\n<p>Tr\u00eas m\u00e9tricas parecidas, tr\u00eas perguntas diferentes. Vale fixar antes de continuar.<\/p>\n<ul>\n<li><strong>Mean@k<\/strong>: roda a tarefa k vezes, tira m\u00e9dia. \u00c9 o &#8220;77% de acerto&#8221; que aparece na leaderboard.<\/li>\n<li><strong>Pass@k<\/strong>: mede a probabilidade de que pelo menos uma de k tentativas independentes seja bem sucedida. M\u00e9trica otimista, usada em gera\u00e7\u00e3o de c\u00f3digo onde voc\u00ea pode verificar e escolher a boa.<\/li>\n<li><strong>Pass^k<\/strong> (l\u00ea-se &#8220;pass power k&#8221;): estima a probabilidade de que um agente tenha sucesso em todas as k tentativas independentes. Isso \u00e9 \u00fatil para avaliar consist\u00eancia e confiabilidade.<\/li>\n<\/ul>\n<p>A rela\u00e7\u00e3o matem\u00e1tica \u00e9 fixa: Pass^k \u2264 Mean@k \u2264 Pass@k, sempre. E, como observa a \u03c4-bench, para tarefas de agente do mundo real que exigem confiabilidade e consist\u00eancia como atendimento ao cliente, prop\u00f5e-se uma nova m\u00e9trica, pass^k, definida como a chance de que todas as k tentativas i.i.d. sejam bem sucedidas, tomada como m\u00e9dia entre tarefas.<\/p>\n<p>Traduzindo em usu\u00e1rio final: Pass@k \u00e9 &#8220;pelo menos um caminho funciona, e eu escolho&#8221;. Pass^k \u00e9 &#8220;o mesmo pedido, feito por dois usu\u00e1rios diferentes, tem que dar certo para os dois&#8221;. Em produ\u00e7\u00e3o, quase sempre voc\u00ea quer Pass^k.<\/p>\n<h2>Como funciona: distribui\u00e7\u00f5es agudas contra distribui\u00e7\u00f5es planas<\/h2>\n<p>Toda decis\u00e3o que um LLM toma, qual API chamar, qual argumento passar, se tenta de novo ou n\u00e3o, sai de uma distribui\u00e7\u00e3o de probabilidade sobre os pr\u00f3ximos tokens. O que decide se a decis\u00e3o vai se repetir amanh\u00e3 n\u00e3o \u00e9 a temperatura, \u00e9 a <em>forma<\/em> dessa distribui\u00e7\u00e3o.<\/p>\n<p>Pense num juiz de futebol decidindo p\u00eanalti. Se a jogada foi um carrinho descarado dentro da \u00e1rea, dez ju\u00edzes diferentes marcam p\u00eanalti. A decis\u00e3o \u00e9 aguda: a op\u00e7\u00e3o vencedora est\u00e1 muito \u00e0 frente das outras. Agora, se foi um leve toque no calcanhar com o atacante j\u00e1 caindo, alguns marcam, outros mandam seguir. A decis\u00e3o \u00e9 plana: duas ou tr\u00eas op\u00e7\u00f5es est\u00e3o praticamente empatadas, e qualquer pequeno vi\u00e9s (o juiz estar mais cansado, o barulho do est\u00e1dio) decide para um lado ou outro. A analogia quebra num ponto: no LLM, o &#8220;vi\u00e9s&#8221; n\u00e3o vem de humor, vem de n\u00e3o-associatividade de ponto flutuante em GPU, de como o batching agrupou seu request, de detalhes do provedor. Mas a mec\u00e2nica \u00e9 a mesma: distribui\u00e7\u00e3o aguda resiste ao ru\u00eddo, distribui\u00e7\u00e3o plana reordena.<\/p>\n<p>E a trajet\u00f3ria de um agente encadeia dezenas dessas decis\u00f5es. Uma probabilidade pequena de flipar em cada passo vira uma probabilidade grande de flipar em algum lugar. \u00c9 da\u00ed que sai o gap de 24 pontos.<\/p>\n<p>Consequ\u00eancia pr\u00e1tica: <strong>temperature=0 n\u00e3o resolve<\/strong>. Decodifica\u00e7\u00e3o greedy e seed fixo governam como uma distribui\u00e7\u00e3o vira um token, n\u00e3o a distribui\u00e7\u00e3o em si. No endpoint hospedado, as probabilidades se mexem um pouco de uma execu\u00e7\u00e3o para outra, e um quase-empate pode resolver para um lado hoje e para o outro amanh\u00e3, mesmo com temperatura zero. O experimento da IBM roda a temperatura 0.0 exatamente para deixar claro que o gap medido n\u00e3o \u00e9 sampling.<\/p>\n<h2>O Consistency Analyzer: diagn\u00f3stico sem re-executar a tarefa<\/h2>\n<p>Aqui est\u00e1 o que muda de arquitetura no ALTK-Evolve. A parte antiga do sistema j\u00e1 era conhecida: um LLM extrai dicas estruturadas (guidelines) a partir de uma trajet\u00f3ria bruta em tr\u00eas categorias, estrat\u00e9gia, recupera\u00e7\u00e3o e otimiza\u00e7\u00e3o, agrupa em mem\u00f3ria duplamente indexada (embedding mais metadados de categoria\/prioridade\/contexto\/proced\u00eancia) e as recupera em runtime por similaridade de cosseno ou consulta guiada por LLM. A novidade \u00e9 o que vem antes disso: um est\u00e1gio que decide quais guidelines vale a pena extrair, mirando consist\u00eancia em vez de sucesso.<\/p>\n<p>O pipeline tem dois est\u00e1gios:<\/p>\n<h3>1. Detectar decis\u00f5es inst\u00e1veis<\/h3>\n<p>Voc\u00ea tem uma trajet\u00f3ria gravada, uma sequ\u00eancia de passos que o agente j\u00e1 executou. O Consistency Analyzer pega cada passo de decis\u00e3o e faz <strong>uma \u00fanica chamada ao modelo pedindo k completions<\/strong> (k=5 por padr\u00e3o) sobre o mesmo contexto que j\u00e1 estava registrado. Isso \u00e9 o ponto cr\u00edtico da arquitetura: n\u00e3o \u00e9 rerodar a tarefa inteira, n\u00e3o \u00e9 chamar as ferramentas de novo, n\u00e3o \u00e9 interagir com o ambiente. \u00c9 replay do contexto contra o modelo, offline, uma vez por passo de decis\u00e3o.<\/p>\n<p>Se as k respostas concordam, o passo \u00e9 agudo. Se divergem, o passo \u00e9 plano e vai para uma scorecard. O m\u00e9todo \u00e9 black-box: nada de logits, nada de instrumenta\u00e7\u00e3o al\u00e9m do trace que voc\u00ea j\u00e1 tem. Isso importa porque, em produ\u00e7\u00e3o, muitas vezes voc\u00ea n\u00e3o consegue rerodar uma tarefa nem uma vez, o efeito colateral seria real (mandaria e-mail, escreveria no banco, cobraria cart\u00e3o).<\/p>\n<h3>2. Gerar guidelines direcionadas<\/h3>\n<p>Cada passo sinalizado vira uma candidata a <em>consistency guideline<\/em>, no mesmo formato que o ALTK-Evolve j\u00e1 usa. Um exemplo real que o artigo mostra, gerado pelo GPT-4.1 a partir de uma trajet\u00f3ria de contagem de itens em uma nota do SimpleNote:<\/p>\n<pre><code>[Guideline 1] Ao contar marcadores de checkbox no conte\u00fado\nde uma nota, use regex ancorado por linha em vez de contagem\nde substring simples; t\u00edtulos de nota costumam repetir o\ns\u00edmbolo do marcador em uma linha de legenda.\n\n[Guideline 2] Sempre verifique resultados de busca de notas\nchecando por m\u00faltiplos matches e confirmando a nota correta\nantes de prosseguir.<\/code><\/pre>\n<p>Repare que nada disso \u00e9 trivialidade espec\u00edfica da tarefa. S\u00e3o padr\u00f5es de decis\u00e3o que aparecem com alta incerteza em v\u00e1rias tarefas do AppWorld. O analisador mira instabilidade, n\u00e3o falha, ent\u00e3o captura passos que o agente acertou desta vez mas poderia errar na pr\u00f3xima.<\/p>\n<h2>O que isso significa na pr\u00e1tica<\/h2>\n<p>Os n\u00fameros do experimento, no AppWorld test_normal (168 tarefas), ReAct com GPT-4.1, gerando guidelines a partir de uma trajet\u00f3ria-base por tarefa e testando em 5 novas execu\u00e7\u00f5es:<\/p>\n<ul>\n<li><strong>Pass^5 agregado<\/strong>: 53,0% \u2192 69,0% (+16,0 pp)<\/li>\n<li><strong>Mean@5 agregado<\/strong>: 77,4% \u2192 81,0%<\/li>\n<li><strong>Consistency gap<\/strong>: de 24,4 pp para 12,0 pp<\/li>\n<li><strong>Easy<\/strong>: Pass^5 de 77,2% para 89,4%<\/li>\n<li><strong>Medium<\/strong>: 52,1% para 75,0% (+22,9 pp, +44% relativo)<\/li>\n<li><strong>Hard<\/strong>: 31,7% para 46,0% (+14,3 pp, +45% relativo)<\/li>\n<\/ul>\n<p>Duas coisas importantes. Primeiro, Mean@5 n\u00e3o caiu em nenhum n\u00edvel de dificuldade, ent\u00e3o o ganho de consist\u00eancia n\u00e3o veio de trocar acur\u00e1cia por estabilidade. Segundo, aplicando as guidelines em outra variante do mesmo cen\u00e1rio do AppWorld, o Pass^5 ainda subiu 13,0 pp, tr\u00eas pontos abaixo do ganho na tarefa original. Isso \u00e9 evid\u00eancia de que a guideline captura algo transfer\u00edvel, n\u00e3o decora uma trajet\u00f3ria.<\/p>\n<p>Escrevendo nos livros que publiquei, entre eles a s\u00e9rie IA na Pr\u00e1tica, sobre agentes e engenharia de contexto, o padr\u00e3o que mais aparece nas d\u00favidas de leitor \u00e9 justamente esse: o exemplo do livro funcionou, o mesmo prompt no dia seguinte deu outra coisa. A resposta honesta era &#8220;\u00e9 a natureza probabil\u00edstica do modelo&#8221;. O que essa pesquisa da IBM adiciona \u00e9 uma maneira de <em>localizar<\/em> onde a probabilidade est\u00e1 sendo cara demais, sem precisar rerodar a tarefa inteira.<\/p>\n<h2>Onde quebra<\/h2>\n<p>Custo. Uma chamada extra ao modelo por passo de decis\u00e3o, com k=5 completions cada, para cada trajet\u00f3ria que voc\u00ea quiser analisar. Se o seu agente executa 30 passos numa tarefa e voc\u00ea quer analisar 100 tarefas, s\u00e3o 3000 chamadas de an\u00e1lise, cada uma retornando 5 candidatas. N\u00e3o \u00e9 proibitivo, mas n\u00e3o \u00e9 gr\u00e1tis, e cresce linear com o tamanho da trajet\u00f3ria.<\/p>\n<p>Escala de janela de contexto. As guidelines aprovadas entram no prompt em runtime, via recupera\u00e7\u00e3o por similaridade. Trabalhando com agente de c\u00f3digo todo dia, com arquivo de contexto em cada reposit\u00f3rio, uma coisa fica clara: contexto demais degrada o racioc\u00ednio e multiplica custo ao mesmo tempo. Contexto curado ganha de janela grande. O ALTK-Evolve resolve isso com recupera\u00e7\u00e3o, mas ainda cabe a voc\u00ea manter o pool de guidelines enxuto e revisado, principalmente se o modelo por tr\u00e1s mudar.<\/p>\n<p>Efeito em modelos mais fracos \u00e9 menor em termos absolutos. Com gpt-oss-120b, o ganho de Pass^5 na mesma tarefa foi +6,0 pp saindo de uma base de 10,1%. Curiosamente, a generaliza\u00e7\u00e3o para tarefas similares subiu mais (+8,7 pp) do que na tarefa original, o que sugere que as guidelines estavam pegando padr\u00f5es de falha reais e n\u00e3o decorando a trajet\u00f3ria espec\u00edfica. Ainda assim, em regime absoluto, um modelo fraco continua fraco.<\/p>\n<p>Depende de voc\u00ea ter trajet\u00f3rias. O m\u00e9todo \u00e9 diagn\u00f3stico sobre traces que j\u00e1 rodaram. Se o seu agente \u00e9 novo e nunca rodou nada em ambiente parecido com produ\u00e7\u00e3o, voc\u00ea n\u00e3o tem o insumo.<\/p>\n<h2>O que ainda n\u00e3o d\u00e1 para afirmar<\/h2>\n<p>O experimento reportado \u00e9 em AppWorld com ReAct e GPT-4.1, mais uma corrida secund\u00e1ria com gpt-oss-120b. N\u00e3o temos dados aqui de como o m\u00e9todo se comporta em agentes com arquiteturas diferentes de ReAct, nem com modelos com racioc\u00ednio expl\u00edcito (reasoning traces longas), nem em benchmarks fora de AppWorld. Existe uma issue do reposit\u00f3rio mencionando resultados que colocam o agente altk-evolve em #1 no dom\u00ednio de retail no \u03c4\u00b2-bench, mas essa \u00e9 uma submiss\u00e3o em curso e vale acompanhar antes de generalizar.<\/p>\n<p>Tamb\u00e9m n\u00e3o est\u00e1 esclarecido, no material p\u00fablico, qual \u00e9 a taxa de falsos positivos do Consistency Analyzer, quantos passos ele marca como planos que na verdade nunca flipariam em produ\u00e7\u00e3o. E a an\u00e1lise depende do pr\u00f3prio LLM ser razoavelmente calibrado ao ser resamplado; se o modelo tem vi\u00e9s sistem\u00e1tico, o analisador vai herdar esse vi\u00e9s.<\/p>\n<h2>Como testar isso voc\u00ea mesmo<\/h2>\n<p>Caminho m\u00ednimo, sem depender do toolkit da IBM ainda, apenas para sentir o problema no seu agente:<\/p>\n<ol>\n<li>Pegue 10 tarefas reais que seu agente resolve. Rode cada uma 5 vezes com o mesmo prompt e o mesmo modelo, temperatura 0.<\/li>\n<li>Calcule Mean@5 (m\u00e9dia da taxa de acerto) e Pass^5 (fra\u00e7\u00e3o das 10 tarefas em que as 5 execu\u00e7\u00f5es passaram).<\/li>\n<li>A diferen\u00e7a entre os dois \u00e9 o seu consistency gap. Se for maior que 10 pontos, voc\u00ea tem o mesmo problema descrito no artigo.<\/li>\n<li>Para uma tarefa que flipou, olhe as trajet\u00f3rias lado a lado e identifique o primeiro passo em que elas divergem. Esse \u00e9 um candidato a decis\u00e3o plana.<\/li>\n<\/ol>\n<p>Se quiser ir para a ferramenta:<\/p>\n<ul>\n<li>Reposit\u00f3rio: <a href=\"https:\/\/github.com\/AgentToolkit\/altk-evolve\" target=\"_blank\" rel=\"noopener\">github.com\/AgentToolkit\/altk-evolve<\/a>. O ALTK est\u00e1 sob licen\u00e7a Apache 2.0.<\/li>\n<li>Documenta\u00e7\u00e3o: <a href=\"https:\/\/agenttoolkit.github.io\/altk-evolve\/\" target=\"_blank\" rel=\"noopener\">agenttoolkit.github.io\/altk-evolve<\/a>.<\/li>\n<li>Artigo original no HuggingFace: <a href=\"https:\/\/huggingface.co\/blog\/ibm-research\/altk-evolve-consistency\" target=\"_blank\" rel=\"noopener\">huggingface.co\/blog\/ibm-research\/altk-evolve-consistency<\/a>.<\/li>\n<\/ul>\n<p>O que fica \u00e9 uma m\u00e9trica que voc\u00ea deveria reportar internamente mesmo sem adotar o toolkit: junto de qualquer taxa de acerto m\u00e9dio do seu agente, o Pass^k correspondente. \u00c9 a diferen\u00e7a entre &#8220;parece capaz&#8221; e &#8220;pode ser cobrado&#8221;.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Entenda o consistency gap em agentes de IA, a diferen\u00e7a entre Mean@k e Pass^k, e como o Consistency Analyzer da IBM diagnostica decis\u00f5es inst\u00e1veis.<\/p>\n","protected":false},"author":2,"featured_media":722,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-723","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/posts\/723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/comments?post=723"}],"version-history":[{"count":0,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/posts\/723\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/media\/722"}],"wp:attachment":[{"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/media?parent=723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/categories?post=723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yellowkode.com\/blog\/wp-json\/wp\/v2\/tags?post=723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}