O que é um modelo de linguagem grande? Como funcionam os LLMs, explicado sem exageros
Entenda o que realmente acontece quando uma IA escreve um texto. Aprenda sobre tokens, incorporações e atenção em linguagem simples, execute um pequeno preditor da próxima palavra e veja por que esses modelos podem ser brilhantes e errados ao mesmo tempo.
- Um modelo de linguagem grande é uma rede neural treinada em grandes quantidades de texto para prever o que vem a seguir.
- Ele funciona com tokens e usa atenção para avaliar quais tokens anteriores são mais importantes.
- Ele gera uma resposta, um token por vez, escolhendo entre um conjunto de probabilidades.
- Pode parecer confiante e ao mesmo tempo errado, portanto, resultados importantes precisam ser verificados.
Ferramentas que conversam, resumem e escrevem código parecem quase mágicas, até você ver o mecanismo por trás delas. Um modelo de linguagem grande, ou LLM, é basicamente um sistema muito sofisticado para prever o próximo trecho de texto. Essa ideia explica o que essas ferramentas fazem bem e por que falham da maneira como o fazem.
Este guia explica os conceitos principais sem qualquer matemática e, em seguida, cria um pequeno preditor da próxima palavra para tornar a ideia concreta. Executamos esse código no Python 3.13 e a saída vem dessa execução. É um simples brinquedo de contagem, em vez de uma rede neural, e os LLMs reais são muito mais capazes. Também evitamos citar números de modelos específicos, pois eles mudam rapidamente.
O que é um modelo de linguagem grande?
Um LLM é um tipo de inteligência artificial treinada para compreender e gerar a linguagem humana. Tomemos o nome uma palavra de cada vez:
- Grande: possui um grande número de valores internos ajustáveis, chamados parâmetros, e aprende com uma enorme quantidade de texto.
- Idioma: funciona com texto, incluindo linguagem natural e código.
- Modelo: é um sistema matemático que captura padrões de dados e os utiliza para fazer previsões.
Os modelos são o motor e produtos como os assistentes de chat são o carro construído em torno deles. Um produto geralmente adiciona uma interface de usuário, sistemas de segurança, pesquisa e outras ferramentas.
A ideia central: prever o que vem a seguir
Você faz isso sozinho. Se você ler “a capital da França é”, sua mente oferece “Paris” imediatamente. Um LLM faz algo comparável, mas numa escala muito maior. Dado algum texto, ele calcula a probabilidade de cada próximo token possível, escolhe um, adiciona-o ao texto e repete.
Não há banco de dados de respostas armazenadas sendo consultadas. O modelo contém padrões aprendidos durante o treinamento, na forma de números. Quando esses padrões se alinham com a verdade, você obtém uma resposta correta. Quando isso não acontece, você ainda pode obter uma resposta fluente, e essa é uma diferença importante em relação a um mecanismo de pesquisa.
Uma pequena demonstração de trabalho
Para ver a previsão do próximo token em sua forma mais simples, este script conta qual palavra segue qual em um texto minúsculo. Em seguida, ele gera um novo texto a partir dessas contagens. Os estatísticos chamam isso de modelo bigrama.
import random
from collections import Counter, defaultdict
TEXT = """the cat sat on the mat . the dog sat on the rug .
the cat saw the dog . the dog saw the cat ."""
tokens = TEXT.split()
follows = defaultdict(Counter)
for current, following in zip(tokens, tokens[1:]):
follows[current][following] += 1
def probabilities(word):
counts = follows[word]
total = sum(counts.values())
return {w: round(n / total, 2) for w, n in counts.most_common()}
print(probabilities("the"))
print(probabilities("sat"))
# {'cat': 0.38, 'dog': 0.38, 'mat': 0.12, 'rug': 0.12}
# {'on': 1.0}
Essa saída é uma distribuição de probabilidade. Depois de “o”, o modelo considera “gato” e “cachorro” os mais prováveis. Agora geramos texto amostrando repetidamente essas probabilidades:
def generate(start, length, seed):
rng = random.Random(seed)
words = [start]
for _ in range(length):
counts = follows[words[-1]]
words.append(rng.choices(list(counts), weights=counts.values())[0])
return " ".join(words)
print(generate("the", 6, seed=1))
print(generate("the", 6, seed=2))
print(generate("the", 6, seed=3))
# the cat . the cat saw the
# the rug . the cat . the
# the cat saw the dog . the
Observe três coisas. O mesmo início pode produzir textos diferentes, pois a escolha é aleatória. A saída se assemelha aos seus dados de treinamento, mesmo para sequências que nunca apareceram nela. E não tem compreensão alguma, e é por isso que “o tapete… o gato” parece um disparate.
Pergunte sobre uma palavra que ele nunca viu e que não tem nada a oferecer: follows["elephant"] está vazio. Nosso brinquedo analisa apenas uma palavra anterior. O enorme salto nos LLMs reais vem da consideração de longos trechos de contexto e do aprendizado com muito mais dados, usando uma rede neural em vez de uma simples contagem.
Tokens: como um modelo lê
LLMs não leem palavras inteiras como nós. O texto é primeiro dividido em tokens, que pode ser uma palavra, parte de uma palavra ou pontuação. Cada token é mapeado para um número e o modelo funciona inteiramente com números.
Os tokens são importantes na prática por dois motivos. O uso de modelos hospedados geralmente é cobrado por tokens, e cada modelo tem um limite de quantos pode manipular de uma vez. A tokenização também explica alguns comportamentos estranhos famosos. Como os modelos veem pedaços em vez de letras, tarefas como contar as letras de uma palavra têm sido tradicionalmente surpreendentemente difíceis para eles.
Incorporações: significado como números
Cada token é transformado em uma incorporação, uma longa lista de números que o coloca em uma espécie de espaço de significado. Conceitos relacionados acabam próximos, então “gato” e “gatinho” têm posições próximas, enquanto “gato” e “fatura” não.
A mesma ideia impulsiona a pesquisa semântica, na qual você encontra documentos pelo significado, em vez de palavras exatas. Nosso guia de banco de dados vetorial aborda esse uso.
Atenção e o transformador
A maioria dos LLMs modernos são baseados na arquitetura do transformador, apresentada por pesquisadores do Google no artigo de 2017 “Attention Is All You Need”. Seu mecanismo principal é a autoatenção.
Considere esta frase: “O troféu não cabia na mala porque era muito grande”. A que “isso” se refere? Você sabe que isso significa o troféu. A atenção permite que um modelo pese cada token anterior ao processar cada novo, para que possa vinculá-lo às palavras mais relevantes, mesmo quando elas estão distantes umas das outras.
As abordagens anteriores processavam o texto passo a passo e tendiam a perder o controle das palavras distantes. Os transformadores examinam o contexto juntos e podem executar grande parte desse trabalho em paralelo em hardware especializado, o que tornou prático o treinamento em grandes quantidades de texto.
Como um LLM é treinado
| Palco | O que acontece |
|---|---|
| Coleta de dados | Grandes quantidades de texto são reunidas e limpas |
| Pré-treino | O modelo prevê repetidamente o próximo token e seus parâmetros são alterados sempre que está errado |
| Ajuste fino | Ele aprende com exemplos de respostas úteis, com feedback humano frequentemente usado para classificar as respostas |
| Avaliação | As equipes testam-no em termos de qualidade, segurança e casos de falha |
O pré-treinamento oferece ao modelo ampla capacidade linguística, mas pode apenas continuar seu texto em vez de respondê-lo. Os estágios posteriores transformam-no em um assistente útil. O treinamento de modelos grandes exige um poder computacional substancial e é caro. Usar um modelo finalizado, conhecido como inferência, é muito mais barato por solicitação.
Como ele gera texto
- Seu prompt é dividido em tokens e convertido em embeddings.
- A rede os processa, utilizando a atenção para relacioná-los entre si.
- Ele gera uma probabilidade para cada próximo token possível.
- Um token é selecionado e adicionado ao contexto.
- As etapas 2 a 4 são repetidas até atingir uma condição de parada.
É por isso que as respostas normalmente aparecem palavra por palavra quando transmitidas. O texto está literalmente sendo produzido em sequência. A Temperatura controla o nível de aventura da etapa 4: valores baixos favorecem os tokens mais prováveis, enquanto valores mais altos permitem mais variedade.
Dica: Para extração, classificação e outras tarefas repetíveis, use uma temperatura baixa onde a configuração estiver disponível. Para brainstorming, uma configuração mais alta pode ser útil. Mesmo assim, um valor baixo não garante respostas sempre idênticas.
Termos que você cumprirá
| Prazo | Significado |
|---|---|
| Alerta | A entrada que você fornece ao modelo |
| Janela de contexto | O número máximo de tokens que pode considerar de uma vez |
| Parâmetros | Os valores internos aprendidos durante o treinamento |
| Inferência | Executando um modelo treinado para obter resultados |
| Alucinação | Saída confiável que é falsa |
| Corte de conhecimento | O ponto após o qual os dados de treinamento terminam |
| pano | Buscando documentos para fornecer contexto extra a um modelo |
| Modelo de peso aberto | Um modelo cujos parâmetros você mesmo pode baixar e executar |
Limitações que você deve conhecer
- Alucinações. Um modelo pode inventar fatos, citações ou funções de código. Por produzir texto provável, declarações falsas podem parecer completamente plausíveis.
- Corte de conhecimento. A menos que um produto o conecte à pesquisa ou a outras ferramentas, ele pode não saber sobre eventos recentes.
- Contexto limitado. Se uma conversa exceder a janela de contexto, os detalhes anteriores poderão ser eliminados ou resumidos. Os modelos também não se lembram automaticamente de bate-papos anteriores, a menos que um produto adicione esse recurso.
- Preconceito. Os dados de treinamento refletem preconceitos humanos, e eles podem aparecer nos resultados.
- Inconsistência. A mesma pergunta pode produzir respostas diferentes, o que é importante quando você cria software sobre uma delas.
- Riscos de segurança. Instruções ocultas no texto podem manipular um modelo, um problema conhecido como injeção imediata.
Usando bem os LLMs
Trate um LLM como um assistente rápido e capaz, cujo trabalho precisa ser revisado. Alguns hábitos fazem uma grande diferença:
- Seja específico. Instruções claras, contexto e exemplos proporcionam melhores resultados. Nosso guia de engenharia imediata mostra como.
- Forneça os fatos. Quando as respostas precisarem vir de seus próprios documentos, use RAG em vez de confiar na memória.
- Verifique o que é importante. Verifique números, citações e reivindicações legais ou médicas em fontes confiáveis.
- Teste o código gerado. Execute-o e escreva testes para ele, como faria para o de um colega. Nosso guia de ferramentas de revisão de código de IA oferece alguma assistência.
- Proteja dados confidenciais. Verifique as regras da sua organização antes de compartilhar informações confidenciais com uma ferramenta hospedada.
Se você está decidindo como personalizar um modelo para seu próprio trabalho, nossa comparação entre RAG vs ajuste fino vs engenharia imediata irá ajudá-lo a escolher.
Considerações finais
Um LLM é um preditor de próximo token treinado em uma escala extraordinária e é mais útil e mais falível do que a descrição sugere. Manter o mecanismo em mente ajuda você a usá-lo bem: ele é forte com linguagem e padrões e precisa de sua supervisão sobre os fatos. Para tornar isso concreto, execute o pequeno script acima com seu próprio texto, depois tente o mesmo prompt várias vezes em um assistente real e compare as respostas.
Perguntas frequentes
O que é um grande modelo de linguagem em termos simples?
É um sistema de IA treinado em grandes quantidades de texto para prever o que vem a seguir. Ao repetir essa previsão, ele pode responder perguntas, escrever e resumir.
Qual é a diferença entre IA e um LLM?
IA é o amplo campo de construção de sistemas inteligentes. Um LLM é um tipo específico de modelo de IA, focado no processamento e geração de linguagem.
Os LLMs entendem o que dizem?
Isso é debatido. Eles capturam padrões ricos de significado e podem raciocinar sobre muitos problemas, mas não vivenciam o mundo e podem falhar de maneiras que uma pessoa não faria.
Por que os LLMs inventam coisas?
Eles geram textos prováveis em vez de recuperar fatos verificados. Quando os padrões apontam para uma resposta plausível, mas falsa, o modelo pode afirmá-la com aparente confiança.
O que é um token em um LLM?
Um token é um pedaço de texto que o modelo processa, como uma palavra, parte de uma palavra ou pontuação. Limites e preços são frequentemente medidos em tokens.
Continue aprendendo
Precisa de ajuda com testes, WordPress ou SEO?
Ajudamos as equipes a fornecer software melhor e a expandir seus sites. Conte-nos no que você está trabalhando e sugeriremos um próximo passo claro.
Mais guias sobre testes, IA e desenvolvimento moderno
Gostou deste artigo? Escolha um tópico e vá direto para nossos tutoriais mais recentes.
Explicação das alucinações de IA: por que os modelos de linguagem inventam as coisas e como reduzi-las
Explicação das alucinações de IA: o que são, por que os modelos de linguagem as produzem, tipos comuns, como reduzi-las com aterramento e instruções…
Leia o artigo →DevOpsVariáveis de ambiente explicadas: arquivos .env, segredos e configuração bem feitos
Variáveis de ambiente explicadas com exemplos de Python que executamos: leitura e configuração, por que cada valor é uma string, arquivos .env, hera…
Leia o artigo →Desenvolvimento de softwareExplicação da limitação de taxa de API: algoritmos, cabeçalhos e tratamento de erros 429
Limitação de taxa de API explicada com uma simulação que executamos: token bucket, janela fixa, janela deslizante, 429 respostas, cabeçalhos de limi…
Leia o artigo →Automação de testesZombando em Python: unittest.mock, patch e os erros que fazem os testes mentirem
Zombaria em Python com unittest.mock, testado: Mock e return_value, side_effect, patch onde um nome é usado, especificação e autospec, zombaria de d…
Leia o artigo →Teste de softwareCobertura de código explicada: cobertura de linha versus filial e o que 100% realmente significa
Cobertura de código explicada com uma execução cobertura.py real: cobertura de linha, ramal e condição, leitura de um relatório, por que 100% de cob…
Leia o artigo →Bancos de dados e SQLDELETE vs TRUNCATE vs DROP em SQL: diferenças, reversão e quando usar cada um
DELETE vs TRUNCATE vs DROP explicado com SQL testado: o que cada um remove, rollback, aciona, redefinição de identidade, velocidade e como PostgreSQ…
Leia o artigo →Bancos de dados e SQLExibições SQL explicadas: crie, use e evite as armadilhas, com exemplos
Visualizações SQL explicadas com consultas que executamos: criação de uma visualização, resultados ao vivo, ocultação de colunas, desempenho, visual…
Leia o artigo →Desenvolvimento de softwareInterface TypeScript vs tipo: diferenças reais, testadas com o compilador
Interface TypeScript versus tipo, verificada com o compilador real: o que ambos podem fazer, o que apenas um pode fazer, mesclagem de declarações, e…
Leia o artigo →Desenvolvimento de softwarePython *args e **kwargs explicados: funções flexíveis com exemplos claros
Python *args e **kwargs explicados com o código que executamos: empacotamento e descompactação, ordem dos parâmetros, argumentos somente de palavras…
Leia o artigo →Desenvolvimento de softwareFunções Python Lambda: sintaxe, usos reais e quando não usá-los
Funções lambda do Python explicadas com o código que executamos: sintaxe, classificação com chave, mapa e filtro, fechamentos, armadilha de ligação …
Leia o artigo →Inteligência artificialO que são agentes de IA? Como eles funcionam, com um loop de agente simples que você pode executar
O que são agentes de IA? Um guia simples para o loop do agente, ferramentas, memória e proteções, com um pequeno loop Python que executamos, riscos …
Leia o artigo →DevOpsMonitoramento versus observabilidade: a verdadeira diferença, com logs, métricas e rastreamentos
Explicação do monitoramento versus observabilidade: falhas conhecidas e desconhecidas, logs, métricas e rastreamentos, um passo a passo do incidente…
Leia o artigo →DevOpsDocker Volumes vs Bind Mounts: persista os dados do contêiner da maneira certa
Volumes Docker versus montagens de ligação explicadas: por que os dados do contêiner desaparecem, volumes nomeados, montagens de ligação, tmpfs, exe…
Leia o artigo →Automação de testesTDD vs BDD: principais diferenças, um recurso criado de ambas as maneiras e quando usar cada um
TDD vs BDD explicado com um recurso de desconto construído em ambos os sentidos: refatoração vermelho-verde com o código que executamos, cenários da…
Leia o artigo →Teste de softwareTeste de aceitação do usuário (UAT): processo, lista de verificação e exemplos reais
Explicação do teste de aceitação do usuário: quem o executa, como ele difere do controle de qualidade, um processo de sete etapas, um modelo de caso…
Leia o artigo →Bancos de dados e SQLValores SQL NULL explicados: IS NULL, COALESCE, NULLIF e as armadilhas a serem evitadas
Valores SQL NULL explicados com consultas que executamos: lógica de três valores, IS NULL, COALESCE, NULLIF, como agregações, junções e classificaçã…
Leia o artigo →Bancos de dados e SQLInstrução SQL CASE WHEN: sintaxe, exemplos reais e erros comuns
SQL CASE WHEN explicado com consultas que executamos: formulários simples e pesquisados, ordem de condição, pivôs com SUM, truques COUNT, classifica…
Leia o artigo →Desenvolvimento de softwareO que é JWT? JSON Web Tokens explicados com um exemplo prático
O que é JWT? JSON Web Tokens explicados: as três partes, um token construído e adulterado no código que executamos, JWT vs sessões, armazenamento, t…
Leia o artigo →Desenvolvimento de softwareLoop de eventos JavaScript explicado: pilha de chamadas, microtarefas e temporizadores com exemplos
O loop de eventos JavaScript explicado com o código que executamos: pilha de chamadas, filas de tarefas e microtarefas, por que setTimeout 0 não é i…
Leia o artigo →Desenvolvimento de softwareGeradores Python e rendimento explicado: economize memória com exemplos reais
Geradores Python e rendimento explicados com o código que executamos: como eles pausam e reiniciam, medem economia de memória, pipelines, sequências…
Leia o artigo →Inteligência artificialO que são incorporações? Similaridade de vetores e cossenos explicada de forma simples
O que são incorporações? Um guia em linguagem simples para vetores, similaridade de cossenos e pesquisa semântica, com um pequeno exemplo que execut…
Leia o artigo →DevOpsImplantação azul-verde vs canário: diferenças, compensações e como escolher
Explicação da implantação azul-verde versus canário: como cada um funciona, custo, risco e reversão, agrupamento estável de usuários que testamos, m…
Leia o artigo →Automação de testesTestes instáveis: o que os causa e como corrigi-los para sempre
Testes instáveis explicados com demonstrações que executamos: as principais causas, como confirmar e diagnosticar uma, soluções adequadas para tempo…
Leia o artigo →Teste de softwareTeste de carga versus teste de estresse: diferenças, métricas e exemplos k6
Teste de carga versus teste de estresse explicado: o que cada um prova, testes de pico e absorção, as métricas que importam, por que as médias engan…
Leia o artigo →Teste de softwareCaso de teste versus cenário de teste: principais diferenças, exemplos e quando usar cada um
Caso de teste vs cenário de teste explicado: definições claras, uma tabela lado a lado, um recurso de redefinição de senha retirado de cenários para…
Leia o artigo →Bancos de dados e SQLOtimização de consultas SQL: leia planos de execução e corrija consultas lentas, com intervalos
Otimização de consulta SQL testada em um milhão de linhas: leia planos de execução, adicione os índices corretos, corrija filtros não sargáveis, use…
Leia o artigo →Bancos de dados e SQLSQL UNION vs UNION ALL: diferenças, exemplos e desempenho testado
SQL UNION vs UNION ALL explicado com consultas que executamos: duplicatas, as regras que ambos seguem, um bug de dados real, desempenho medido, INTE…
Leia o artigo →Desenvolvimento de softwareTutorial da API JavaScript Fetch: GET, POST, tratamento de erros e tempos limite
Um tutorial da API JavaScript Fetch testado em um servidor local: GET e POST, por que 404 não lança, um auxiliar reutilizável, strings de consulta, …
Leia o artigo →Desenvolvimento de softwareManipulação de arquivos Python: leitura, gravação, CSV, JSON e pathlib com exemplos
Manipulação de arquivos Python explicada com código que executamos: modos abertos, com, leitura de arquivos grandes, CSV, JSON, pathlib, arquivos bi…
Leia o artigo →Desenvolvimento de softwareClasses e objetos Python: tutorial OOP com exemplos reais
Classes e objetos Python explicados com código que executamos: __init__, métodos, atributos de classe vs instância, herança, propriedades, métodos d…
Leia o artigo →Inteligência artificialO que é um modelo de linguagem grande? Como funcionam os LLMs, explicado sem exageros
O que é um modelo de linguagem grande? LLMs explicados em linguagem simples: tokens, incorporações, atenção, treinamento, temperatura e janelas de c…
Leia o artigo →DevOpsComandos Linux para iniciantes: o guia essencial do terminal com exemplos
Comandos Linux para iniciantes, agrupados por tarefa: navegação, arquivos, visualização de logs, grep, pipes, permissões, processos e arquivos, com …
Leia o artigo →Automação de testesSelenium vs Playwright: principais diferenças, código comparado e qual escolher
Selenium vs Playwright comparado: arquitetura, espera, suporte a navegador e linguagem, depuração, o mesmo teste em ambas as ferramentas, conselhos …
Leia o artigo →Teste de softwareParticionamento de equivalência: técnica de design de teste explicada com exemplos resolvidos
Explicação do particionamento de equivalência: como encontrar partições válidas e inválidas, exemplos resolvidos para idades, senhas e cupons, teste…
Leia o artigo →Teste de softwareGravidade vs Prioridade em Testes de Software: Diferenças, Matriz e Exemplos Reais
Explicação da gravidade versus prioridade em testes de software: definições claras, uma matriz de quatro vias com exemplos, escalas de nível, quem d…
Leia o artigo →Bancos de dados e SQLTutorial de subconsultas SQL: tipos, subconsultas correlacionadas e EXISTS com exemplos
Um tutorial de subconsultas SQL com consultas que executamos: subconsultas escalares, IN, FROM e SELECT, subconsultas correlacionadas, EXISTS, a arm…
Leia o artigo →Bancos de dados e SQLTransações SQL e ACID explicados: COMMIT, ROLLBACK e níveis de isolamento
Transações SQL e ACID explicadas com uma transferência bancária que executamos: COMMIT, ROLLBACK, savepoints, locks, níveis de isolamento, leituras …
Leia o artigo →Desenvolvimento de softwareGit merge vs rebase: diferenças, exemplos e quando usar cada um
Git merge vs rebase explicado com saída real do log, uma tabela comparativa, a regra de ouro do rebase e um fluxo de trabalho seguro para equipes.
Leia o artigo →Desenvolvimento de softwareList comprehension em Python: sintaxe, exemplos e quando evitar
List comprehension em Python explicada: sintaxe, filtros, if-else, laços aninhados, tempos medidos e quando um laço for comum é a melhor escolha.
Leia o artigo →Bancos de dados e SQLSQL JOIN explicado com exemplos (Inner, Left, Right, Full)
Entenda os joins SQL passo a passo com tabelas e consultas de exemplo: INNER, LEFT, RIGHT, FULL, CROSS e SELF, além de erros comuns e dicas de desem…
Leia o artigo →