Menu

Tokens e janela de contexto: como a IA lê texto

Os modelos de IA leem texto em tokens, pequenos pedaços de palavras, e só conseguem guardar um número limitado deles de uma vez: a janela de contexto. Veja como os dois funcionam e o que fazer quando uma conversa fica longa.

Você pode editar cada prompt desta página e depois abri-lo no ChatGPT, no Claude ou em outro app de IA.

Os modelos de linguagem de IA não leem letras nem palavras. Eles leem tokens: pequenos pedaços de texto, muitas vezes uma palavra inteira, às vezes parte de uma. E eles só conseguem receber um número limitado de tokens de cada vez, um limite chamado janela de contexto. Essas duas ideias explicam por que as ferramentas de IA são cobradas do jeito que são, por que conversas longas começam a esquecer as instruções do início e por que um modelo pode ter dificuldade para contar as letras de uma palavra que acabou de escrever corretamente.

O que é um token na IA?

Antes de o modelo ver o seu prompt, um programa chamado tokenizador divide o texto em pedaços de um vocabulário fixo e transforma cada pedaço em um número. O modelo trabalha inteiramente com esses números e escreve a resposta do mesmo jeito, um token por vez, que o app transforma de volta em texto.

O vocabulário é aprendido a partir de grandes quantidades de texto, então palavras comuns tendem a ser um único token e palavras mais raras são divididas em vários pedaços conhecidos. Um espaço muitas vezes fica grudado no começo da palavra seguinte. Uma frase em inglês pode ser dividida mais ou menos assim:

Token ization isn 't magic .

Essa divisão é ilustrativa. Cada família de modelos tem o próprio tokenizador, e a mesma frase pode sair com um número diferente de pedaços em cada um. Muitos fornecedores publicam uma ferramenta de tokenização ou uma API de contagem de tokens para você conferir os números reais.

Imagens, áudio e arquivos também são convertidos em tokens quando o modelo os aceita, e é por isso que uma captura de tela anexada consome parte do mesmo orçamento que o seu texto.

Quantos tokens tem uma palavra?

Para texto em inglês, uma regra prática muito usada é de cerca de quatro caracteres por token, ou mais ou menos três quartos de uma palavra. Por essa estimativa, 1.000 tokens são cerca de 750 palavras em inglês, e um artigo de 3.000 palavras tem cerca de 4.000 tokens.

A proporção muda com o conteúdo:

  • Outros idiomas muitas vezes usam mais tokens para o mesmo significado. Os tokenizadores são treinados com dados em que o inglês tem muito peso, então as palavras em inglês ganham tokens compactos, enquanto textos em português, japonês, coreano, árabe, hindi e muitos outros idiomas são divididos em mais pedaços. A diferença depende do tokenizador e diminuiu nos mais novos, mas não desapareceu.
  • Código gasta tokens com indentação, colchetes, operadores e identificadores longos, então um arquivo muitas vezes custa mais tokens do que a contagem de palavras sugere.
  • Números, URLs e sequências incomuns, como IDs e hashes, tendem a ser divididos em muitos tokens pequenos.

Por que os tokens importam

Custo. As APIs cobram por token, com preços separados para os tokens que você envia e os tokens que o modelo escreve. Em um chat, a conversa inteira é enviada de novo a cada nova mensagem, então uma conversa longa custa mais por mensagem do que uma curta.

Limites. O modelo tem uma janela de contexto para tudo o que lê e escreve em uma requisição e, muitas vezes, um limite separado para o tamanho de uma única resposta. Na API você pode definir esse limite, e na API da Anthropic você precisa: max_tokens é um parâmetro obrigatório.

Velocidade. A resposta é produzida um token depois do outro, então uma resposta mais longa demora proporcionalmente mais para terminar.

Tarefas de soletrar. Como o modelo vê uma palavra como magic em uma ou duas unidades, e não em cinco letras, tarefas que dependem de caracteres individuais, como contar letras, inverter uma palavra ou encontrar palavras com um tamanho exato, são mais difíceis para ele do que parecem. Os modelos mais novos lidam melhor com muitas delas, mas, quando os caracteres importam, confira a resposta ou peça ao modelo que escreva a palavra letra por letra antes.

O que é janela de contexto?

A janela de contexto é o número máximo de tokens que um modelo consegue levar em conta em uma única requisição. Pense nela como a memória de trabalho do modelo: tudo o que ele pode usar para escrever a resposta precisa caber ali de uma vez, incluindo:

  • o prompt de sistema, com as instruções do próprio app e as suas
  • a conversa até ali, cada mensagem do usuário e cada resposta
  • arquivos anexados, documentos colados e resultados de busca ou de ferramentas
  • a resposta que está sendo escrita

O que fica fora da janela não existe para o modelo. Não há nenhuma memória de fundo em que ele possa consultar coisas. O tamanho da janela de contexto varia muito entre modelos e não para de crescer, então confira a documentação do fornecedor para o modelo que você usa, em vez de confiar em um número de algum artigo.

O modelo também não guarda nada entre uma requisição e outra. O que parece memória em um chat é o app enviando a conversa inteira de novo a cada vez. Os recursos de memória dos apps de chat funcionam do mesmo jeito: o app salva anotações sobre você, ou pesquisa nas suas conversas anteriores, e insere o que encontra no contexto das novas conversas.

O que acontece quando o chat fica longo

Quando uma conversa passa do tamanho da janela de contexto, algo precisa ceder. Dependendo do app, as mensagens mais antigas são descartadas, partes antigas são substituídas por um resumo ou você é avisado de que o chat chegou ao limite e deve começar outro. Em qualquer caso, detalhes do começo, incluindo instruções que você deu na primeira mensagem, podem deixar de afetar as respostas.

Uma janela cheia não é o único problema. Quanto mais material o modelo tem à frente, mais coisa há para deixar passar, e em um chat longo as decisões do começo competem com tudo o que foi dito depois. Os sintomas incluem respostas que ignoram uma restrição definida antes, código que volta para uma versão que você já tinha corrigido ou um modelo que repete uma ideia que você rejeitou.

Como trabalhar dentro da janela de contexto

Abra um chat novo para cada tarefa. Um chat novo com uma primeira mensagem clara costuma ser melhor do que um chat longo que passou por vários assuntos.

Leve um resumo adiante. Quando um chat acumulou decisões úteis, peça um resumo escrito para ser colado em um chat novo e continue por lá. Preencha as lacunas abaixo de acordo com o seu trabalho.

Continuar em um chat novo
Fill in
Este chat está ficando longo. Escreva um resumo que eu possa colar em um chat novo para continuar o trabalho. Inclua: o objetivo, as decisões que tomamos e por quê, a versão atual de o esquema do banco de dados e as perguntas em aberto. Mantenha o resumo com menos de 200 palavras, sem contar o esquema do banco de dados.
Try it
Example replyReplies vary between models and runs.

Objetivo: um banco de dados para um pequeno app de biblioteca, guardado em SQLite.

Decisões:

  • Os empréstimos têm uma tabela própria, para guardar o histórico completo.
  • Um livro conta como disponível quando não tem nenhum empréstimo com returned_at vazio.

Esquema atual:

CREATE TABLE books (id INTEGER PRIMARY KEY, title TEXT NOT NULL, author TEXT NOT NULL);
CREATE TABLE members (id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE);
CREATE TABLE loans (
  id INTEGER PRIMARY KEY,
  book_id INTEGER NOT NULL REFERENCES books(id),
  member_id INTEGER NOT NULL REFERENCES members(id),
  loaned_at TEXT NOT NULL,
  returned_at TEXT
);

Perguntas em aberto:

  • Vamos precisar de multa por atraso?
  • A biblioteca deve controlar vários exemplares do mesmo livro?

Cole só o que a tarefa precisa. A função com o bug e o código que a chama, não o repositório inteiro. A cláusula do contrato em questão, não as quarenta páginas. Menos material deixa menos coisa para passar despercebida.

Coloque a pergunta depois do material longo e repita o que importa. Quando você colar um documento longo, faça a pergunta no final, depois dele, e repita ali as restrições principais. Assim a instrução fica perto do ponto em que o modelo começa a escrever.

Divida um documento longo demais para uma mensagem. Alguns apps limitam quanto você pode colar em uma única mensagem, mesmo quando a janela do modelo comportaria mais. Enviar o documento em partes contorna o limite da mensagem, mas não a janela de contexto: cada parte continua contando para ela. Diga ao modelo logo de início que não responda até você ter enviado tudo.

Fill in
Vou enviar um documento longo em 3 partes. Depois de cada parte, responda apenas "Recebi a parte N de 3" e nada mais. Não resuma nem responda nada até eu fazer a minha pergunta. Parte 1 de 3: """ [cole a parte 1] """
Try it
Example replyReplies vary between models and runs.

Recebi a parte 1 de 3

Conte os tokens quando isso importar. Se você está desenvolvendo com uma API, conte antes de enviar. A biblioteca de código aberto tiktoken, da OpenAI, tokeniza texto com os tokenizadores da OpenAI, e a API da Anthropic tem um endpoint de contagem de tokens. As contagens do tokenizador de um fornecedor são só uma estimativa para o de outro.

import tiktoken

enc = tiktoken.get_encoding("o200k_base")  # one of OpenAI's tokenizers
tokens = enc.encode("Tokenization isn't magic.")
print(len(tokens))
print([enc.decode([t]) for t in tokens])

Quando você cria um app em torno de um modelo, decidir o que entra na janela e em que ordem vira um problema de design por si só. Engenharia de contexto trata disso, e encadeamento de prompts mostra como dividir um trabalho grande em etapas que cabem com folga. Para ver como uma única mensagem se encaixa na entrada inteira, veja o que é prompt.

Perguntas frequentes

O que é um token na IA?

Token é a unidade de texto que um modelo de linguagem lê e escreve. Pode ser uma palavra comum inteira, parte de uma palavra mais longa, um sinal de pontuação ou um espaço. Antes de o modelo ver o seu prompt, um tokenizador o divide em tokens e transforma cada um em um número, e o modelo gera a resposta um token por vez.

Quantas palavras são 1.000 tokens?

Para o inglês, uma regra prática comum é de cerca de quatro caracteres por token, o que dá mais ou menos 750 palavras para cada 1.000 tokens. O número real depende do tokenizador do modelo e do texto. Código, números e muitos idiomas além do inglês, incluindo o português, usam mais tokens para a mesma quantidade de conteúdo.

O que é janela de contexto?

A janela de contexto (context window) é o número máximo de tokens que um modelo consegue levar em conta em uma requisição. Ela precisa comportar o prompt de sistema, a conversa até ali, os arquivos anexados ou resultados de ferramentas e a resposta que o modelo está escrevendo. O que fica fora dela não existe para o modelo.

O que acontece quando um chat passa da janela de contexto?

O app precisa abrir espaço. Dependendo do app, ele descarta as mensagens mais antigas, substitui essas mensagens por um resumo ou avisa que a conversa chegou ao limite. De qualquer forma, instruções e detalhes do começo do chat podem deixar de afetar as respostas, e é por isso que conversas longas às vezes parecem esquecer coisas.

O ChatGPT ou o Claude se lembram das minhas conversas anteriores?

O modelo em si, não. Cada resposta é gerada a partir do que está na janela de contexto naquela requisição. Alguns apps têm recursos de memória que salvam anotações sobre você ou pesquisam nas suas conversas antigas e acrescentam o que encontram às novas, e projetos podem incluir arquivos e instruções compartilhados, mas isso é o app colocando texto no contexto, não o modelo se lembrando.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR