Log in to leave a comment
No posts yet
Herramientas como Cursor o Devin son convenientes. Sin embargo, es difícil saber exactamente qué está sucediendo en su interior y, a veces, terminan destrozando el código de una manera que no deseamos. Si eres un desarrollador backend, es mucho más económico y seguro crear tu propio agente optimizado combinando la biblioteca estándar de Python y las API de LLM.
Para que un agente vaya más allá de simplemente escribir código y ejecute comandos en la terminal, es necesario manejar el módulo subprocess con precisión. Usar la opción shell=True sin precaución te expone a ataques de inyección de shell o a problemas donde los procesos no mueren tras un timeout, quedando como procesos zombi.
Al implementarlo tú mismo, establece shell=False en la llamada a subprocess.run() y pasa los comandos en forma de lista. Define un timeout corto, de unos 30 segundos, y si ocurre una excepción TimeoutExpired, llama inmediatamente a process.kill() para recuperar los recursos. Al enviar los resultados de la ejecución al modelo, no es necesario enviar todo el contenido. Si el texto supera los 1,000 caracteres, recórtalo y devuelve principalmente las últimas 20 líneas. Esto ahorra tokens y ofrece información suficiente para que el modelo identifique la causa del error.
A medida que la conversación se alarga, los datos acumulados en la ventana de contexto se convierten en una bomba de costos. Según los anuncios de Anthropic, al usar el marcador cache_control en el modelo Claude 3.5, se puede ahorrar hasta un 90% en el costo de lectura de datos almacenados en caché. Esto equivale a unos 0.30 dólares por cada millón de tokens.
Para reducir costos, separa estrictamente el mensaje del sistema de la entrada del usuario. Fija la información que no cambia, como la estructura del árbol de archivos del proyecto, en la parte superior del prompt del sistema y configúrala como un punto de caché. Cuando el historial de chat crezca y exceda los tokens, es recomendable usar un método de resumen jerárquico: calcula la cantidad con tiktoken y resume los mensajes antiguos mediante una llamada aparte al LLM. Al aplicar una ventana deslizante que mantenga solo este contexto resumido en la parte superior y añada los mensajes más recientes, puedes reducir los costos en más de un 40% en sesiones de desarrollo largas, protegiendo al mismo tiempo la precisión del razonamiento del modelo.
Hacer que el agente imprima de nuevo todo el archivo es ineficiente y lento. Cuantos más tokens de salida haya, mayor es la probabilidad de que el modelo omita código intermedio o genere alucinaciones. La técnica conocida como "Edit Trick" induce al modelo a buscar y reemplazar solo el texto de anclaje (Anchor) antes y después de la parte que necesita modificación. Esta técnica puede reducir la cantidad de tokens de salida hasta en un 86% en datos reales.
Utiliza re.sub() de Python para crear una función que aplique a los archivos locales solo las modificaciones recibidas mediante etiquetas XML específicas o expresiones regulares. Además, en lugar de incluir toda la documentación técnica en el prompt, diseña el sistema para que traiga solo los fragmentos necesarios conectando una base de datos vectorial ligera como LanceDB. Con esta estructura, la velocidad de edición de archivos se siente un 79% más rápida y se resuelve el problema crónico de la confusión del modelo al trabajar con archivos grandes.
Debemos dejar de copiar y pegar manualmente los mensajes de depuración para el modelo. Haz que el agente escriba primero el código de prueba basado en pytest antes de redactar el código principal.
Solo necesitas construir un bucle de retroalimentación donde, si la prueba falla, se envíe el Traceback completo sin procesar de vuelta al modelo para que se corrija por sí solo. No obstante, para comandos peligrosos como rm o deploy, es imprescindible insertar un guardrail que requiera la aprobación del usuario mediante la función input() de Python. Una vez completada esta estructura cíclica, el desarrollador solo tiene que revisar el resumen de git diff enviado por el agente y presionar el botón de commit.
En última instancia, la clave para construir un agente no reside en frameworks llamativos, sino en qué tan refinadamente proceses y almacenes en caché los datos entre la terminal y el LLM. 600 líneas de código Python escritas por ti reflejarán tus intenciones mucho mejor que una herramienta de caja negra con decenas de miles de líneas.