La IA Me Da Código Incompleto: Cómo Solucionar el 'Lazy Coding' de ChatGPT y Claude
¿ChatGPT o Claude te dicen 'aquí va el resto del código'? Por qué ocurre el lazy coding, cómo evitarlo con prompts específicos y qué modelo lo hace menos.
Tabla de contenidos
Abres ChatGPT, le pides que refactorice tu componente de 200 líneas, y te devuelve esto:
export function Dashboard() {
// ... existing imports ...
const [data, setData] = useState(null);
// Aquí va tu lógica de fetch existente
return (
<div>
{/* ... resto del JSX ... */}
<NewFeature data={data} />
</div>
);
}
60% del código es // .... No te ha dado nada útil. Has perdido 30 segundos esperando la respuesta y ahora tienes que juntar las piezas como un rompecabezas.
Este problema tiene nombre: Lazy Coding. Y todos los modelos de IA lo hacen — unos más que otros.
Por qué la IA hace lazy coding
1. Límite de tokens de salida
Cada modelo tiene un máximo de tokens que puede generar en una respuesta:
| Modelo | Max output tokens | ¿Suficiente para código largo? |
|---|---|---|
| GPT-4.1 | 32.768 | Sí, pero se “cansa” antes |
| GPT-4.1 mini | 16.384 | Justo para archivos medianos |
| Claude Sonnet 4 | 16.384 | Buen balance |
| Claude Opus 4 | 32.768 | El más generoso |
Pero el problema no es solo el límite técnico — los modelos están entrenados para ser concisos. En el entrenamiento, las respuestas cortas y resumidas se premiaron más que las respuestas exhaustivas.
2. El modelo “cree” que ya sabes el resto
Cuando le pasas tu código existente y pides un cambio, el modelo interpreta que solo quieres ver la diferencia. Es lógico para una conversación humana, pero inútil cuando necesitas copiar-pegar el archivo completo.
3. Repeticiones penalizadas
Los LLMs penalizan la generación de texto repetitivo. Si tu archivo tiene 50 líneas de JSX similares, el modelo las resume con // ... resto del JSX porque generar cada una le “cuesta” probabilísticamente.
Cómo evitarlo: Prompts que funcionan
Prompt directo anti-lazy
Reescribe este archivo COMPLETO con los cambios aplicados.
NO omitas código. NO uses "// ..." ni "// existing code".
Incluye TODAS las líneas del archivo, incluidas las que no cambian.
Necesito poder copiar y pegar tu respuesta directamente.
Prompt para cambios parciales (cuando es un archivo enorme)
Muéstrame SOLO las funciones que cambian, pero cada función COMPLETA
(desde la declaración hasta el cierre). No omitas líneas dentro
de las funciones.
Prompt estilo diff (ahorra tokens y es preciso)
Dame los cambios en formato diff (unified diff).
Solo las líneas que cambian con 3 líneas de contexto.
Respuesta del modelo:
@@ -15,7 +15,9 @@ export function Dashboard() {
const [data, setData] = useState(null);
+ const [loading, setLoading] = useState(true);
useEffect(() => {
- fetchData().then(setData);
+ setLoading(true);
+ fetchData().then(setData).finally(() => setLoading(false));
}, []);
Esto es mucho más útil que recibir medio archivo con // ....
Comparativa: ¿Qué herramienta hace menos lazy coding?
Probé el mismo prompt (“refactoriza este componente de 180 líneas para añadir cache”) en 5 herramientas:
| Herramienta | Código completo | Lazy coding | Notas |
|---|---|---|---|
| ChatGPT (web) | ❌ 40% | 60% omitido | El peor — resume todo |
| Claude (web) | ⚠️ 70% | 30% omitido | Mejor, pero aún corta |
| GitHub Copilot Chat | ⚠️ 65% | 35% omitido | Depende del prompt |
| Cursor (Agent mode) | ✅ 95% | 5% omitido | Edita el archivo directamente |
| Aider + Claude | ✅ 98% | 2% omitido | El mejor — edita con diffs |
Los editores que trabajan directamente con archivos (Cursor, Aider, Copilot Edits) hacen mucho menos lazy coding porque no necesitan “mostrar” el código en chat — lo aplican directamente.
Técnica avanzada: System prompt para APIs
Si usas la API directamente (no la web), puedes añadir un system prompt persistente:
const response = await openai.chat.completions.create({
model: 'gpt-4.1',
messages: [
{
role: 'system',
content: `Eres un asistente de código. Reglas estrictas:
1. SIEMPRE escribe el código completo, nunca omitas líneas
2. NUNCA uses "// ..." o "// existing code" o "// resto del código"
3. Si el archivo es muy largo, divide la respuesta en partes numeradas
4. Cada función debe estar completa de principio a fin`
},
{
role: 'user',
content: `Refactoriza este archivo:\n\n${fileContent}`
}
],
max_tokens: 16384, // Asegúrate de dar suficiente espacio
});
Para APIs, revisa cómo usar la API de ChatGPT y Claude sin arruinarte. El max_tokens alto sube el coste pero evita respuestas cortadas.
Técnica nuclear: Divide el archivo antes de pedir
Si tu archivo tiene +300 líneas, no se lo pases entero. Divídelo:
Tengo un archivo con 3 secciones:
1. Imports y tipos (líneas 1-30)
2. Hooks y lógica (líneas 31-120)
3. JSX/render (líneas 121-300)
Necesito cambiar la sección 2. Te la paso completa.
Dame la sección 2 COMPLETA con los cambios. Yo la pegaré en su sitio.
[Pega solo las líneas 31-120]
Así el modelo no tiene la tentación de resumir las otras secciones porque no las tiene.
Configuración en editores para reducir lazy coding
Cursor
// .cursorrules (en la raíz del proyecto)
Always write complete code. Never use placeholder comments like
"// existing code" or "// ...". When editing a file, rewrite the
entire function or component, not just the changed lines.
GitHub Copilot
En VS Code, usa el modo Copilot Edits en lugar del chat normal. Edits modifica el archivo directamente y no necesita “mostrar” el código.
Cline / Claude Dev
// En la configuración de Cline, system prompt personalizado:
"When writing code, always provide complete implementations.
Never abbreviate with comments. Write every line."
¿Cuándo está bien que la IA resuma?
No siempre es malo. A veces quieres que resuma:
- Revisión de código: “¿Ves bugs en este archivo?” → No necesitas que reescriba todo
- Explicaciones: “¿Qué hace esta función?” → Solo necesitas la explicación
- Diffs pequeños: Si cambias una línea, no necesitas las otras 299
El lazy coding solo es un problema cuando necesitas código ejecutable que puedas copiar y pegar o que el editor aplique directamente.
Resumen
| Situación | Solución |
|---|---|
| Chat web (ChatGPT/Claude) | Prompt explícito: “código COMPLETO, sin omisiones” |
| API directa | System prompt + max_tokens alto |
| Archivo enorme (+300 líneas) | Divide en secciones, pide una a la vez |
| Editor (Cursor/Copilot) | Usa modo Agent/Edits en vez de chat |
| Terminal (Aider) | Ya genera código completo por defecto |
Artículos relacionados
- Mejores prompts para programar con IA — técnicas avanzadas para sacar código de calidad
- Cursor vs Copilot vs Windsurf — qué editor genera código más completo
- Errores comunes al configurar Copilot y Cline — soluciones rápidas para problemas del editor