← Curso IA na prática para Programadores: do prompt ao pull request 22 aulas
Como a IA erra (e como isso vira bug no seu commit)

Por que a IA escreve uma função que não existe

Conceito 5 min de leitura

O mecanismo por trás da alucinação de API — e por que o texto mais confiante costuma ser o mais perigoso.

O erro mais comum do código gerado não é o erro feio. É o código bonito, idiomático, bem nomeado — que chama um método que não existe na sua versão da linguagem.

Ao final desta aula você consegue
  • Explicar por que um modelo produz uma API inexistente sem "perceber" o erro.
  • Reconhecer os quatro formatos em que essa falha aparece no seu editor.
  • Separar o que o assistente sabe do que ele está prevendo.

Um modelo de linguagem não consulta a documentação da sua versão quando responde. Ele produz a continuação mais provável do texto, dado tudo o que recebeu. Se str.removeprefix() apareceu milhares de vezes em código Python no material de treino, ela é uma continuação altamente provável para "remover um prefixo de string" — independentemente de o seu projeto rodar Python 3.8, onde o método não existe.

Repare no detalhe que faz a diferença: o modelo não está mentindo nem "chutando". Do ponto de vista dele, a resposta é excelente. A informação que faltava — a sua versão — nunca esteve na conversa.

Você escreveu
Como remover o prefixo "tmp_" de um nome de arquivo em Python?
A IA respondeu
Use o método removeprefix(), que é a forma mais limpa:

nome = "tmp_relatorio.csv"
limpo = nome.removeprefix("tmp_")
# 'relatorio.csv'

Diferente de lstrip(), removeprefix() remove a string exata e não caractere a caractere.
O que ler nessa resposta
  • A explicação sobre lstrip() está correta e é uma boa observação — o assistente entende o conceito.
  • O código está sintaticamente perfeito e segue a convenção da linguagem.
  • E ainda assim quebra em qualquer projeto abaixo de Python 3.9, porque removeprefix() só existe a partir dessa versão.
  • Em nenhum momento a resposta menciona versão mínima — e você não perguntou.
O que acontece no seu ambienteshell
$ python --version
Python 3.8.10

$ python -c "print('tmp_a.csv'.removeprefix('tmp_'))"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'str' object has no attribute 'removeprefix'
Esse é o caso feliz: quebra na primeira execução. O caso infeliz é a variação que não quebra — só se comporta diferente.

Os quatro formatos da mesma falha

FormatoExemplo típicoQuando você descobre
API que não existestr.removeprefix() em Python 3.8; Array.prototype.findLast em runtime antigoNa primeira execução — barato
API que existe, versão erradaSintaxe da v3 de uma biblioteca num projeto que usa a v2Na execução ou no build — barato
Parâmetro ou ordem trocadastr_replace($sujeito, $busca, $troca) com os argumentos invertidosNo teste, se houver — ou em produção
Comportamento sutilmente diferenteFunção certa, mas que trata null, fuso ou arredondamento de outro jeitoSemanas depois, num relatório errado — caro

Quanto mais para baixo na tabela, mais caro fica. As duas últimas linhas são a razão de este curso insistir em teste antes de aceitar o código.

ArmadilhaConfiança do texto não é evidência de correção

Modelos escrevem com a mesma segurança quando acertam e quando erram. Não existe hesitação no texto quando a informação é inventada — a fluência é a mesma.

Isso inverte um hábito antigo: com um colega humano, hesitação é sinal de risco. Com um assistente, a fluência não carrega informação nenhuma sobre a confiabilidade. Você precisa de outra fonte de sinal: executar, testar, conferir a documentação.

Como perceber: Se a resposta cita uma função que você nunca viu e não menciona a versão em que ela entrou, trate como hipótese até rodar.

Duas coisas que reduzem muito esse erro

Informar a versão no prompt. "Python 3.8", "PHP 8.1", "React 17" muda a resposta de verdade — o modelo tem material de treino sobre as diferenças e passa a usá-lo.

Usar ferramenta com acesso ao repositório. Um assistente que lê o seu requirements.txt ou composer.json erra menos porque a versão entra no contexto sem você digitar.

Checagem antes de seguir
  • A versão da linguagem e das bibliotecas principais está no prompt.
  • Toda função desconhecida foi conferida na documentação oficial antes do commit.
  • O código foi executado no seu ambiente, não só lido.
  • Nada foi aceito por parecer bem escrito.
Em uma frase
  • A IA não consulta a sua versão — ela prevê o código mais provável, e o mais provável nem sempre é o que existe no seu projeto.

Comentários e dúvidas

Inscreva-se grátis para comentar, tirar dúvidas, marcar seu progresso e emitir o certificado ao fim do curso.

Inscrever-se grátis com Google

Ainda não há comentários nesta aula.