Como funciona uma LLM?
Entender como funciona uma LLM deixou de ser curiosidade acadêmica e virou conhecimento básico para quem desenvolve software. Neste artigo, você acompanha o caminho completo de um texto dentro do modelo, do tokenizador até a escolha da próxima palavra.
Além disso, você vê como o treinamento transforma uma rede neural em um assistente útil e quais limites técnicos explicam o custo e o comportamento desses modelos.
Se quiser aplicar esses conceitos na construção de agentes com .NET, conheça a Imersão Microsoft Agent Framework.
O que é uma LLM e como ela funciona
Uma LLM (Large Language Model) é um modelo de aprendizado de máquina treinado sobre enormes volumes de texto para aprender padrões estatísticos da linguagem humana. Em outras palavras, ela é uma rede neural que aprendeu, a partir de exemplos, quais sequências de texto costumam aparecer juntas.
O objetivo central de uma LLM é prever qual token (palavra ou fragmento de palavra) deve vir a seguir em uma sequência, dado o contexto anterior. Portanto, toda a resposta que você lê em um chat nasce de uma sucessão de previsões, uma de cada vez.
A documentação da Microsoft resume bem essa ideia: no fundo, uma LLM é formada por dois elementos. Primeiro, os pesos do modelo, que são bilhões de parâmetros numéricos aprendidos no treinamento; depois, o código da arquitetura, quase sempre um Transformer, que executa esses pesos.
Se você ainda está começando no assunto, vale ler antes o artigo sobre conceitos fundamentais de inteligência artificial. Assim, os termos das próximas seções ficam mais familiares.
Versão em vídeo
Se preferir acompanhar a explicação em vídeo, o conteúdo completo também está disponível no canal do balta.io.
Tokens: a unidade básica de processamento
Antes de qualquer coisa, o texto precisa virar tokens. Um token não é necessariamente uma palavra completa, porque ele pode ser um prefixo, um sufixo ou até um único caractere.
Esse processo fica a cargo de um tokenizador, que mapeia cada fragmento de texto para um índice numérico em um vocabulário fixo. Na prática, o modelo nunca vê texto diretamente, já que ele recebe apenas sequências de números inteiros.
Assim funciona uma LLM desde o primeiro passo: com números, e não com letras.
Os modelos GPT, por exemplo, usam uma tokenização por subpalavras chamada Byte-Pair Encoding (BPE). Com isso, palavras raras se dividem em pedaços conhecidos, enquanto palavras frequentes costumam ocupar um único token.
Essa escolha tem consequências diretas para quem paga a conta. Afinal, o preço das APIs, o tamanho da janela de contexto e o limite de resposta são todos medidos em tokens, e não em palavras.
Contando tokens no .NET
No ecossistema .NET, a biblioteca Microsoft.ML.Tokenizers permite enxergar exatamente o que o modelo recebe. O exemplo abaixo usa o tokenizador Tiktoken, o mesmo esquema adotado pelos modelos da OpenAI.
using Microsoft.ML.Tokenizers;
// Cria o tokenizador compatível com o modelo informado
Tokenizer tokenizer = TiktokenTokenizer.CreateForModel("gpt-4");
string text = "Hello, World!";
// Converte o texto em IDs numéricos do vocabulário
IReadOnlyList<int> ids = tokenizer.EncodeToIds(text);
Console.WriteLine($"Ids: {string.Join(", ", ids)}");
// Ids: 9906, 11, 4435, 0
// Mostra cada token e o seu ID
IReadOnlyList<EncodedToken> tokens = tokenizer.EncodeToTokens(text, out _);
foreach (EncodedToken token in tokens)
Console.WriteLine($"'{token.Value}' => {token.Id}");
// Conta os tokens, útil para estimar custo e respeitar limites
Console.WriteLine($"Count: {tokenizer.CountTokens(text)}");
Repare que o texto "Hello, World!" vira quatro tokens: Hello, ,, World e !. Além disso, o espaço antes de "World" faz parte do token, o que mostra que a tokenização nem sempre se alinha às palavras.
Embeddings: representando significado em vetores
Em seguida, cada token se transforma em um vetor de alta dimensão chamado embedding. Esse vetor captura relações semânticas, de modo que tokens com significados parecidos ficam próximos no espaço vetorial.
O modelo aprende os embeddings durante o treinamento, e eles representam a "compreensão inicial" de cada token isoladamente. Ou seja, nesse ponto o vetor de "banco" ainda não sabe se a frase fala de dinheiro ou de uma praça.
Nessa etapa, a LLM funciona como um grande dicionário numérico de significados.
Essa mesma ideia sustenta técnicas como busca semântica e RAG. Se quiser ver essa aplicação, o artigo o que é RAG mostra como embeddings ajudam o modelo a consultar seus próprios dados.
A arquitetura Transformer por trás de como funciona uma LLM
A grande maioria das LLMs modernas usa a arquitetura Transformer, apresentada no artigo Attention Is All You Need, de 2017. Por isso, conhecer o Transformer é o passo central para entender como funciona uma LLM.
O Transformer processa toda a sequência de tokens em paralelo. Por outro lado, arquiteturas anteriores como RNNs e LSTMs liam token por token, de forma sequencial.
Segundo o próprio artigo original, essa mudança tornou o treinamento muito mais paralelizável. Por exemplo, os autores alcançaram 41,8 de BLEU na tradução de inglês para francês após treinar por 3,5 dias em oito GPUs.
Esse ganho de paralelismo explica boa parte da explosão de tamanho dos modelos nos anos seguintes. Afinal, quando o treinamento aproveita bem o hardware, fica viável alimentar a rede com muito mais dados.
Mecanismo de atenção: o centro de como funciona uma LLM
O coração do Transformer é o mecanismo de self-attention. Para cada token da sequência, o modelo calcula quanta "atenção" deve dar a cada outro token ao produzir a sua representação.
Esse mecanismo usa três matrizes aprendidas: Query (Q), Key (K) e Value (V). A fórmula básica fica assim:
Attention(Q, K, V) = softmax(QKᵀ / √d_k) · V
De forma intuitiva, a Query representa o que um token procura, a Key representa o que cada token oferece e o Value carrega a informação em si. Então, o produto entre Q e K mede a afinidade entre pares de tokens.
A divisão por √d_k estabiliza os valores antes do softmax, enquanto o softmax converte as afinidades em pesos que somam 1. Por fim, esses pesos combinam os vetores V.
O resultado é uma representação contextualizada de cada token, que leva em conta toda a sequência ao redor dele. Assim, o vetor de "banco" passa a carregar o sentido correto quando a frase cita "saldo" ou "jardim".
Quem quer entender como funciona uma LLM precisa guardar esta ideia: o significado de cada token depende dos outros tokens da frase. Portanto, a atenção é o mecanismo que resolve a ambiguidade da linguagem.
Multi-head attention
Em vez de calcular a atenção uma única vez, o Transformer executa várias cabeças de atenção em paralelo. Cada cabeça aprende a observar um tipo diferente de relação entre os tokens.
Uma cabeça pode aprender relações sintáticas, outra semânticas e outra de correferência, como ligar um pronome ao substantivo certo. Depois, o modelo concatena as saídas e as projeta de volta para a dimensão original.
Assim, a LLM funciona com vários olhares simultâneos sobre a mesma frase.
Camadas feed-forward
Após o bloco de atenção, cada token passa por uma rede feed-forward (FFN), aplicada de forma independente e idêntica a cada posição. Enquanto a atenção mistura informação entre tokens, a FFN trabalha cada token isoladamente.
Essa camada cuida das transformações não lineares que permitem ao modelo aprender representações mais complexas e compostas. Além disso, boa parte dos parâmetros de um Transformer vive justamente nessas camadas.
Um modelo real empilha dezenas desses blocos de atenção e feed-forward. Dessa forma, a LLM funciona como uma linha de montagem, e cada camada refina a representação da anterior.
Positional encoding
Como o Transformer processa todos os tokens em paralelo, ele não tem noção de ordem por padrão. Para resolver isso, a arquitetura soma um positional encoding ao embedding de cada token.
Esse encoding pode ser fixo, baseado em funções senoidais como no artigo original, ou aprendido durante o treinamento, dependendo da implementação. Sem ele, as frases "o cão mordeu o homem" e "o homem mordeu o cão" teriam a mesma representação.
Por isso, uma LLM só funciona bem quando conhece a posição de cada token.
Decoder vs. Encoder
Existem três famílias principais de arquitetura baseada em Transformer. Cada uma combina os blocos de forma diferente e, por isso, atende a tarefas distintas.
Encoder-only (como BERT): lê a sequência inteira nas duas direções. Por isso, funciona bem em tarefas de classificação e extração de informação.
Decoder-only (como GPT e a família de modelos modernos): gera texto de forma autorregressiva, token a token, olhando apenas para os tokens anteriores. É o formato mais comum nas LLMs generativas.
Encoder-Decoder (como T5 e BART): combina os dois blocos. Nesse caso, ele se destaca em tarefas seq2seq, como tradução e sumarização.
Para um mergulho específico na família GPT, o artigo o que é um GPT e como sua arquitetura funciona detalha o modelo decoder-only.
Geração autorregressiva: como funciona uma LLM ao responder
Em modelos decoder-only, a geração acontece em um loop. O modelo recebe uma sequência de entrada, produz uma distribuição de probabilidade sobre o vocabulário inteiro e seleciona o próximo token.
Em seguida, o modelo concatena esse token à sequência original e repete o processo. O ciclo só termina quando surge um token de fim de sequência ou quando a geração atinge o limite de contexto.
Essa é a forma mais direta de explicar como funciona uma LLM em um chat: ela funciona como um autocompletar muito sofisticado. Por isso, as respostas aparecem aos poucos na tela, já que cada token depende de todos os anteriores.
Durante o treinamento, porém, o modelo conhece a sequência completa. Mesmo assim, uma máscara impede que ele olhe para os tokens futuros, e o erro entre a previsão e o token real orienta o ajuste dos pesos.
Sampling e temperatura
A forma de escolher o próximo token a partir da distribuição de probabilidades define o comportamento da geração. Em outras palavras, o mesmo modelo pode soar previsível ou criativo conforme essa configuração.
Aqui, a LLM funciona como um sorteio ponderado, e não como uma tabela fixa de respostas.
Com temperatura baixa, próxima de 0, o modelo se torna determinístico e conservador. Com temperatura alta, a distribuição fica mais suave e respostas mais criativas e variadas emergem.
Além da temperatura, técnicas como top-k sampling e nucleus sampling (top-p) limitam o espaço de busca aos tokens mais prováveis. Assim, o modelo evita escolher palavras absurdas mesmo quando a temperatura está alta.
Simulando a temperatura em C#
O código abaixo aplica o softmax com temperatura a um conjunto fictício de pontuações (logits). Dessa forma, você vê na prática o efeito do parâmetro sobre as probabilidades.
// Pontuações brutas (logits) que o modelo atribuiu a quatro tokens candidatos
string[] candidates = ["code", "coffee", "cloud", "cat"];
double[] logits = [4.0, 3.0, 2.0, 0.5];
foreach (double temperature in new[] { 0.2, 1.0, 2.0 })
{
double[] probabilities = Softmax(logits, temperature);
Console.WriteLine($"Temperature {temperature}:");
for (int i = 0; i < candidates.Length; i++)
Console.WriteLine($" {candidates[i],-7} {probabilities[i]:P1}");
}
static double[] Softmax(double[] values, double temperature)
{
// Divide cada logit pela temperatura antes de normalizar
double[] scaled = values.Select(v => v / temperature).ToArray();
double max = scaled.Max();
// Subtrair o maior valor evita overflow no Math.Exp
double[] exps = scaled.Select(v => Math.Exp(v - max)).ToArray();
double sum = exps.Sum();
return exps.Select(e => e / sum).ToArray();
}
Com temperatura 0,2, o token "code" concentra quase toda a probabilidade. Por outro lado, com temperatura 2,0 as chances se aproximam e o sorteio passa a escolher outros candidatos com frequência.
Como funciona uma LLM no pré-treinamento
O pré-treinamento é a fase em que o modelo aprende a linguagem em si. Nela, a rede lê trilhões de tokens de texto e ajusta os pesos para minimizar o erro de predição do próximo token via gradient descent.
Nessa fase, o algoritmo de backpropagation, combinado com otimizadores como Adam, ajusta iterativamente bilhões de parâmetros. Portanto, essa é a etapa mais cara de todo o ciclo, tanto em dados quanto em computação.
O resultado do pré-treinamento é um modelo base. Ele já sabe completar textos com fluência, mas ainda não segue instruções nem conversa como um assistente.
Esse detalhe esclarece um ponto importante sobre como funciona uma LLM: o conhecimento vem do pré-treinamento, enquanto o comportamento de assistente vem das etapas seguintes.
Fine-tuning e RLHF
Após o pré-treinamento, o modelo passa por ajustes para se tornar mais útil e seguro. O processo mais comum envolve três etapas:
Supervised Fine-Tuning (SFT): o modelo aprende com exemplos de diálogo de alta qualidade escritos por humanos.
Reward Model: um modelo de recompensa aprende a pontuar respostas com base nas preferências de avaliadores humanos.
RLHF (Reinforcement Learning from Human Feedback): o modelo otimiza o próprio comportamento usando o reward model como sinal de recompensa, via PPO (Proximal Policy Optimization) ou algoritmos similares.
Depois dessas etapas, a LLM funciona como um assistente que segue instruções.
Esse fluxo ficou conhecido com o trabalho da OpenAI sobre o InstructGPT. Nele, avaliadores preferiram as respostas de um modelo de 1,3 bilhão de parâmetros ajustado com RLHF às do GPT-3 original, com 175 bilhões.
Em outras palavras, o alinhamento com preferências humanas pesa tanto quanto o tamanho bruto do modelo. Então, um modelo menor e bem ajustado pode entregar respostas mais úteis do que um gigante sem esse refinamento.
Como funciona uma LLM com a janela de contexto
O contexto é o conjunto de tokens que o modelo consegue "ver" ao gerar uma resposta. Modelos modernos suportam janelas de dezenas ou centenas de milhares de tokens.
Quanto maior a janela, maior a capacidade do modelo de manter coerência em documentos longos. No entanto, o custo computacional também cresce, e no mecanismo de atenção ele aumenta de forma quadrática com o tamanho da sequência.
Na prática, isso significa que cada mensagem de um chat reenvia o histórico da conversa. Por isso, conversas longas consomem mais tokens, custam mais e deixam menos espaço para a resposta.
Esse é um dos motivos pelos quais saber como funciona uma LLM ajuda a escrever aplicações melhores. Afinal, quem conhece o limite de contexto planeja resumos, recortes de histórico e recuperação de documentos com antecedência.
Parâmetros e escala
Os parâmetros são os pesos aprendidos durante o treinamento e vivem nas matrizes de atenção e nas camadas feed-forward. Modelos modernos possuem bilhões ou até trilhões de parâmetros.
A hipótese de escala, descrita no estudo Scaling Laws for Neural Language Models, mostrou que a performance melhora de forma previsível com mais dados, mais parâmetros e mais computação. Além disso, os autores observaram que essa relação segue leis de potência ao longo de várias ordens de grandeza.
Essa descoberta orientou anos de investimento em modelos cada vez maiores. Ao mesmo tempo, ela explica por que treinar uma LLM de ponta exige data centers inteiros de GPUs.
Mesmo assim, uma LLM pequena funciona com a mesma lógica de uma gigante, e só a capacidade muda.
O que levar sobre como funciona uma LLM
Uma LLM não "entende" o mundo da forma como humanos entendem. Na verdade, ela aprende a modelar distribuições de probabilidade sobre sequências de texto com uma fidelidade extraordinária.
O resultado prático, porém, é um sistema capaz de raciocinar, escrever código, traduzir, resumir e responder perguntas com qualidade comparável ou superior à humana em muitos domínios.
Resumindo como funciona uma LLM: o tokenizador converte o texto em números, os embeddings dão significado inicial, a atenção adiciona contexto e o loop autorregressivo gera a resposta. Por fim, o pré-treinamento e o RLHF definem o que o modelo sabe e como ele se comporta.
Com essa base, fica muito mais simples avaliar custos, escolher a temperatura certa e projetar agentes. Se esse é o seu próximo passo, o artigo sobre o Microsoft Agent Framework mostra como colocar esses modelos para trabalhar em aplicações .NET.
FAQ
Uma LLM entende o que está escrevendo?
Não da forma humana. Ela modela probabilidades sobre sequências de tokens, e o comportamento inteligente surge dessa modelagem em grande escala.
Qual a diferença entre token e palavra?
Um token é a unidade que o tokenizador produz e pode ser uma palavra inteira, parte dela ou um sinal de pontuação. Por isso, um texto quase sempre tem mais tokens do que palavras.
Por que a mesma pergunta gera respostas diferentes?
Porque a escolha do próximo token envolve sorteio controlado pela temperatura, pelo top-k e pelo top-p. Com temperatura próxima de zero, as respostas ficam mais estáveis.
O que é RLHF em poucas palavras?
É o ajuste fino com aprendizado por reforço, guiado por um modelo de recompensa treinado com preferências humanas. Ele transforma o modelo base em um assistente útil.
Por que janelas de contexto grandes custam mais?
Porque o cálculo da atenção compara cada token com todos os outros, e esse custo cresce de forma quadrática com o tamanho da sequência.