Volver a Proyectos

🧠 Agente IA Autónomo

Un agente que genera código Python con IA local, lo valida en tres capas y reinyecta sus errores para corregirse

Proyecto académico Ollama local Validación con AST

Escala del Proyecto

9Iteraciones
3Capas de validación
7BModelo local

Descripción General

Práctica de la asignatura de Inteligencia Artificial y, con diferencia, el ejercicio académico más ambicioso del portafolio. La pregunta de partida es: ¿puede un programa pedirle código a un modelo de lenguaje, comprobar si sirve y arreglarlo solo cuando no?

El agente pide a Ollama — modelo qwen2.5-coder:7b corriendo en local — que genere un programa Python, y antes de darlo por bueno lo somete a tres capas de validación: sintaxis mediante el módulo ast, seguridad básica contra una lista de operaciones prohibidas, y funcionamiento real ejecutándolo con subprocess.

El paso que lo convierte en un agente y no en un script es el bucle de realimentación: si la validación falla, el error se analiza, se registra en una memoria y se reinyecta en el siguiente prompt. El modelo recibe su propio fallo como contexto y vuelve a intentarlo.

Tecnologías Utilizadas


Python

Ollama

qwen2.5-coder:7b

módulo ast

subprocess

requests

cron

Las Tres Capas de Validación

  • validar_sintaxis() — parsea el código generado con el módulo ast de Python. Si no compila, no se ejecuta: el error se detecta sin riesgo.
  • validar_seguridad_basica() — busca operaciones prohibidas o peligrosas antes de permitir la ejecución. El modelo no debería generar nada destructivo, pero confiar en eso sería el error.
  • validar_funcionamiento() — ejecuta el programa con subprocess y comprueba que hace lo que se pedía. Es la única capa que verifica la intención, no la forma.
  • validar_codigo() — orquesta las tres en orden, de la más barata y segura a la más costosa y arriesgada.
  • registrar_error() y analizar_error_para_memoria() — convierten el fallo en contexto reutilizable.
  • construir_prompt() — inyecta la memoria de errores en la siguiente petición al modelo.

Progresión del Ejercicio

El proyecto está estructurado como nueve pasos, cada uno un fichero independiente. Se ve con claridad cómo un script mínimo se convierte en un agente con memoria.

  • 001Primer contacto. Documentación: qué es un agente y qué se pretende construir.
  • 002Pequeño agente. Petición mínima a Ollama pidiendo un programa que sume 4+3, guardado en un fichero. Sin ninguna comprobación.
  • 003Validador. El salto importante: se añaden las tres capas de validación — sintaxis con ast, seguridad y ejecución con subprocess.
  • 004Reto más grande. Se sube la dificultad de lo que se le pide generar, para ver dónde falla el modelo.
  • 005Crear memoria. Aparecen registrar_error(), analizar_error_para_memoria() y construir_prompt(): el agente empieza a aprender de sus fallos.
  • 006 y 008Cron. Documentación sobre ejecución programada, para que el agente trabaje sin intervención.
  • 007Agente tonto. Versión deliberadamente simple como punto de comparación.
  • 009Agente un poco más listo. Cambia de tarea: recorre el sistema de ficheros con os.walk(), filtra por extensión, elige un fichero al azar, lee hasta 4000 caracteres y le pide al modelo un análisis que guarda en un informe.

El Bucle de Realimentación

  1. Petición: el agente envía el prompt a Ollama en localhost:11434.
  2. Generación: el modelo devuelve código Python, sin explicaciones.
  3. Validación de sintaxis: se parsea con ast. Si falla, ni se intenta ejecutar.
  4. Validación de seguridad: se comprueba que no contenga operaciones prohibidas.
  5. Ejecución controlada: se lanza con subprocess y se observa el resultado.
  6. Registro del error: si algo ha fallado, el error se analiza y se guarda en la memoria.
  7. Reintento con contexto: el siguiente prompt incluye el error anterior; el modelo tiene ahora información que no tenía.

Qué Aprendí

  • Que un modelo de lenguaje genera código plausible, no código correcto: sin una capa de verificación, la salida no es utilizable.
  • Que ast.parse() permite validar sintaxis sin ejecutar, lo que es la diferencia entre detectar un error y provocar un desastre.
  • Que ejecutar código generado automáticamente es intrínsecamente peligroso, y que la comprobación de seguridad va antes de la ejecución, no después.
  • Que reinyectar el error en el prompt es una técnica sencilla y sorprendentemente eficaz: el modelo corrige fallos que no habría evitado de entrada.
  • Que el orden de las validaciones importa: primero las baratas y seguras, luego las costosas y arriesgadas.

Mi Rol

Autor del ejercicio. Práctica individual de la asignatura de Inteligencia Artificial.

Estado del Proyecto

Ejercicio académico completado, con las nueve iteraciones en el repositorio de apuntes. Requiere Ollama corriendo en local con el modelo descargado.

Código y Enlaces

Ruta dentro del repositorio: Apuntes/012-Inteligencia artificial/011-Agente IA/