Como os LLMs funcionam


Primeiro, o nome. LLM é a sigla para large language model (modelo de linguagem de grande escala): o tipo de IA por trás de ferramentas como o ChatGPT, aquela coisa para a qual você envia um prompt e recebe um texto de volta. Este capítulo é o retrato prático do que ele realmente é.
Você digita uma pergunta e, poucos segundos depois, aparece uma resposta fluente e confiante. Parece que o modelo te entendeu e foi buscar a resposta. Essa impressão é útil, mas também está errada de formas que importam, e é exatamente nesse espaço entre as duas coisas que nascem a maioria dos erros de quem está começando.
Este é o capítulo que compensa pelo resto da sua carreira com essas ferramentas. Você não precisa saber a matemática por trás do treinamento de um modelo para construir com ele. Mas precisa de um retrato funcional do que realmente acontece quando ele responde, porque esse retrato explica tudo o mais: por que o prompting funciona, por que a mesma pergunta gera respostas diferentes, por que os modelos inventam fatos, por que custam o que custam e por que algumas funcionalidades que parecem triviais são, na verdade, difíceis. Tudo que vem depois neste manual é consequência das ideias apresentadas aqui.
O que um modelo realmente é
Tire a interface de chat do caminho e um modelo de linguagem de grande escala é uma coisa só: uma função matemática enorme, um conjunto fixo de bilhões de números chamados parâmetros (você também vai ouvi-los sendo chamados de pesos). Isso é o modelo inteiro. Não é um banco de dados, não é um mecanismo de busca, não é uma pessoa pequena escondida numa caixa. É uma pilha muito grande de números que recebe texto e produz texto.
Esses números não vieram de um programador que os digitou. Eles foram definidos durante o treinamento. A empresa por trás do modelo alimentou-o com uma quantidade impressionante de texto, livros, código, artigos, páginas da web, e repetiu um exercício simples bilhões de vezes: esconder a próxima palavra, pedir ao modelo que a preveja e ajustar levemente seus números sempre que ele errasse o palpite. Repita isso numa escala enorme e os números vão se acomodando devagar em valores que são bons em prever texto. É isso que é o treinamento: ajustar bilhões de mostradores até que a previsão fique boa.
Duas coisas decorrem disso, e elas explicam boa parte do comportamento que você vai encontrar mais adiante. Primeiro, o treinamento acontece uma vez, com antecedência, e é extremamente caro. No momento em que você chama o modelo, os números já estão congelados. O modelo não aprende com a sua conversa. Nada que você diga altera seus parâmetros. Parece que ele lembra e se adapta, mas isso é o software em volta dele, não o modelo em si, um ponto que volta com força na seção sobre a janela de contexto.
Segundo, não existe nenhuma tabela de fatos dentro dele. O "conhecimento" existe como padrões incorporados nesses números, da mesma forma que um padeiro que já fez dez mil pães tem a técnica nas mãos sem precisar ler uma receita. O modelo aprendeu a forma de um texto correto e coerente. É por isso que ele pode ser fluente e estar errado na mesma frase: ele está reproduzindo a forma de uma boa resposta, não lendo um fato guardado numa estante.
Prevendo o próximo token
Com essa pilha de números em posição, o modelo faz exatamente uma tarefa: prever o próximo pedaço de texto, repetidamente.
Veja o ciclo em câmera lenta. Você dá a ele algum texto. Ele passa esse texto por todos aqueles parâmetros e produz uma probabilidade para cada pedaço possível de vir a seguir que ele conhece, dezenas de milhares de opções de uma vez. Depois de "A capital da França é", o pedaço "Paris" pode receber uma pontuação de 97%, "a" uma pontuação de 1%, e todo o resto quase nada.
O modelo então escolhe um pedaço, adiciona ao texto e roda tudo de novo para escolher o próximo. Ele repete isso até a resposta estar terminada.
Esse é o motor inteiro. Uma resposta que você lê como um único pensamento foi construída um pedaço por vez, cada pedaço escolhido a partir de uma classificação nova de probabilidades, sem nenhum plano para onde a frase está indo além de "o que é provável a seguir". Toda capacidade que você vai usar, chat, código, tradução, uso de ferramentas, raciocínio, é esse mesmo ciclo rodando por baixo.
O teclado do celular que sugere sua próxima palavra é a mesma ideia em miniatura. A diferença são os bilhões de parâmetros atrás do palpite. Treinado com texto suficiente, "qual é o pedaço mais provável de vir a seguir" acaba sendo bom o bastante para escrever código funcional e explicações claras. Mas o mecanismo por baixo nunca muda: é previsão, não compreensão, e não é uma resposta armazenada sendo consultada.
O controle de aleatoriedade
Se o modelo sempre pegasse o único pedaço com a pontuação mais alta, ele te daria a mesma resposta para o mesmo prompt sempre, e essa resposta muitas vezes seria monótona e repetitiva. Então, na maior parte do tempo, a escolha tem um pouco de aleatoriedade embutida: geralmente ele escolhe um pedaço de alta probabilidade, mas nem sempre o mais alto de todos. É por isso que você pode fazer exatamente a mesma pergunta duas vezes e receber duas respostas diferentes. Isso é o sistema funcionando como projetado, não uma falha.
Você controla quanta aleatoriedade existe por meio de uma configuração chamada temperatura, que você define ao chamar o modelo, no capítulo sobre chamar modelos a partir do código. Vale a pena ter essa intuição desde já. Numa temperatura baixa, o modelo se mantém próximo das suas escolhas principais: focado, consistente, previsível, o que é o que você quer para extrair um número de uma nota fiscal ou classificar textos em categorias. Numa temperatura mais alta, pedaços de menor probabilidade são escolhidos com mais frequência: mais variado e criativo, e mais propenso a se desviar para algo errado. Brainstorming e escrita criativa querem a extremidade mais alta; qualquer coisa que tenha uma resposta correta quer a extremidade mais baixa.
Então um único controle desliza o modelo entre "cuidadoso e repetível" e "surpreendente e inventivo". É o mesmo ciclo de previsão de qualquer forma; a temperatura só muda quão ousadamente o modelo se afasta do seu palpite mais seguro.
Tokens
Os "pedaços" que um modelo prevê têm um nome: tokens. Um token é um pedaço de texto, muitas vezes uma palavra inteira, às vezes só parte de uma. Palavras comuns geralmente são um único token, enquanto palavras mais longas ou raras são divididas em vários.
"tokenization" -> "token" + "ization"
"unbelievable" -> "un" + "believ" + "able"
"cat" -> "cat"Por que picar o texto nesses pedaços estranhos em vez de usar palavras inteiras ou letras individuais? É uma questão de equilíbrio. Letras individuais tornariam cada sequência enormemente longa, e o comprimento é o que o modelo precisa processar. Palavras inteiras precisariam de um vocabulário de milhões de entradas e ainda assim quebrariam na primeira vez que alguém inventasse uma palavra ou cometesse um erro de digitação. Os tokens são o caminho do meio: um vocabulário fixo de algumas dezenas de milhares de pedaços comuns que podem ser encaixados para formar qualquer coisa, incluindo palavras que o modelo nunca viu.
Aqui está a consequência escondida por baixo dos panos que surpreende as pessoas. O modelo nunca vê letras. Ele vê tokens, que para ele são na verdade números de identificação para esses pedaços. Então tarefas que parecem fáceis para nós podem ser difíceis para ele: contar as letras de uma palavra, inverter uma string, notar que "strawberry" tem três r's.
Ele não está sendo lerdo. Ele simplesmente não percebe os caracteres individuais, da mesma forma que você não consegue distinguir os grãos separados de farinha num pão já assado. Quando um modelo erra numa tarefa de ortografia ou contagem de caracteres, é por isso, e a solução geralmente é fazer essa parte com código normal em vez de com o modelo.
Tokens também são a unidade de duas coisas com as quais você vai se preocupar constantemente:
- Dinheiro: os fornecedores cobram por token, tanto os tokens que você envia quanto os tokens que o modelo escreve de volta, então um documento longo na entrada e uma resposta longa na saída custam mais. Uma estimativa aproximada para o inglês é cerca de quatro caracteres por token, ou 100 tokens para cada 75 palavras; código e outras línguas frequentemente se dividem em mais tokens, o que é parte do motivo de custarem mais. Você vai encontrar isso diretamente quando começar a chamar modelos a partir do código.
- Limites: existe um teto para quantos tokens o modelo consegue processar de uma vez, que é a próxima seção.
A janela de contexto
A janela de contexto é quanto texto o modelo consegue receber de uma vez, medido em tokens. Imagine como o tamanho da mesa de trabalho do modelo. Tudo que está envolvido numa única requisição precisa caber nessa mesa de uma vez: suas instruções, a conversa até agora, quaisquer documentos que você colou, e a resposta que o modelo está escrevendo.
Por que existe um limite? Ele vem de como a previsão funciona. Para escolher o próximo token, o modelo pesa como cada token da entrada se relaciona com todos os outros tokens, para conseguir identificar que "ele" se refere ao gato mencionado três frases atrás. Essa comparação de todos com todos é o que permite ao modelo acompanhar o significado ao longo de um trecho, e é também o que torna entradas longas caras de processar. O fornecedor define um teto, a janela de contexto, para manter cada requisição administrável.
Quando a mesa está cheia, alguma coisa precisa saltar fora. Se uma conversa se estender o suficiente para transbordar a janela, as partes mais antigas caem e o modelo não consegue mais vê-las. É por isso que uma conversa longa parece "esquecer" o que você disse no começo. Ele não esqueceu em nenhum sentido humano; aqueles tokens saíram da mesa. Também ajuda saber que os modelos tendem a prestar mais atenção ao início e ao fim do que está na mesa e podem perder o rastro de coisas enterradas no meio, então onde você coloca o texto importante importa quando você preenche a janela.
Agora o ponto que pega quase todo iniciante, e importa mais do que todo o resto. O modelo não tem memória entre requisições separadas. Lembre-se de que os números dele estão congelados. Cada chamada começa com uma mesa vazia. O modelo não lembra da sua última pergunta, do seu nome, ou de nada de um minuto atrás.
Um aplicativo de chat parece uma única conversa contínua só porque o aplicativo reenvia silenciosamente todo o histórico com cada nova mensagem. A continuidade é algo que o software em volta do modelo constrói, não algo que o modelo tem.
Esse único fato molda como você constrói tudo a partir daqui. Se você quer que o modelo saiba algo, precisa colocar isso na mesa naquela requisição: a conversa até agora, os dados do usuário, os documentos relevantes, tudo, sempre. Boa parte deste manual é, na verdade, sobre fazer bem essa única coisa: colocar o texto certo na mesa.
O que o modelo não sabe
Todo o conhecimento de um modelo foi incorporado durante o treinamento, então ele só sabe o que estava nos dados de treinamento, e esses dados foram reunidos até algum ponto de corte no passado. Dois limites decorrem diretamente disso.
Primeiro, ele não sabe nada que tenha acontecido depois do seu corte. Pergunte sobre as notícias da semana passada ou uma biblioteca que saiu este mês e ele não tem ideia real, embora possa produzir alegremente uma resposta que parece plausível de qualquer forma. Segundo, ele nunca soube nada privado. Os documentos internos da sua empresa, o histórico de pedidos de um usuário, o conteúdo do seu banco de dados: nada disso estava no texto público em que ele treinou, então ele não pode saber disso, não importa quão bem você peça.
Existe um limite mais discreto também. O modelo geralmente não consegue te dizer de onde veio algo que ele "sabe", porque o conhecimento está misturado dentro dele em vez de arquivado como fatos separados e com fonte identificada. Ele pode escrever uma citação para você, mas está prevendo como uma citação deveria parecer, não buscando uma real.
Essa é a razão para uma técnica que você vai encontrar mais adiante chamada retrieval, ou RAG. Se você quer que um modelo responda sobre eventos recentes ou seus próprios dados privados, você não o retreina. Você mesmo busca o texto relevante e o coloca na mesa no momento da requisição, para que o modelo tenha os fatos diante de si em vez de chutar. Um modelo é muito mais um raciocinador sobre o texto que você fornece do que um poço confiável de fatos específicos.
Por que os modelos inventam coisas
Às vezes um modelo afirma algo falso com total confiança: uma citação que ninguém disse, uma função que não existe, uma referência a um estudo que nunca foi escrito. Isso é chamado de alucinação, e depois das últimas seções isso deveria parecer quase inevitável em vez de misterioso.
O motivo é que o modelo não tem nenhuma noção interna de "verdadeiro" versus "falso". Ele só tem "texto provável" versus "texto improvável". Na maior parte do tempo essas duas coisas se alinham, porque no texto do qual ele aprendeu, afirmações verdadeiras são muito mais comuns do que falsas, então a continuação provável é geralmente a correta.
Mas quando o modelo encontra uma lacuna, algo em que ele nunca foi treinado, ou seus dados privados que ele nunca poderia ter visto, ele não para e sinaliza a lacuna. Ele não consegue saber de forma confiável o que ele não sabe. Ele faz a única coisa que sempre faz: produz a continuação que parece mais provável.
Uma resposta confiante, bem formulada e errada é muitas vezes exatamente o que parece mais provável. O mesmo mecanismo que o torna fluente é o que o torna fluente quando está errado.
Esse é o ponto em que vale a pena parar e pensar: alucinação não é uma falha que você consegue eliminar completamente com prompting. Você pode reduzi-la, e os capítulos seguintes mostram como. Dizer ao modelo que ele tem permissão para dizer "eu não sei" ajuda um pouco. Pedir a ele que responda apenas a partir do texto que você fornece ajuda muito mais, porque agora não há nenhuma lacuna para preencher a partir do treinamento congelado. Mas a tendência vem do que o modelo fundamentalmente é, uma máquina de probabilidade sem nenhum verificador de fatos dentro, então as correções duráveis são estruturais: forneça a ele os fatos com os quais trabalhar em vez de esperar que estivessem no seu treinamento, e verifique respostas que importam em vez de confiar nelas.
Leve uma regra deste capítulo acima de todas as outras: a confiança de um modelo não te diz nada sobre se ele está certo. Fluência e correção são produzidas pelo mesmo processo e se separam o tempo todo. Construa como se qualquer resposta individual pudesse estar errada, porque qualquer resposta individual pode estar.
Juntando tudo
Tudo neste capítulo é uma única ideia vista de ângulos diferentes. Um modelo é uma pilha congelada de números que prevê o próximo token, e quase todo comportamento com o qual você vai lidar decorre disso:
- Ele prevê um token por vez a partir de uma classificação de probabilidades, então ele improvisa em vez de recordar, e um toque de aleatoriedade (temperatura) faz com que as respostas variem.
- Tokens são os pedaços com os quais ele trabalha: a unidade da sua conta, a unidade do seu limite de tamanho, e o motivo pelo qual ele não consegue contar letras de forma confiável.
- A janela de contexto é a mesa de trabalho de uma única requisição, compartilhada por tudo, e o modelo não lembra de nada entre requisições, então a continuidade é responsabilidade sua.
- O conhecimento dele está congelado num corte de treinamento e nunca incluiu seus dados privados, o que é o motivo de você buscar os fatos e colocá-los no prompt.
- Alucinação é o preço de um sistema que prevê texto provável sem nenhuma noção de verdade, reduzida por fundamentação e verificação, nunca apenas por formulação inteligente.
Junte tudo isso e uma quantidade surpreendente da engenharia de IA acaba sendo uma única tarefa em diferentes disfarces: colocar o texto certo na mesa, na forma certa, no momento certo, e nunca confiar ciegamente na saída. O próximo capítulo, Modelos abertos e fechados, analisa que tipos de modelos existem e como você consegue um, e depois prompting é onde você começa a direcionar toda essa previsão para o que você realmente quer.

