Correct Code, Vulnerable Dependencies: A Large Scale Measurement Study of LLM-Specified Library Versions
Este estudo de medição em larga escala revela que os LLMs especificam frequentemente versões de bibliotecas de terceiros vulneráveis e incompatíveis no código Python gerado devido a vieses sistêmicos em relação a lançamentos específicos de alto risco, destacando uma superfície de risco crítica, anteriormente negligenciada, no desenvolvimento de software assistido por IA.
Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine que você está contratando um assistente pessoal superinteligente e incrivelmente rápido para escrever código para seus projetos de software. Este assistente, alimentado por um Modelo de Linguagem de Grande Escala (LLM), é excelente em escrever a lógica: "Aqui está como você tranca uma porta" ou "Aqui está como você envia uma mensagem".
Mas há um problema. Para fazer o código funcionar, o assistente precisa usar "ferramentas" (bibliotecas de terceiros) que já existem. O problema que este artigo investiga é que o assistente não apenas pega as ferramentas; ele pega versões específicas, desatualizadas e, às vezes, quebradas dessas ferramentas, e faz isso sem que você perceba.
Aqui está uma análise dos achados do estudo usando analogias simples:
1. A "Receita" vs. A "Lista de Compras"
Os pesquisadores testaram duas maneiras de pedir código ao assistente:
- Modo "Inline": Você pede um trecho de código, e o assistente escreve o código e adiciona uma pequena nota ao lado de cada ferramenta dizendo: "Use a Ferramenta X, Versão 1.0".
- Modo "Manifesto": Você pede ao assistente para escrever um trecho de código e uma lista de compras separada (um arquivo
requirements.txt) para as ferramentas.
O Achado:
Quando solicitado a fornecer a nota "Inline", o assistente estava muito ansioso para especificar versões exatas (95% das vezes). Mas quando solicitado a fornecer a "Lista de Compras", ele de repente ficou preguiçoso e vago, muitas vezes deixando os números de versão em branco (apenas 6% a 59% das vezes).
- Analogia: É como um chef que, quando solicitado a escrever uma receita, diz: "Use exatamente sal de safra de 2015". Mas quando solicitado a escrever uma lista de compras para toda a cozinha, ele apenas escreve "Sal" e deixa com você descobrir qual ano de sal comprar.
2. O Problema do "Leite Expirado" (Riscos de Segurança)
O estudo descobriu que, quando o assistente realmente escolhe uma versão específica, muitas vezes escolhe uma que é perigosa.
- A Estatística: Entre 37% e 56% das vezes, a versão específica escolhida pelo assistente tinha uma falha de segurança conhecida (um "CVE").
- A Gravidade: A maioria dessas falhas era de gravidade "Crítica" ou "Alta".
- A Reviravolta: Essas falhas não eram secretas. Eram de conhecimento público antes mesmo do assistente ser treinado. O assistente simplesmente não sabia evitá-las.
- Analogia: Imagine que o assistente é um viajante do tempo que sempre escolhe leite que expirou há três anos. Mesmo que a data de validade tenha sido impressa no cartão há anos, o assistente continua entregando esse mesmo leite vencido, pensando que está fresco.
3. O Efeito "Convergência" (Todos Escolhem a Mesma Coisa Ruim)
Você pode pensar que diferentes modelos de IA escolheriam versões diferentes. Eles não o fazem.
- O Achado: Todos os dez modelos testados (do Google, OpenAI, Alibaba, etc.) convergiram para o mesmo pequeno conjunto exato de versões arriscadas. Se o assistente escolher "Ferramenta X", quase sempre escolherá "Versão 2.31.0", mesmo que versões mais novas e seguras existam.
- Analogia: É como se cada pessoa em uma cidade, independentemente de sua origem, decidisse comprar o mesmo par de sapatos conhecido por ter uma sola quebrada. Não é uma coincidência; é um hábito compartilhado aprendido dos mesmos livros didáticos antigos.
4. O Problema da "Chave Quebrada" (Compatibilidade)
Mesmo que a ferramenta não seja perigosa, pode não se encaixar.
- O Achado: As versões escolhidas pelos assistentes muitas vezes não podiam ser instaladas ou não funcionavam com o código que eles escreveram.
- Verificação Estática: O código nem sequer seria instalado (como tentar encaixar um pino quadrado em um buraco redondo).
- Verificação Dinâmica: Mesmo que fosse instalado, o código travaria quando você tentasse executá-lo.
- A Causa: Os assistentes adoram escolher versões muito antigas de ferramentas. Essas versões antigas dependem de partes do sistema do computador que foram removidas em computadores modernos.
- Analogia: O assistente escreve um código que diz: "Ligue a luz", mas especifica uma lâmpada de 1990 que requer um soquete que não existe na sua casa de 2026. O código é perfeito, mas a lâmpada não rosca.
5. Por Que Não Podemos Apenas "Pedir" ao Assistente para Ser Melhor?
Os pesquisadores tentaram algumas coisas para corrigir isso:
- O Prompt "Por Favor, Seja Seguro": Eles disseram ao assistente: "Por favor, não use versões com falhas de segurança".
- Resultado: Não funcionou. O assistente ainda escolheu as versões ruins.
- Por quê: O assistente não está "esquecendo" as regras; ele simplesmente não está conectado a um banco de dados ao vivo de avisos de segurança. É como pedir a um aluno que memorizou um livro didático de 2023 para evitar uma nova lei aprovada em 2025. Eles literalmente não têm a informação na cabeça.
- A Correção "Âncora Externa": Quando os pesquisadores forçaram o assistente a usar uma lista pré-aprovada de versões seguras (como uma lista de compras estrita fornecida por um humano), os problemas desapareceram.
- Resultado: Os riscos de segurança diminuíram e o código realmente funcionou.
A Conclusão
O artigo conclui que os LLMs são ótimos em escrever a "lógica" do código, mas são terríveis em gerenciar a "cadeia de suprimentos" de ferramentas.
Eles agem como um bibliotecário útil, mas pouco confiável, que entrega a você um livro que parece perfeito, mas que é, na verdade, uma edição perigosa e desatualizada. Você não pode confiar nos números de versão específicos que eles sugerem. Você deve tratá-los como um rascunho e sempre verificar os números de versão com uma ferramenta de segurança antes de usá-los.
O problema não é que a IA seja "burra"; é que a IA é treinada em dados antigos que a fazem preferir versões populares, mas antigas, e ela carece de uma conexão ao vivo com avisos de segurança atuais. Até que a IA seja conectada a ferramentas de segurança ao vivo, o desenvolvedor humano deve ser quem verifica as datas de validade.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.