Contador de tokens LLM
Conte os tokens que o seu texto custa segundo a codificação real de um modelo, no seu navegador. Nada é enviado, e nenhum número aqui é uma estimativa.
Nada do que você cola aqui sai deste navegador. O vocabulário da codificação que você escolher é baixado uma vez deste site, e a contagem roda em um Web Worker nesta aba: abra o seu próprio painel de rede e veja, nenhuma requisição leva o seu texto.
Escolha o modelo que você está mirando de verdade. Um modelo usa uma codificação, vários modelos compartilham a mesma, e uma contagem pertence à codificação e não ao nome.
o200k_baseCole ou digite algo acima e a contagem exata de tokens aparece aqui.
O que um token é de verdade
Um modelo de linguagem não lê o seu texto como letras nem como palavras. Antes de qualquer outra coisa acontecer, o texto é cortado em tokens, e um token é uma sequência de bytes para a qual o modelo tem um único número. Alguns tokens são mesmo palavras inteiras. Muitos são uma palavra junto com o espaço que vem antes dela, e é por isso que a mesma palavra pode custar valores diferentes dependendo do que vem antes. Outros são um sufixo, um sinal de pontuação, uma indentação ou um fragmento que não é pedaço de nada que um leitor saberia nomear. Quem faz o corte é uma tabela construída contando quais sequências aparecem juntas com mais frequência em uma grande massa de texto, e nada nela foi projetado para combinar com o jeito de escrever de ninguém.
- Um token é uma sequência de bytes e não uma sequência de caracteres. A distinção soa como pedantismo até você escrever fora do alfabeto latino, onde ela é tudo.
- Uma palavra inglesa comum costuma ser um token. Uma palavra rara, um nome, um código de produto ou um erro de digitação são vários, porque a tabela não tem uma entrada para o conjunto todo e precisa montá-lo com pedaços mais curtos.
- O espaço em branco não é grátis. A indentação, as linhas vazias e os espaços dentro de uma tabela colada são todos bytes, e todos são contados. Um prompt que parece organizado pode custar bem mais do que esse mesmo prompt escrito corrido.
- A contagem depende dos bytes exatos e de mais nada. Dois textos que parecem idênticos na tela mas diferem em um caractere invisível — um espaço inquebrável, uma marca de ordem de bytes, um apóstrofo de outro tipo — são textos diferentes e podem dar números diferentes.
É por isso que a regra prática que todo mundo repete — dividir os caracteres por quatro — não é regra nenhuma. É uma média sobre um tipo de texto em um idioma, e ela erra na direção que custa dinheiro no instante em que o seu texto é código, uma tabela, uma lista de identificadores ou algo escrito em qualquer coisa que não seja inglês. O número desta página não é essa média. É o corte real, feito pela tabela real, no seu navegador.
É a codificação que faz a contagem
A tabela e as regras de fusão, juntas, se chamam codificação, e a codificação tem um nome próprio. É esse nome que vale a pena aprender, porque a contagem pertence a ela e não a modelo nenhum: vários modelos compartilham uma mesma codificação, e um modelo substituído por outro mais novo muitas vezes mantém a codificação do antecessor. Quando esta página mostra um número, ela mostra também a codificação sob a qual ele foi calculado, bem ao lado do modelo que você escolheu.
- Um modelo usa uma codificação. A correspondência é de muitos para um, então saber qual codificação o seu modelo usa diz mais do que saber qual é o modelo.
- Uma codificação tem um nome próprio publicado, como o200k_base, e esse nome quer dizer a mesma tabela onde quer que você o encontre. Uma contagem feita sob uma codificação nesta página e uma contagem feita sob a mesma codificação em qualquer outro lugar batem, e é isso que torna verificável uma contagem que vem com a sua codificação junto.
- Uma contagem só significa alguma coisa com a sua codificação junto. Um número citado com um nome de modelo e sem codificação é um número que você não tem como conferir, e é o que a maioria das páginas sobre o assunto entrega.
A consequência prática surpreende as pessoas: trocar entre dois modelos que compartilham a codificação não move o número nem um pouco, e isso é a ferramenta acertando e não a ferramenta quebrada. Para ver uma contagem mudar, você tem que mudar a codificação, e não o nome do modelo.
Por que um texto que não está em inglês custa mais
Aqui está a parte que nenhuma página escrita partindo do inglês vai contar para você, e é o motivo de esta página existir. As codificações em uso trabalham no nível do byte: elas agem sobre os bytes UTF-8 do seu texto e não sobre os caracteres dele. Uma letra latina é um byte. Uma letra hebraica, árabe, grega ou cirílica são dois. Um caractere chinês, japonês ou coreano são três. Um emoji são quatro, e uma bandeira ou uma família unida são vários deles em sequência. Ou seja, antes de qualquer tabela ser consultada, a mesma frase já ocupa duas ou três vezes mais bytes em um idioma do que em outro.
- As tabelas foram construídas contando sequências em um corpus esmagadoramente inglês, então as palavras inglesas ganharam entradas e as de outros idiomas muitas vezes não. Um idioma sem entrada para as suas próprias palavras comuns é soletrado em fragmentos.
- Isso se soma ao custo em bytes em vez de substituí-lo. Uma palavra que precisa ser montada com três fragmentos, cada um de dois ou três bytes, sai cara duas vezes.
- O efeito não é uniforme entre os idiomas que não são o inglês. Um sistema de escrita cujas sequências frequentes estão na tabela se sai muito melhor do que um que mal estava representado, e o único jeito de saber onde o seu fica é colar o seu próprio texto e olhar.
- É por isso que um orçamento feito em inglês não se transfere. Se disseram a você que uma janela de contexto comporta um certo número de páginas, esse valor quase certamente foi medido em inglês, e o seu idioma não vai chegar lá.
Nada disso é um defeito que você possa contornar escrevendo de outro jeito, e também não é motivo para escrever em inglês. É um custo que você deveria poder ver antes de assumi-lo, e esse é todo o trabalho do número acima.
Um caractere pode ficar partido entre tokens
Como um token é uma sequência de bytes e um caractere fora do alfabeto latino ocupa vários bytes, um único caractere é cortado ao meio com toda a naturalidade: os primeiros bytes dele caem em um token e os últimos no seguinte. Nenhum desses dois tokens é texto por si só. Imprimi-los como se fossem é o que produz aquela fileira de caracteres de substituição que você talvez já tenha visto em outras páginas que prometem mostrar os seus tokens, e destrói exatamente o entendimento que a figura deveria dar.
Por isso este site desenha um segmento no lugar: a menor sequência de tokens consecutivos cujos bytes saem como texto completo. Normalmente é um token só. Onde um caractere foi partido são dois ou mais — até quatro, para um caractere de quatro bytes que foi cortado byte a byte — e o segmento é desenhado inteiro com o número de tokens que ele carrega dentro escrito ao lado, de modo que você vê o corte em vez de perder o caractere nele. A contagem nunca é afetada por nada disso. O corte é um fato sobre como os bytes foram divididos, e o total continua sendo o total.
Ler a figura do seu próprio texto
Embaixo da contagem, o seu texto é desenhado uma segunda vez com os limites à mostra. Cada bloco dessa figura é um segmento, os blocos vêm na ordem em que você os escreveu e nada é omitido nem encurtado, então o que você está olhando é o seu próprio texto e não uma lista de fragmentos tirados dele. Essa é a pergunta que o número não consegue responder: não quanto o conjunto custa, mas quais partes dele são as caras.
- Um bloco sem número em cima é um token só, que é o caso comum. Ele fica sem marca de propósito: um algarismo sobre cada bloco seria um muro de dígitos por cima das suas próprias frases e enterraria os blocos que vale a pena olhar. O limite é a leitura, e o sombreado é o que faz um bloco terminar e o seguinte começar.
- Um bloco que carrega um número pequeno é um segmento de mais de um token, e é ali que um caractere foi cortado por um limite. O caractere continua lá, desenhado inteiro, com o número de tokens que ele custou ao lado — assim um corte aparece como um custo e não como um estrago no seu texto. Um emoji ou um caractere de um sistema de escrita antigo pode chegar a quatro.
- Os espaços, as quebras de linha e a indentação são desenhados como todo o resto, porque são contados como todo o resto. Um trecho de blocos sobre o que parece não ser nada é a parte mais barata de arrumar em um prompt longo, e é invisível até você conseguir vê-la.
- Trocar de modelo remodela a figura sempre que isso muda a codificação, e a deixa exatamente como estava sempre que não muda. É o mesmo fato que o número mostra, em uma forma em que você consegue ver onde a diferença cai e não só que existe uma.
Um texto muito longo é desenhado só até certo ponto, e onde o desenho para, a página diz quantos blocos desenhou de quantos. A contagem nunca é limitada do mesmo jeito: ela é sobre tudo o que você colou, em qualquer tamanho, e nada da figura chega até ela. O limite existe porque um navegador diagrama cada bloco um de cada vez e um documento inteiro seria mais blocos do que qualquer página conseguiria mostrar com proveito — então o que você perde depois desse ponto é a figura do resto, nunca a resposta sobre ele.
Por que alguns modelos não trazem número nenhum aqui
Nem todo modelo pode ser contado no seu navegador, e a coisa honesta a fazer sobre isso é dizer quais e por quê, em vez de mostrar um número adivinhado. Há três estados em que um modelo pode estar nesta página, e eles são distinguidos na tela em vez de misturados.
- A codificação dele é publicada e este site a serve. Você recebe uma contagem exata, calculada aqui, contra a tabela real.
- A codificação dele é publicada e este site não a serve. A linha nomeia a codificação e diz por quê — na maioria das vezes porque ninguém entre quem publica o arquivo declara uma licença que permita a outra pessoa republicá-lo. A tabela existe; a recusa é nossa, e a linha diz isso.
- A codificação dele nunca foi publicada. Não há tabela para servir nem tabela para recusar, então nenhuma página em lugar nenhum consegue contar esse modelo no seu navegador, não importa o que ela alegue. A linha diz isso, e não traz número, nem estimativa, nem intervalo.
É nessa última linha que a maioria das páginas sobre o assunto trapaceia em silêncio: elas passam o seu texto pela tabela de outro modelo e apresentam o resultado como se fosse uma medição. Não é só impreciso, é enviesado, e o viés é maior justamente no texto mais difícil de orçar — código, e tudo o que não está escrito em inglês. A contagem exata para um modelo desses vem do serviço de contagem de tokens de quem o fabrica, e esse serviço exige uma chave de API que uma página rodando inteiramente no seu navegador não tem como guardar e nunca deveria pedir a você. Recorrer a esse serviço é a resposta honesta, e é a que esta página dá no lugar de um número.
Transformar uma contagem em custo por conta própria
Esta página não informa preço nenhum, e isso é de propósito: um preço fica velho mais depressa do que qualquer outra coisa neste assunto, e um preço velho não deixa uma página incompleta, a deixa falsa. O que não fica velho é a aritmética, então aqui está ela, e você pode aplicá-la ao que a página do próprio provedor disser hoje.
- Os provedores informam uma tarifa por milhão de tokens. Pegue a contagem desta página, divida por um milhão e multiplique por essa tarifa. Esse é o custo de enviar o texto uma vez.
- A entrada e a saída são cobradas separadamente, e a saída costuma ser a mais cara das duas. Esta página conta o que você envia. Ela não tem como contar uma resposta que ainda não existe, então qualquer custo que você tirar daqui é um piso e nunca um total.
- Uma conversa reenvia o próprio histórico. Se o seu texto é uma mensagem de sistema que vai junto em cada turno, multiplique pelo número de turnos que você espera, e de novo pelo número de usuários, antes de decidir se encurtá-lo vale uma tarde.
A mesma contagem responde à outra pergunta que as pessoas trazem para cá, que é se um texto vai caber. Esta página também não vai dizer isso, porque uma janela de contexto é um valor que se move e uma promessa sobre caber é uma promessa que nenhuma ferramenta que não seja o próprio modelo consegue cumprir. O que ela dá é o número para comparar com qualquer valor que o provedor publicar.
Nada do que você cola sai do seu navegador
A contagem acontece na página que você já carregou. A tabela da codificação que você escolheu é baixada uma vez deste site — isso é baixar um arquivo, não enviar o seu texto — e todo o resto roda na sua própria máquina, em uma thread em segundo plano para que um documento longo não congele a aba. Abra o painel de rede do seu navegador e observe enquanto digita: nenhuma requisição sai levando o que você escreveu.
É isso que torna seguro colar justamente aquilo que você quer contar de verdade — o prompt de um cliente, uma mensagem de sistema interna, um pedaço de um documento privado — em vez de uma versão higienizada que teria dado outro número de qualquer jeito. E nada fica armazenado: recarregue a página e o campo está vazio, não há histórico e não sobra nada para apagar.
Perguntas frequentes
- Um token é a mesma coisa que uma palavra?
- Não, e raciocinar como se fosse é o jeito mais comum de errar um orçamento. Uma palavra inglesa frequente costuma ser um token só, mas uma palavra rara, um nome ou um erro de digitação são vários, uma palavra quase sempre carrega o espaço anterior dentro do mesmo token, e a pontuação e a indentação são contadas como todo o resto. Fora do inglês o descompasso é bem maior, porque um token é uma sequência de bytes e um único caractere costuma ser dois, três ou quatro bytes antes de qualquer tabela ser consultada.
- Posso simplesmente dividir o número de caracteres por quatro?
- Só se você estiver escrevendo prosa em inglês e não se importar de errar por uma boa margem. Esse valor é uma média sobre um tipo de texto em um idioma. Código-fonte, tabelas, listas de identificadores e tudo o que usa outro sistema de escrita quebram essa regra, e quebram na direção que custa mais e não menos. O número desta página é o corte real feito pela tabela real, então não há motivo para estimar quando você pode medir.
- Por que a contagem não muda quando eu troco de modelo?
- Porque esses dois modelos usam a mesma codificação, e é a codificação que faz a contagem. Isso é o normal e não uma falha: um modelo mais novo muitas vezes herda a tabela do antecessor, e vários modelos de um mesmo fabricante compartilham uma só. A codificação aparece ao lado da contagem exatamente por isso — se o nome não muda quando você troca, o número também não vai mudar.
- Por que o meu idioma custa muito mais tokens do que o inglês?
- Duas razões que se somam. As codificações trabalham sobre bytes UTF-8, e uma letra fora do alfabeto latino são dois, três ou quatro bytes onde uma latina é um. E as tabelas foram construídas contando sequências em um corpus esmagadoramente inglês, então as palavras inglesas têm entradas próprias enquanto as de outros idiomas muitas vezes são montadas com fragmentos. Uma palavra feita de três fragmentos de três bytes cada sai cara duas vezes. Cole o seu próprio texto acima e você vai ver onde o seu idioma fica de verdade.
- Por que não há número para um dos modelos da lista?
- Porque a codificação dele nunca foi publicada, então não existe tabela contra a qual esta página — nem qualquer outra que rode no seu navegador — possa contar. Uma página que mostra um número para um modelo desses está passando o seu texto pela tabela de outro modelo e apresentando um palpite como se fosse uma medição. Esse palpite conta a menos, e conta a menos sobretudo em código e em texto que não está em inglês, que é justamente onde você precisava que ele acertasse.
- De onde vem, então, a contagem exata desse modelo?
- Do serviço de contagem de tokens de quem fabrica o modelo. É a única fonte que pode ser exata, porque só o fabricante tem a tabela. Ele exige uma chave de API, que uma página rodando inteiramente no seu navegador não tem como guardar e nunca deve pedir a você — então a coisa honesta que esta página pode fazer é dizer para onde ir em vez de inventar um número. Se você já chama esse modelo a partir do seu próprio código, a mesma chave que você usa lá responde a isto também.
- Os espaços, as quebras de linha e a indentação contam?
- Contam, todos eles, e podem somar mais do que as pessoas esperam. Código indentado, linhas vazias entre parágrafos e o preenchimento dentro de uma tabela colada são todos bytes, e as codificações de fato têm tokens para vários espaços de uma vez, então o custo não é um token por espaço — mas também não é nada. Se você está enxugando uma mensagem de sistema longa, vale a pena medir o que acontece ao reformatá-la antes de começar a cortar frases.
- O meu texto é enviado para um servidor?
- Não. A tabela da codificação que você escolheu é baixada uma vez deste site, e a partir daí cada contagem é calculada no seu próprio navegador, em uma thread em segundo plano. Abra o seu painel de rede e observe enquanto digita: nenhuma requisição leva o que você escreveu. E nada fica armazenado, então recarregar a página deixa um campo vazio e nada para apagar.
- Isto vai me dizer quanto o meu prompt custa, ou se ele cabe?
- Nem uma coisa nem outra, e as duas recusas são de propósito. Um preço estaria velho em questão de meses e nada aqui conseguiria perceber isso, então em vez disso o guia ensina a aritmética e deixa a tarifa para a página do próprio provedor. Uma janela de contexto é um valor móvel do mesmo tipo, e se um texto cabe depende também da resposta, que esta página não consegue ver. O que você recebe é o único número de que as duas perguntas partem, calculado com exatidão.
Ferramentas relacionadas
- Comprimento de texto
Conta caracteres, palavras e linhas — compatível com Unicode.
- Testador de regex
Teste expressões regulares — correspondência, substituição, divisão.
- Diff de texto
Compare dois textos — cada linha e palavra alterada.
- Inspetor de caracteres Unicode
Veja exatamente de que caracteres um texto é feito.