La IA Me Sugirió un Paquete NPM que No Existe: Alucinaciones en Desarrollo Web
ChatGPT y Copilot inventan paquetes npm, APIs y funciones que no existen. Cómo detectar alucinaciones, verificar dependencias y evitar instalar malware camuflado.
Tabla de contenidos
Le pides a ChatGPT cómo implementar autenticación con OAuth en Express y te responde:
npm install express-oauth2-simple
Lo ejecutas. npm ERR! 404 Not Found. El paquete no existe. ChatGPT lo inventó.
No es un bug. Es una alucinación — el modelo generó un nombre de paquete que “suena” correcto pero nunca existió en npm.
Y lo peor: a veces el paquete sí existe… porque un atacante lo registró sabiendo que la IA lo iba a sugerir.
Por qué la IA inventa paquetes
Los LLMs no tienen acceso en tiempo real a npm. Generan texto basándose en patrones estadísticos:
- “express” + “oauth” + “simple” = combinación probable → genera
express-oauth2-simple - “react” + “auth” + “helper” = combinación probable → genera
react-auth-helper - “python” + “flask” + “cors” = combinación probable → genera
flask-cors-helper
Ninguno de estos existe (al momento de escribir esto). Pero el modelo no sabe que no existen — solo sabe que el nombre encaja con el patrón.
Cuándo ocurre más
| Contexto | Probabilidad de alucinación |
|---|---|
| Paquetes populares (express, react, lodash) | Baja (~2%) |
| Paquetes de nicho | Alta (~15-20%) |
| Paquetes con nombre de 3+ palabras | Muy alta (~25%) |
| APIs internas de un paquete real | Media (~10%) |
El modelo no solo inventa paquetes — también inventa funciones y métodos de paquetes reales. Ejemplo:
// ❌ La IA genera esto, pero .streamChat() no existe en el SDK de OpenAI
const stream = await openai.streamChat({ model: 'gpt-4.1', ... });
// ✅ La API real es:
const stream = await openai.chat.completions.create({ ..., stream: true });
El peligro real: Slopsquatting
Un investigador de seguridad publicó en 2025 un estudio que demostró:
- Recopiló los 1.000 nombres de paquetes que ChatGPT más alucinaba
- Registró 10 de ellos en npm con código inofensivo (para la investigación)
- En una semana, recibieron +4.500 descargas — la mayoría de desarrolladores que copiaron y pegaron código de la IA
El ataque se llama slopsquatting (una variación de typosquatting):
1. La IA alucina "react-oauth-simplified"
2. Un atacante registra "react-oauth-simplified" en npm con malware
3. Un desarrollador hace: npm install react-oauth-simplified
4. El paquete malicioso se ejecuta en postinstall
5. Roba variables de entorno (.env), tokens, SSH keys
No es teoría. Ya ha ocurrido con paquetes reales.
Cómo verificar antes de instalar
Paso 1: Busca en npmjs.com
Antes de npm install lo-que-sea, abre npmjs.com y busca el paquete:
- ¿Existe? Si no aparece, la IA lo inventó
- ¿Tiene descargas? Un paquete legítimo tiene miles/semana. Menos de 100 → sospechoso
- ¿Cuándo se publicó? Si se publicó hace días y la IA lo sugiere… es slopsquatting
- ¿Tiene repositorio de GitHub? Un paquete sin repo es una red flag
Paso 2: Usa npm info
# Antes de instalar, verifica
npm info react-oauth-simplified
# Si no existe, verás:
# npm ERR! 404 'react-oauth-simplified' is not in this registry
# Si existe, revisa los campos:
# - maintainers (¿quién lo mantiene?)
# - repository (¿tiene GitHub?)
# - weekly downloads (¿es popular?)
# - created (¿es nuevo sospechoso?)
Paso 3: Usa Socket.dev o Snyk
# Socket.dev analiza paquetes npm buscando malware
npx socket optimize # Audita tu package.json
# Snyk
npx snyk test # Busca vulnerabilidades conocidas
Paso 4: Verifica la API del paquete real
Si la IA te sugiere un método de un paquete que sí existe, verifica en la documentación oficial:
// La IA dice:
import { verifyJWT } from 'jsonwebtoken';
// Pero la API real es:
import jwt from 'jsonwebtoken';
jwt.verify(token, secret);
Abre la documentación o el README del paquete en GitHub. Nunca confíes en la API que la IA te muestra.
Tabla de alucinaciones comunes
Paquetes que la IA sugiere frecuentemente y no existen:
| La IA sugiere | El paquete real es |
|---|---|
express-oauth2-simple | passport + passport-google-oauth20 |
react-auth-helper | next-auth o @auth/core |
node-env-config | dotenv |
mongodb-easy-connect | mongoose o el driver oficial mongodb |
typescript-path-resolver | tsconfig-paths |
react-form-validation | react-hook-form + zod |
Regla general: Si el nombre del paquete describe exactamente lo que quieres hacer, probablemente la IA lo inventó. Los paquetes reales suelen tener nombres más creativos (express, lodash, zod, prisma).
Cómo pedir dependencias a la IA sin riesgo
Prompt seguro
Necesito implementar autenticación OAuth2 en Express.js.
Dame el nombre EXACTO del paquete npm más popular para esto.
Incluye el enlace a su página en npmjs.com o su repositorio de GitHub.
NO inventes paquetes — si no estás seguro del nombre exacto, dímelo.
Prompt de verificación
¿El paquete "express-oauth2-simple" existe realmente en npm?
Si no existe, ¿cuál es la alternativa real más usada?
La mayoría de modelos recientes (GPT-4.1, Claude Sonnet 4) son más honestos cuando les preguntas directamente si están seguros.
Script para auditar dependencias alucinadas
Si ya tienes un proyecto con muchas dependencias y quieres verificar que todas son legítimas:
#!/bin/bash
# audit-deps.sh — Verifica que todas tus dependencias existen en npm
echo "🔍 Verificando dependencias..."
for pkg in $(node -e "
const pkg = require('./package.json');
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
console.log(Object.keys(deps).join('\n'));
"); do
result=$(npm view "$pkg" name 2>&1)
if echo "$result" | grep -q "404"; then
echo "❌ $pkg — NO EXISTE en npm"
else
downloads=$(npm view "$pkg" --json 2>/dev/null | node -e "
let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{
try{console.log(JSON.parse(d).name)}catch{console.log('?')}
})")
echo "✅ $pkg"
fi
done
Resumen
| Acción | Cuándo |
|---|---|
| Buscar en npmjs.com | Siempre antes de instalar un paquete sugerido por IA |
npm info paquete | Cuando tienes dudas sobre un nombre |
| Verificar descargas semanales | Si el paquete existe pero no lo conoces |
| Revisar la API en la documentación | Cuando la IA usa métodos que no reconoces |
| Pedir enlace a GitHub/npm al prompt | Como hábito en cada prompt |
Artículos relacionados
- Testear código generado por IA — no confíes ciegamente en lo que genera
- Mejores modelos de IA para programar — qué modelos alucinan menos
- Errores comunes al configurar Copilot y Cline — más problemas con IA en el editor