Menu

Alucinação de IA: por que os LLMs inventam coisas

Uma alucinação de IA é uma resposta confiante e falsa: um fato, uma citação, uma função ou um pacote inventado. Ela acontece porque um modelo de linguagem prevê o texto provável em vez de consultar algo. Prompts podem reduzi-la; só a verificação a pega.

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

Uma alucinação de IA é uma resposta que soa certa e é falsa: um fato inventado, uma citação de um artigo que não existe, uma função que uma biblioteca nunca teve. Todo modelo de chat faz isso, incluindo o ChatGPT, o Claude e o Gemini. Não é um bug que vai ser corrigido em uma atualização; é consequência de como os modelos de linguagem produzem texto. Os prompts podem deixar as alucinações mais raras, e só a verificação pega as que sobram.

Por que os modelos de linguagem alucinam

Um modelo de linguagem escreve um token por vez, cada um escolhido por ser provável depois do texto até ali. Provável considerando tudo o que o modelo viu no treinamento. Nada nesse processo consulta um fato. Quando a resposta era comum nos dados de treinamento, a continuação provável costuma ser a verdadeira. Quando ela era rara, recente ou nunca esteve lá, o modelo ainda produz a continuação mais plausível, e um texto plausível sobre um fato que ele não tem é uma alucinação.

Alguns tipos de pergunta são mais expostos do que outros:

  • Detalhes específicos: números exatos, datas, nomes, números de versão, referências de página. A forma da resposta é fácil de prever; o detalhe, não.
  • Citações e links. Uma referência tem um formato previsível (autores, ano, título, revista), então um modelo consegue produzir uma bem formatada para um artigo que nunca foi escrito.
  • Assuntos raros ou recentes: uma biblioteca pequena, uma norma local, qualquer coisa posterior ao fim dos dados de treinamento do modelo.
  • Perguntas com premissa falsa. Pergunte o que uma função faz e o modelo tende a responder como se a função existisse.

Fluência não é sinal de precisão. Uma resposta alucinada tem o mesmo tom confiante, a mesma formatação e o mesmo nível de detalhe de uma correta, e é por isso que ela passa despercebida com facilidade.

A armadilha da premissa falsa

As abas abaixo perguntam sobre DataFrame.smart_merge() no pandas. Esse método não existe. A primeira pergunta pressupõe que ele existe; a segunda permite que o modelo diga que não.

O que o DataFrame.smart_merge() faz no pandas, e quando devo usá-lo em vez do merge()?
Try it
Example replyReplies vary between models and runs.

O DataFrame.smart_merge() junta dois DataFrames e detecta as chaves de junção para você, comparando nomes de colunas e tipos de dados. Use quando os seus DataFrames compartilham colunas-chave com nomes um pouco diferentes, por exemplo user_id e userId, já que ele consegue casá-las automaticamente.

Para ter controle total sobre as chaves e o tipo de junção, o merge() continua sendo a melhor escolha.

A primeira resposta é uma alucinação feita de partes reais: o pandas junta DataFrames, e casar chaves automaticamente é algo razoável de querer. A pergunta forneceu a premissa e o modelo forneceu uma função plausível para encaixar nela. Os modelos atuais pegam premissas falsas com mais frequência do que os antigos, mas uma pergunta formulada como pressuposição ainda empurra a resposta para a concordância.

O segundo prompt fez duas coisas. Perguntou se o método existe antes de perguntar o que ele faz e deu permissão explícita para ter dúvida. A resposta ainda devolveu um jeito de conferir, que é o hábito a manter: o hasattr verifica a biblioteca real em uma linha.

Responda a partir da fonte, com citações

O jeito mais forte de reduzir a alucinação é colocar os fatos no prompt. Quando a resposta está em um texto que o modelo consegue ver, ele não precisa se lembrar de nada, e você pode conferir cada afirmação com esse texto. Pedir uma citação que sustente cada afirmação deixa a conferência rápida, e dizer ao modelo o que falar quando o documento não disser nada diminui a chance de ele preencher a lacuna com um palpite.

Responder só a partir do documento
Fill in
Parts
Responda à pergunta usando só o documento abaixo.
<documento> Os backups rodam toda noite às 02:00 UTC e são mantidos por 30 dias. Os backups do banco de staging são mantidos por 7 dias. As restaurações são pedidas no canal #ops e normalmente são concluídas em até quatro horas. </documento> Pergunta: Por quanto tempo os backups de produção são mantidos, e posso restaurar um sozinho?
Para cada parte da pergunta: a resposta e depois, entre aspas, a frase exata do documento que a sustenta.
Se o documento não responder a uma parte, escreva "Não está no documento" para essa parte. Não acrescente fatos de conhecimento geral.
Try it
Example replyReplies vary between models and runs.

Por quanto tempo os backups de produção são mantidos: 30 dias. O documento dá 30 dias para os backups em geral e 7 dias só para staging. "Os backups rodam toda noite às 02:00 UTC e são mantidos por 30 dias."

Posso restaurar um sozinho: Não está no documento. Ele só diz como as restaurações são pedidas: "As restaurações são pedidas no canal #ops e normalmente são concluídas em até quatro horas." Isso sugere que outra equipe faz as restaurações, mas o documento não diz se existe restauração por conta própria.

Veja como a resposta tratou a segunda pergunta. Um modelo respondendo com conhecimento geral poderia ter descrito um comando de restauração. Limitado ao documento, ele separou o que o texto diz do que o texto só sugere. Desligue a parte de restrições e pergunte de novo para ver se a resposta continua separando as duas coisas.

As tags <documento> mantêm o material de origem separado das suas instruções; delimitadores e tags XML explica por que isso importa, e engenharia de contexto mostra como fornecer os documentos certos aos modelos em escala. A mesma ideia está por trás dos apps de chat com busca na web ou upload de arquivos: a resposta só é tão fundamentada quanto as fontes que estão na conversa, então leia a fonte citada, e não só o resumo dela.

Outros hábitos de prompt que ajudam

  • Pergunte em vez de pressupor. "Existe um jeito de fazer X?" antes de "Como faço X?". Uma premissa falsa é a alucinação mais fácil de provocar.
  • Peça a incerteza. "Marque qualquer afirmação da qual você não tenha certeza" traz uma lista de lugares para conferir primeiro. Os rótulos não são probabilidades calibradas, mas muitas vezes apontam os pontos fracos.
  • Peça fontes que você possa abrir. E abra. Uma citação que você não abriu não foi conferida, e um link pode existir e dizer algo diferente da afirmação que ele sustenta.
  • Recomece quando um chat ficar longo. Detalhes do começo de um chat longo podem se misturar ou se perder conforme a conversa cresce. Para fatos que importam, abra uma conversa nova com o material relevante colado; tokens e janela de contexto explica por quê.
  • Pergunte uma segunda vez, do zero. Se duas respostas independentes para a mesma pergunta factual discordam, pelo menos uma está errada. A concordância é uma evidência mais fraca, porque um modelo pode repetir o mesmo erro.

Confira o que importa

Nenhum prompt elimina a alucinação, então decida o que conferir pelo custo de estar errado. Um brainstorming ou um primeiro rascunho aguentam alguns erros. Um número em um relatório, uma afirmação jurídica ou médica, uma frase atribuída a uma pessoa ou uma citação no seu trabalho precisam de uma fonte primária.

O código é a saída mais fácil de conferir, porque rodá-lo já é um teste. Um método inventado falha com um AttributeError, ou o equivalente, assim que a linha que o chama roda, então garanta que o seu teste chegue a essa linha. O caso arriscado é um nome de pacote inventado. Se um modelo mandar você instalar um pacote do qual você nunca ouviu falar, confira se ele existe, se é o projeto que você acha que é e se é bastante usado, antes de instalar. Pesquisadores de segurança mostraram que os modelos muitas vezes inventam os mesmos nomes falsos de pacotes repetidas vezes, e um atacante que publica um pacote com um desses nomes tem o código dele instalado por qualquer pessoa que siga a sugestão. As verificações para código escrito por IA estão em prompts para escrever código.

Perguntas frequentes

O que é alucinação de IA?

Alucinação de IA é uma resposta de um modelo de linguagem que soa confiante e fluente, mas é falsa ou sem base: um fato inventado, uma citação de um artigo que não existe, uma função que uma biblioteca nunca teve. O modelo não está mentindo de propósito. Ele produziu o texto que parecia mais provável, e provável não é o mesmo que verdadeiro.

Por que o ChatGPT inventa coisas?

Os modelos de chat geram texto prevendo o próximo token, um depois do outro, com base em padrões aprendidos no treinamento. A não ser que uma ferramenta, como busca na web, ou um documento esteja na conversa, nada consulta a resposta. Quando a resposta certa era rara nos dados de treinamento, ou nunca esteve lá, o modelo ainda produz a continuação mais plausível, e uma resposta errada plausível parece exatamente uma certa.

Dá para impedir totalmente que a IA alucine?

Não. Os modelos atuais alucinam menos do que os anteriores, e responder a partir de documentos que você fornece ou de resultados de busca reduz ainda mais, mas nenhum prompt elimina a alucinação. Trate qualquer fato, número, citação, referência ou API que importe como uma afirmação a ser conferida em uma fonte primária.

Quais prompts reduzem as alucinações de IA?

Três ajudam mais. Dê permissão explícita para dizer "não sei". Forneça o material de origem e peça ao modelo que responda só a partir dele. Peça uma citação literal que sustente cada afirmação, para você conferir a afirmação com o texto. Evite perguntas que pressupõem que algo é verdade, porque o modelo tende a concordar com a pressuposição.

Quais são exemplos de alucinação de IA em programação?

Chamar um método que a biblioteca não tem, passar uma opção que não existe, importar um pacote que ninguém publicou e descrever o comportamento de uma versão antiga de uma biblioteca como se fosse o atual. O código torna muitos desses casos fáceis de pegar, porque um método inventado falha assim que a linha que o chama roda. Os nomes de pacotes inventados são o caso perigoso: confira se um pacote é real e conhecido antes de instalá-lo.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR