Volver a proyectos
Agentes de IA · Herramientas de desarrolloEn progreso

Code Review Agent

Un agente pequeño. Un ciclo de revisión verificable.

Prototipo de revisión de seguridad en Python: el modelo explora código mediante dos herramientas de lectura y propone hallazgos para revisión humana.

Mi contribución

Ciclo del agente, herramientas y evaluación manual

Tecnologías

Python / OpenAI SDK / Tool calling / Qwen

Ilustración del sistema · Explorar → leer → revisar
X

El resultado

Construí un revisor con herramientas que inspecciona una carpeta antes de reportar posibles problemas de seguridad.

Y

La evidencia

Ejemplo vulnerable público, script de comprobación de herramientas y prueba manual sobre el proyecto RAG financiero.

Z

El enfoque

Separé las decisiones del modelo de la ejecución en Python, con una raíz permitida y un ciclo de diez turnos.

Dentro del proyecto

Explorar el sistema

Abre una etapa para conocer cómo funciona y por qué se diseñó así.

01InstrucciónPrompt · OpenAI-compatible API

Envía la tarea de revisión, el historial y los esquemas de herramientas al endpoint configurado.

Decisión de ingeniería

Configurar endpoint, modelo y clave mediante variables de entorno. El experimento inicial utilizó un servidor Qwen local.

Ver implementación
02Exploraciónlist_files · read_file

El modelo solicita listar un directorio o leer un archivo. Python ejecuta únicamente las dos funciones registradas.

Decisión de ingeniería

Resolver rutas y rechazar destinos fuera de target_project. Las herramientas no exponen escritura ni comandos de terminal.

Ver implementación
03ObservaciónTool result · call ID

Devuelve cada resultado con su ID de llamada, relacionando la petición del modelo con la respuesta real del sistema de archivos.

Decisión de ingeniería

Limitar el ciclo a diez turnos del modelo y devolver los primeros 5.000 caracteres de cada archivo. Estos límites acotan la cobertura.

Ver implementación
04RevisiónFinding · Evidence · Human check

El modelo propone problemas, riesgos y correcciones. El desarrollador los contrasta con el código antes de actuar.

Decisión de ingeniería

Evaluar tanto hallazgos útiles como falsos positivos. El informe del agente no equivale a una auditoría de seguridad completa.

Ver implementación

Recorrido de implementación · no es una demo de inferencia

El problema

Quería comprender cómo un agente va más allá de enviar un solo prompt. La revisión de código dio al experimento una tarea concreta: explorar una carpeta, leer archivos y explicar posibles problemas de seguridad con referencias al código.

El resultado es un prototipo pequeño en Python. Su límite más importante separa las decisiones del modelo de la ejecución real de herramientas, no la extensión o seguridad aparente de su informe.

El modelo decide. La ejecución es explícita.

Dos herramientas y una raíz permitida

tools.py registra únicamente list_files y read_file. Las rutas solicitadas se resuelven y se comprueban contra target_project antes de leer. Este despachador no permite solicitar funciones arbitrarias de Python; las herramientas tampoco exponen escritura ni ejecución de comandos.

La validación de rutas es un límite de la aplicación, no un aislamiento del sistema operativo. Los archivos colocados dentro de la carpeta objetivo están disponibles para el revisor.

Hacer visible el ciclo

agent.py envía mensajes y esquemas de herramientas a un endpoint compatible con OpenAI. Cuando el modelo solicita una herramienta, Python la ejecuta y devuelve el resultado con el ID correspondiente. El siguiente turno del modelo recibe tanto la petición como su resultado.

El ciclo termina cuando el modelo responde sin solicitar herramientas o después de diez turnos. Cada turno puede incluir varias llamadas. Se devuelven los primeros 5.000 caracteres de cada archivo; la implementación actual lee todo el archivo en memoria antes de recortarlo.

Configurar el proveedor del modelo

La prueba inicial utilizó Qwen mediante un servidor local. OPENAI_BASE_URL, OPENAI_API_KEY y MODEL permiten configurar otro endpoint compatible. Usar el SDK de OpenAI no exige un modelo alojado en OpenAI. Un endpoint remoto recibe el código enviado mediante los resultados de las herramientas.

Hallazgos útiles y falsos positivos

El repositorio incluye un ejemplo deliberadamente vulnerable y try_tools.py, un script básico para comprobar listado, lectura y rechazo de una ruta fuera de la raíz.

En una prueba manual sobre mi API RAG financiera, el agente identificó traversal en nombres de archivo, cargas sin límite, errores internos expuestos y falta de autenticación. También produjo afirmaciones poco fundamentadas sobre archivos de entorno y autenticación de Chroma local, y omitió otra ruta de traversal.

La comparación mostró que el ciclo funciona y que la calidad del informe todavía debe mejorar. No constituye una medición de tasa de detección ni sustituye una auditoría de seguridad.

Límites y próximos pasos

El listado no es recursivo y los archivos largos se recortan sin paginación, por lo que la inspección de repositorios grandes puede ser parcial. No hay memoria persistente de revisiones ni corrección automática de código.

Los siguientes pasos son lectura por páginas, cobertura explícita, fragmentos de código para justificar cada hallazgo y un conjunto etiquetado de ejemplos vulnerables y seguros. Esto permitiría medir precisión y omisiones en lugar de evaluar al agente por lo convincente que resulta.

Construir / Verificar / Aprender

Evidencia, más que adjetivos.

Ejemplo con fallos conocidos

Un archivo Python deliberadamente inseguro incluye inyección SQL, eval() y una contraseña fija como objetivos concretos de revisión.

GitHub

Comprobación de herramientas

try_tools.py comprueba listado, lectura y rechazo de una ruta fuera de la raíz. Es una comprobación básica, no una suite exhaustiva.

GitHub
Siguiente caso

OpenCode Voice Input