Cómo arreglar el código espagueti creado por un agente de codificación de IA y reducir los costos de tokens
Dejé que el agente codificara y el código se disparó a un millón de líneas, devolviendo una factura monstruosa por el uso de la API. Este artículo trata sobre cómo solucionar esa situación.
Limpieza de la base de código rota
El código duplicado generado por el agente en un bucle infinito se puede eliminar en 30 minutos. Solo necesitas usar knip y jscpd.
Crea un archivo knip.json en la raíz del proyecto y anota los puntos de entrada. Escribe npx knip en la terminal para encontrar los paquetes fantasma que el agente usó y abandonó. A continuación, ejecuta npx jscpd ./src -t 1 para extraer los bloques de funciones duplicados que aumentaron debido a las copias y pegas.
Puedes eliminar de un solo golpe el código innecesario en un monorepo de 158 archivos. Luego, abre biome.json, activa la regla noUnusedVariables y bloquea el código muerto para evitar que vuelva a entrar.
Limitación de los costos de tokens con entornos aislado (sandboxes)
Lanzar todo el código al agente cada vez hace que los tokens se evaporen. Debes aplicar una estructura Repo-Map al estilo Aider para aislar solo los archivos en los que estás trabajando actualmente.
Al proporcionar la opción --map-tokens 1024, puedes reducir los tokens utilizados para comprender la estructura del repositorio por debajo de los 2,000 tokens, incluso en proyectos con más de 1,000 archivos.
Para establecer un límite de costos, LiteLLM Proxy es la respuesta. Configura litellm_config.yaml y limita el número máximo de bucles por sesión a 15. Si estableces un límite de costos de 2.50 dólares, el proxy cortará la llamada en el momento exacto en que el agente supere el límite.
Control de agentes con pruebas declarativas
De poco sirve escribir prompts largos en malayo. Debes proporcionar primero código de prueba unitaria que falle para evitar que el agente haga tonterías.
Según la investigación de SWE-bench Verified, al utilizar el método de inyectar primero los casos de prueba unitaria, la tasa de regresión cayó del 6.08 por ciento al 1.82 por ciento, y la tasa de resolución de problemas aumentó del 24 por ciento al 32 por ciento.
Crea primero el archivo de prueba que falla y dale instrucciones al agente para que escriba únicamente la parte de implementación que pase dicha prueba.
También debes automatizar el script de verificación. Crea un archivo local_verifier.sh e incluye en orden los comandos npx tsc --noEmit, npx biome check ./src y npx vitest run. Aunque el agente insista en que ha terminado de escribir el código, si el código de salida de este script no es 0, se bloqueará la confirmación (commit).
Un flujo de trabajo híbrido con intervención humana directa
El código creado por el agente se divide en unidades de solicitudes de extracción (pull requests) y es revisado directamente por humanos.
Verifica si las líneas modificadas superan las 200, si se adjuntó algún paquete extrañó en package.json o si se cubrieron los errores superficialmente con @ts-ignore. Al combinar Husky y lint-staged, se bloquea inmediatamente en el momento del commit si el código duplicado supera el 2 por ciento.
Para dividir el trabajo, se siguen 3 etapas. El modelo de nivel superior divide el trabajo y crea TODO.md. A continuación, un modelo rentable implementa cada elemento. Finalmente, un desarrollador sénior verifica el git diff. Al usar esta estructura, puedes ahorrar más del 70 por ciento en costos en comparación con depender de un solo modelo de frontera.