Como os LLMs funcionam

Primeiro, o nome. LLM é a abreviação para large language model (modelo de linguagem grande): o tipo de IA por trás de ferramentas como ChatGPT, aquela coisa para a qual você envia um prompt e recebe texto de volta. Este capítulo é a imagem funcional do que ele realmente é.
Você digita uma pergunta e alguns segundos depois uma resposta fluente e confiante aparece. Parece que o modelo entendeu você e procurou a resposta. Essa impressão é útil, e também está errada de maneiras que importam, e a lacuna entre as duas é de onde vêm a maioria dos erros de iniciantes.
Este é o capítulo que compensa o resto da sua carreira com essas ferramentas. Você não precisa conhecer a matemática por trás do treinamento de um modelo para construir com um. Você precisa de uma imagem funcional do que realmente está acontecendo quando ele responde, porque essa imagem explica tudo mais: por que o prompting funciona, por que a mesma pergunta dá respostas diferentes, por que modelos inventam fatos, por que custam o que custam, e por que algumas funcionalidades são difíceis quando parecem que deveriam ser triviais. Tudo depois neste manual é consequência das ideias aqui.
O que um modelo realmente é
Remova a interface de chat e um grande modelo de linguagem é uma coisa: uma função matemática enorme, um conjunto fixo de bilhões de números chamados parâmetros (você também os ouvirá chamados de pesos). Esse é o modelo inteiro. Não é um banco de dados, não é um mecanismo de busca, não é uma pessoinha em uma caixa. É um montão muito grande de números que recebe texto como entrada e produz texto como saída.
Esses números não vieram de um programador digitando-os. Eles foram definidos durante o treinamento. O provedor alimentou o modelo com uma quantidade impressionante de texto, livros, código, artigos, páginas da web, e executou um exercício simples bilhões de vezes: esconda a próxima palavra, peça ao modelo para prever, e ajuste seus números ligeiramente sempre que ele errou. Repita isso em escala enorme e os números se acomodam lentamente em valores que são bons em prever texto. É isso que é o treinamento: ajustar bilhões de controles até que a previsão fique boa.
Duas coisas seguem disso, e explicam muito do comportamento que você encontrará depois. Primeiro, o treinamento acontece uma vez, antecipadamente, e é enormemente caro. Quando você chama o modelo, os números estão congelados. O modelo não aprende com sua conversa. Nada do que você diz muda seus parâmetros. Parece que ele se lembra e se adapta, mas essa é a software ao redor, não o modelo em si, um ponto que volta com força na seção sobre a janela de contexto.
Segundo, não há tabela de fatos dentro dele. O "conhecimento" existe como padrões incorporados nesses números, como um padeiro que fez dez mil pães tem a técnica nas mãos sem ler uma receita. O modelo aprendeu a forma do texto correto e sensato. É por isso que pode ser fluente e errado na mesma frase: está reproduzindo a forma de uma boa resposta, não lendo um fato armazenado de uma prateleira.
Prevendo o próximo token
Com esse montão de números no lugar, o modelo faz exatamente um trabalho: ele prediz o próximo pedaço de texto, repetidas vezes.
Aqui está o loop em câmera lenta. Você o alimenta com algum texto. Ele executa esse texto através de todos esses parâmetros e produz uma probabilidade para cada possível próximo pedaço 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 tudo mais quase nada.
O modelo então escolhe um pedaço, o adiciona ao texto, e executa tudo de novo para escolher o próximo. Ele repete até a resposta estar pronta.
Esse é o mecanismo inteiro. Uma resposta que você lê como um único pensamento foi construída um pedaço por vez, cada pedaço escolhido de uma classificação fresca de probabilidades, sem plano para onde a frase vai além de "o que é provável depois". Toda capacidade que você usará, chat, código, tradução, uso de ferramentas, raciocínio, é esse mesmo loop executando por baixo.
O teclado do telefone que sugere sua próxima palavra é a mesma ideia em miniatura. A diferença é os bilhões de parâmetros por trás da sugestão. Treinado em texto suficiente, "qual é o próximo pedaço mais provável" acaba sendo bom o suficiente para escrever código que funciona e explicações claras. Mas o movimento subjacente nunca muda: é previsão, não compreensão, e não procurar uma resposta armazenada.
O controle de aleatoriedade
Se o modelo sempre pegasse o pedaço de maior pontuação individual, ele lhe daria a mesma resposta para o mesmo prompt todas as vezes, e essa resposta geralmente seria plana e repetitiva. Então a maioria das vezes a escolha tem um pouco de aleatoriedade nela: geralmente leva um pedaço de alta probabilidade, mas nem sempre o muito topo. É por isso que você pode fazer a mesma pergunta duas vezes e receber duas respostas diferentes. Esse é o sistema funcionando conforme projetado, não uma falha.
Você controla quanto de aleatoriedade através de uma configuração chamada temperatura, que você define quando chama o modelo no capítulo sobre chamando modelos do código. A intuição vale a pena ter agora. Em uma temperatura baixa, o modelo fica próximo de seus melhores escolhas: focado, consistente, previsível, que é o que você quer para tirar um número de uma fatura ou classificar texto em categorias. Em uma temperatura mais alta, pedaços de menor probabilidade são escolhidos com mais frequência: mais variado e criativo, e mais propenso a vagar para algum lugar errado. Brainstorming e escrita criativa querem o final mais alto; qualquer coisa com uma resposta correta quer o final mais baixo.
Então um único controle desliza o modelo entre "cuidadoso e repetível" e "surpreendente e inventivo". É o mesmo loop de previsão de qualquer forma; a temperatura apenas muda como ousadamente o modelo alcança além de sua suposição mais segura.
Tokens
Os "pedaços" que um modelo prediz têm um nome: tokens. Um token é um pedaço de texto, geralmente uma palavra inteira, às vezes apenas parte de uma.
"tokenização" -> "token" + "ização"
"inacreditável" -> "ina" + "credit" + "ável"
"gato" -> "gato"Por que cortar texto em esses pedaços estranhos em vez de usar palavras inteiras ou letras individuais? É um trade-off. Letras individuais tornariam cada sequência enormemente longa, e o comprimento é o que o modelo tem que computar. Palavras inteiras precisariam de um vocabulário de milhões de entradas e ainda assim quebraria na primeira vez que alguém inventar uma palavra ou cometer um erro de digitação. Tokens são o caminho do meio: um vocabulário fixo de alguns poucos dezenas de milhares de pedaços comuns que podem ser encaixados para soletrar qualquer coisa, incluindo palavras que o modelo nunca viu.
Aqui está a consequência sob o capô que surpreende as pessoas. O modelo nunca vê letras. Ele vê tokens, que para ele são realmente números de ID para esses pedaços. Então tarefas que parecem effortless para nós podem ser difíceis para ele: contar as letras em uma palavra, reverter uma string, notar que "morango" tem três r's.
Não é ser fraco. Ele não percebe os caracteres individuais, como você não consegue sentir os grãos separados de farinha em um bolo pronto. Quando um modelo tropeça em uma tarefa de ortografia ou contagem de caracteres, é por isso, e a correção geralmente é fazer essa parte em código normal em vez disso.
Tokens também são a unidade de duas coisas que você se importará constantemente:
- Dinheiro: provedores cobram por token, tanto os tokens que você envia quanto os tokens que o modelo escreve de volta, então um documento longo e uma resposta longa também custam mais. Uma medida aproximada para inglês é cerca de quatro caracteres por token, ou 100 tokens para cada 75 palavras; código e outras linguagens geralmente se dividem em mais tokens, que é parte do porque podem custar mais. Você vai conhecer isso diretamente quando começar chamando modelos do código.
- Limites: há um teto em quantos tokens o modelo pode manipular de uma vez, que é a próxima seção.
A janela de contexto
A janela de contexto é quanto texto o modelo pode receber de uma vez, medido em tokens. Imagine-o como o tamanho da mesa do modelo. Tudo envolvido em uma única solicitação tem que caber nessa mesa de uma vez: suas instruções, a conversa até agora, qualquer documento que você colou, e a resposta que o modelo está escrevendo.
Por que existe um limite? Vem de como a previsão funciona. Para escolher o próximo token, o modelo pondera como cada token na entrada se relaciona com todos os outros tokens, então pode dizer que "ele" se refere ao gato três frases atrás. Essa comparação de todos-para-todos é o que permite ao modelo rastrear significado ao longo de uma passagem, e é também o que torna as entradas longas caras de processar. O provedor define um teto, a janela de contexto, para manter cada solicitação gerenciável.
Quando a mesa fica cheia, algo tem que sair. Se uma conversa fica longa o suficiente para transbordar a janela, as partes mais antigas caem e o modelo não consegue mais vê-las. É por isso que um chat longo parece "esquecer" o que você disse no início. Ele não esqueceu em nenhum sentido humano; esses tokens estão fora da mesa. Também ajuda saber que modelos tendem a prestar atenção mais próxima ao início e ao fim do que está na mesa e podem perder a noção das coisas enterradas no meio, então onde você coloca 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 solicitações separadas. Lembre que seus números estão congelados. Cada chamada começa com uma mesa em branco. O modelo não se lembra da sua pergunta anterior, seu nome, ou qualquer coisa de um minuto atrás.
Um app de chat parece uma conversa fluente apenas porque o app silenciosamente reenvia o histórico inteiro com cada nova mensagem. A continuidade é algo que o software ao redor do modelo constrói, não algo que o modelo tem.
Esse fato único molda como você construir tudo a partir daqui. Se você quer que o modelo saiba algo, você tem que colocá-lo na mesa nessa solicitação: a conversa até agora, os detalhes do usuário, os documentos relevantes, tudo, toda vez. Uma grande parte deste manual é realmente sobre fazer esse um coisa bem, colocar o texto correto na mesa.
O que o modelo não sabe
Todo o conhecimento de um modelo foi incorporado enquanto ele estava sendo treinado, então ele só sabe o que estava naquele dados de treinamento, e esses dados foram coletados até algum ponto de corte no passado. Dois limites caem direto disso.
Primeiro, ele não sabe nada que aconteceu depois do seu ponto de 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 felizmente produzir uma resposta plausível de qualquer forma. Segundo, nunca soube nada privado. Os docs internos da sua empresa, o histórico de pedidos de um usuário, os conteúdos da sua base de dados: nada disso estava no texto público em que treinou, então ele não pode saber, não importa como você pedir educadamente.
Há um limite mais silencioso também. O modelo geralmente não pode lhe dizer de onde algo que ele "sabe" veio, porque o conhecimento é misturado dentro dele em vez de ser arquivado como fatos separados e originários. Pode escrever você uma citação, mas está predizendo o que uma citação deve parecer, não procurando uma real.
Esta é a razão para uma técnica que você conhecerá depois chamada recuperação, ou RAG. Se você quer que um modelo responda sobre eventos recentes ou seus próprios dados privados, você não retreina. Você busca o texto relevante você mesmo e o coloca na mesa no tempo de solicitação, então o modelo tem os fatos em frente em vez de adivinhar. Um modelo é um raciocínio sobre o texto que você lhe dá muito mais do que um poço confiável de fatos específicos.
Por que 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 citação para um estudo que nunca foi escrito. Isso é chamado de alucinação, e depois das últimas seções deveria parecer quase inevitável em vez de misterioso.
A razão é que o modelo não tem senso interno de "verdadeiro" versus "falso". Ele só tem "texto provável" versus "texto improvável". Na maioria das vezes esses se alinham, porque no texto que aprendeu, afirmações verdadeiras são muito mais comuns que as falsas, então a continuação provável é geralmente a correta.
Mas quando o modelo atinge um espaço, algo em que nunca treinou, ou seus dados privados que nunca poderia ter visto, ele não para e sinaliza o espaço. Ele não consegue confiavelement dizer o que não sabe. Ele faz a única coisa que sempre faz: produz a continuação mais provável de soar.
Uma resposta confiante, bem-formada, errada é geralmente exatamente o que soa mais provável. O mesmo maquinário que a torna fluente a torna fluente quando está errada.
Essa é a parte para se debruçar sobre: alucinação não é um glitch que você pode totalmente afastar pelo prompt. Você pode reduzi-lo, e capítulos posteriores mostram como. Dizer ao modelo que é permitido dizer "Eu não sei" ajuda um pouco. Pedir para ele responder apenas a partir de texto que você fornece ajuda muito mais, porque agora não há espaço para preencher a partir do treinamento congelado. Mas a tendência vem do que o modelo fundamentalmente é, uma máquina de probabilidade sem um verificador de fatos dentro, então os arranjos duráveis são estruturais: dê 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.
Carregue uma regra para fora deste capítulo acima de todas as outras: a confiança de um modelo lhe 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 única pudesse estar errada, porque qualquer resposta única poderia.
Colocando junto
Tudo neste capítulo é uma ideia vista de diferentes ângulos. Um modelo é um montão fixo de números que prediz o próximo token, e quase todo comportamento com o qual você lidará cai disso:
- Ele prediz 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) significa respostas variam.
- Tokens são os pedaços com os quais trabalha: a unidade da sua conta, a unidade do seu limite de tamanho, e a razão pela qual não consegue confiavelement contar letras.
- A janela de contexto é a mesa de uma única solicitação, compartilhada por tudo, e o modelo não se lembra de nada entre solicitações, então continuidade é seu trabalho.
- Seu conhecimento é congelado em um ponto de corte de treinamento e nunca incluiu seus dados privados, que é por que você busca fatos e os coloca no prompt.
- Alucinação é o preço de um sistema que prediz texto provável sem senso de verdade, reduzido por fundamentação e verificação, nunca apenas por redação inteligente.
Mantenha isso junto e uma quantidade surpreendente de engenharia de IA acaba sendo uma tarefa em diferentes fantasias: colocar o texto correto na mesa, na forma certa, no momento certo, e nunca confiar cegamente na saída. O próximo capítulo, Modelos abertos e fechados, olha que tipos de modelos existem e como você consegue um, e então prompting é onde você começa a dirigir toda essa previsão para o que você realmente quer.

