Los agentes de codificación de IA como Jules pueden compilar, refactorizar y andamiar el código mientras te enfocas en otras cosas. Esa comodidad y facilidad de uso es emocionante, pero a veces también puede significar errores sutiles, casos extremos perdidos y suposiciones no probadas. Es por eso que estamos presentando una nueva función en Jules que revisa y critica el código antes de que lo veas.
El rol es simple, pero poderoso: mientras Jules compila, la funcionalidad crítica desafía. Cada cambio propuesto se somete a una revisión contradictoria antes de su finalización. Piensa en la función de crítica como el revisor de pares de Jules, profundamente familiarizado con los principios de calidad del código y sin miedo a señalar cuando reinventaste un objeto riesgoso.
El crítico se integra directamente en el proceso de generación de código, llamado generación aumentada por el crítico. Para esta primera versión, es un proceso único que evalúa el resultado final en una sola pasada. Las versiones “milestone” futuras tendrán como objetivo convertirte en un verdadero agente de varios pasos, capaz de usar llamadas de herramientas o activar después de subtareas o antes de planificar. Por ahora, revisa la generación completa de una vez. Esto se basará en una investigación de varios pasos, donde un crítico valida los resultados utilizando herramientas externas (como un intérprete de código o un motor de búsqueda) y aprende de esos resultados.
El crítico no corrige el código, lo marca y luego se lo devuelve a Jules para que lo mejore. Por ejemplo:
Debido a que esto sucede después de la generación del parche y antes de la presentación (posiblemente varias veces si todavía está marcado), Jules puede volver a planificar en tiempo real. Nuestro objetivo es tener menos relaciones públicas deficientes, una mejor cobertura de las pruebas y más seguridad.
Los linters siguen reglas superficiales y fijas; las pruebas validan afirmaciones específicas. La capacidad crítica comprende la intención y el contexto detrás del código. Está más cerca de un método de evaluación sin referencias, juzgando la corrección y la solidez, sin necesidad de una implementación estándar.
También se inspira en la investigación sobre LLM como juez, donde un modelo evalúa el trabajo de otro modelo en cuanto a calidad y corrección. Este tipo de evaluación automatizada es especialmente útil cuando se integra estrechamente con la generación, convirtiendo la revisión en un ciclo de comentarios en vivo.
1: Le pides a Jules que inicie una tarea.
2: La función crítica revisa el parche candidato y su descripción en una sola pasada, haciendo un juicio general.
3: Jules responde a los comentarios antes de terminar, después de lo cual el crítico puede revisar el parche actualizado nuevamente y continuar marcando lo que considere necesario hasta que no queden más problemas.
4: Recibes un código que ya se revisó internamente.
Esto se basa en el aprendizaje de refuerzo actor-crítico (RL), donde un “actor” genera y un “crítico” evalúa. En RL, este bucle actualiza al actor y al crítico en función de una señal de aprendizaje. En nuestra configuración de LLM como crítico, el patrón es similar: proponer y luego evaluar. Sin embargo, en lugar de actualizar los parámetros de aprendizaje, los comentarios influyen en el estado actual y los próximos pasos. Este mismo principio también sustenta la investigación sobre LLM como juez, donde la evaluación del crítico guía la calidad sin volver a entrenarse.
En un mundo de iteración rápida, el crítico traslada la revisión a una etapa más temprana del proceso y al acto de la generación en sí. Esto significa que el código que revisas ya se interrogó, ajustó y sometió a pruebas de estrés. Por supuesto, siempre debes revisar cuidadosamente el código generado antes de usarlo.
Los grandes desarrolladores no solo escriben código, lo cuestionan. Y ahora, Jules también hace lo mismo.