Introdução
Com o avanço acelerado das inteligências artificiais generativas, ferramentas como ChatGPT, GitHub Copilot, Gemini e Claude tornaram-se aliadas indispensáveis dos programadores. Estas ferramentas prometem aumentar a produtividade ao sugerirem trechos de código, completarem funções e até gerarem aplicações inteiras a partir de descrições em linguagem natural.
No entanto, um fenómeno recorrente — conhecido como alucinações — compromete seriamente a fiabilidade destes sistemas quando aplicados à geração de código.
Hallucinação em IA ocorre quando o modelo produz saídas plausíveis, sintaticamente corretas, mas semanticamente incorretas ou factualmente erradas.
No contexto da programação, isto manifesta-se como código que compila (ou executa sem erros de sintaxe), mas contém erros lógicos subtis, chamadas a métodos inexistentes, APIs obsoletas ou comportamentos inesperados.
Estudos recentes indicam que até 52% das respostas de modelos de linguagem em tarefas de programação contêm erros (conforme o Stack Overflow Developer Survey 2024 e análises da Anthropic sobre o modelo Claude).
Este número aumenta com a complexidade da tarefa e com a ausência de contexto adequado.
Este artigo explora as causas, os tipos mais comuns de erros, exemplos reais, impactos no desenvolvimento e estratégias eficazes de mitigação.
O que é uma Alucinação em Código Gerado por IA?
Uma hallucinação ocorre quando o modelo “inventa” informações que não existem nos dados de treino ou no contexto fornecido.
Em código, isso pode significar:
- Utilização de um método que nunca existiu numa biblioteca.
- Aplicação incorreta de uma API com parâmetros errados.
- Lógica aparentemente correta, mas que falha em casos de borda.
- Confusão entre versões de frameworks (por exemplo, React 17 vs React 18).
Exemplo clássico (ChatGPT, 2023)
Pergunta:
“Como ordenar um array em JavaScript usando o método
sortBy?”
Resposta gerada:
const sorted = array.sortBy(item => item.age);
Erro:
O método sortBy não existe nativamente em JavaScript.
O correto seria usar .sort() com uma função de comparação, ou recorrer a bibliotecas como Lodash (_.sortBy).
Este tipo de erro é sutil: o código parece profissional, usa sintaxe válida, mas falha em tempo de execução com:
TypeError: array.sortBy is not a function
Tipos Comuns de Erros em Código Gerado por IA
1. Métodos ou Funções Inexistentes
O modelo “recorda-se” de padrões vistos em repositórios, mas mistura nomes.
# Erro comum em Python com pandas
df.filter(column='name') # Método inexistente
Correto:df[df['name'] == valor] ou df.query() ou df.loc[]
2. APIs Desatualizadas ou Depreciadas
Modelos treinados até uma data fixa podem sugerir APIs antigas.
// React (versão antiga)
this.setState({ count: 1 }, () => console.log(this.state.count));
Em React 18 (com Concurrent Mode), o comportamento de setState mudou em certos contextos — o modelo pode ignorar isso.
3. Erros Lógicos Sutis (off-by-one, condições de corrida)
# Divisão inteira incorreta
def media(lista):
return sum(lista) / len(lista) # Falha se lista vazia
Sem tratamento de ZeroDivisionError, o código falha em produção.
4. Confusão entre Bibliotecas Semelhantes
// Confundindo Express com Fastify
app.use(bodyParser.json()); // bodyParser foi removido do Express v4.16+
Correto:
Usar express.json().
5. Segurança Ignorada
// SQL Injection (Node.js + mysql)
connection.query(`SELECT * FROM users WHERE id = ${userId}`);
O modelo pode gerar código vulnerável se não for instruído sobre boas práticas de segurança.
6. Falta de Tratamento de Erros
with open('config.json') as f:
config = json.load(f)
# Falta try/except para FileNotFoundError, JSONDecodeError, etc.
Por que as Alucinações Aumentam com o Uso de IAs?
| Fator | Impacto |
|---|---|
| Falta de contexto completo | O modelo não vê todo o projeto, apenas o prompt. |
| Treino em código ruidoso | Muitos repositórios no GitHub contêm bugs ou más práticas. |
| Generalização excessiva | O modelo “mistura” soluções e cria híbridos inválidos. |
| Ausência de execução real | O modelo não compila nem executa o código. |
| Prompts ambíguos | “Cria uma função de login” → múltiplas interpretações possíveis. |
Um estudo da University of Michigan (2024) mostrou que 67% dos programadores copiam código gerado por IA sem o rever completamente, aumentando o risco de bugs em produção.
Exemplos Reais de Erros em Produção
Caso 1: Método .toPandas() no PySpark
spark_df.toPandas() # Funciona
Mas em clusters com pouca memória, causa OutOfMemoryError.
O modelo sugere sem alertar sobre escalabilidade.
Caso 2: async/await mal usado
async function fetchData() {
const data = fetch('/api'); // Retorna Promise, mas falta o await
console.log(data.json()); // Erro: data.json is not a function
}
O modelo esquece o await, gerando código que parece assíncrono — mas não é.
Estratégias para Mitigar Alucinações
1. Use Prompts Específicos e Estruturados
Escreve uma função em Python 3.11 que leia um ficheiro CSV usando pandas,
trate erros de ficheiro não encontrado e devolva um DataFrame vazio nesse caso.
Usa try/except e não utilizes caminhos hard-coded.
2. Forneça Contexto do Projeto
Estou a usar Django 5.0 e Python 3.12, e o modelo User tem o campo ‘email’.
Gera uma view de login com autenticação.
3. Peça Testes Unitários Junto com o Código
Gera uma função de ordenação e 3 testes com pytest que cubram:
lista vazia, duplicados e ordem decrescente.
4. Integre Ferramentas de Verificação Automática
| Ferramenta | Função |
|---|---|
| GitHub Copilot + CodeQL | Deteta vulnerabilidades |
| SonarQube | Análise estática de qualidade |
| Pylint / ESLint | Regras de estilo e erros comuns |
| CI/CD com testes | Executa testes automaticamente |
5. Use o Modo “Passo a Passo” (Step-by-Step)
1) Qual é a API correta do pandas para filtrar?
2) Como evitar SQL injection no Django?
3) Escreve o código.
6. Valide com Execução Local
- Use REPL online (Replit, Jupyter) para testar.
- Execute com dados de teste reais.
7. Prefira Modelos Especializados em Código
| Modelo | Vantagem |
|---|---|
| Claude 3.5 Sonnet | Melhor em raciocínio lógico |
| GitHub Copilot (GPT-4o) | Integração com IDE |
| CodeLlama / DeepSeek Coder | Treinados exclusivamente em código |
Boas Práticas para Programadores
- Nunca copie e cole sem rever o código.
- Execute sempre testes locais.
- Use linters e type checkers (mypy, TypeScript).
- Peça explicações ao modelo sobre o código gerado.
- Mantenha a documentação atualizada das bibliotecas utilizadas.
As alucinações em código gerado por IA são um desafio real e crescente.
Embora 52% das respostas contenham erros, isso não significa abandonar as ferramentas, mas sim usá-las com pensamento crítico.
A IA é um acelerador, não um substituto.
O programador deve atuar como revisor técnico, validando cada linha com:
- Conhecimento do domínio
- Testes automatizados
- Ferramentas de análise estática
- Bom senso
No futuro, com modelos auto-verificáveis, execução em sandbox integrada e treino em código validado, as alucinações deverão diminuir.
Até lá, a regra de ouro é simples:
“Confia, mas verifica sempre.”
Dica:
Ao usar IA para gerar código, pergunte sempre:
“Podes gerar testes que provem que este código está correto?”
Se a IA não conseguir, o código provavelmente tem problemas.
Artigo baseado em observações reais de uso de ChatGPT, Claude e Copilot em projetos entre 2023 e 2025.