Por que a IA escreve uma função que não existe
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.
- 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.
Como remover o prefixo "tmp_" de um nome de arquivo em Python?
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.- 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.
$ 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'Os quatro formatos da mesma falha
| Formato | Exemplo típico | Quando você descobre |
|---|---|---|
| API que não existe | str.removeprefix() em Python 3.8; Array.prototype.findLast em runtime antigo | Na primeira execução — barato |
| API que existe, versão errada | Sintaxe da v3 de uma biblioteca num projeto que usa a v2 | Na execução ou no build — barato |
| Parâmetro ou ordem trocada | str_replace($sujeito, $busca, $troca) com os argumentos invertidos | No teste, se houver — ou em produção |
| Comportamento sutilmente diferente | Função certa, mas que trata null, fuso ou arredondamento de outro jeito | Semanas 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.
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.
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.
- 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.
- 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 GoogleAinda não há comentários nesta aula.