
Plataforma de laboratorio práctico de seguridad de IA con más de 50 escenarios que cubren inyección de prompts, explotación de sistemas agénticos, manipulación de modelos y ataques a límites de confianza de MCP. Utiliza Ollama + FastAPI + React para práctica ofensiva/defensiva segura.
AIVP es una plataforma práctica de laboratorio de seguridad de IA que abarca 4 fases y más de 50 laboratorios (actualmente más de 50 escenarios en todo el código base). Combina Ollama + Llama 3.1, un backend FastAPI y un frontend React/Vite para que los profesionales puedan practicar de forma segura técnicas ofensivas y defensivas de seguridad de IA.
Si esto te resulta útil, por favor ⭐ marca / dale like al repositorio, haz fork y no dudes en abrir PRs.
Usa la guía de ejecución dedicada: RUN_STEPS.md. Cubre los métodos manual (Vite + uvicorn) y Docker (nginx + API + Redis, Ollama en el host), incluidos los requisitos previos para un acceso fiable a los laboratorios.
El comportamiento de la configuración es estricto en las rutas de ejecución activas: la falta de valores de entorno requeridos puede provocar un fallo al iniciar por diseño.
La plataforma cubre cuatro pistas de entrenamiento:
Cada laboratorio usa secretos dinámicos por laboratorio y validación explícita para que puedas verificar el éxito del exploit en un entorno seguro.
Solo para uso educativo — Los laboratorios simulan escenarios ofensivos y defensivos de seguridad de IA en sistemas locales. No ataques servicios, datos o infraestructura reales que no poseas o para los que no tengas permiso explícito de prueba. Los secretos de estos laboratorios son sintéticos y se regeneran por laboratorio; no son credenciales de producción. Úsalo bajo tu propio riesgo. No se ofrece garantía alguna.
POST /api/labs/{lab}/chatDescarga un modelo al menos una vez:
ollama pull llama3.1(u otra variante compatible con llama3.1 que prefieras)
apps/
api/ # FastAPI backend (SSE -> Ollama)
main.py
requirements.txt
.env.example
web/ # React + Vite frontend
src/
.env.example
Consejo: 16 GB de RAM del sistema funcionan; 32 GB ofrecen un margen cómodo para navegador, Node, Python e IDE.
Desde la raíz del repositorio (la carpeta que contiene apps\api y apps\web):
# 0) Ensure the model is available
ollama pull llama3.1
# 1) Backend venv + deps + run
cd apps/api
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
uvicorn main:app --reload --port 8000
Abre una ventana nueva de PowerShell para el frontend:
cd apps/web
npm install
copy .env.example .env
npm run dev # http://localhost:5173
# 0) Model
ollama pull llama3.1
# 1) Backend
cd apps/api
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn main:app --reload --port 8000
En otra terminal:
cd apps/web
npm install
cp .env.example .env
npm run dev # http://localhost:5173
ollama serve si es necesario).ollama pull llama3.1.:8000.:5173.El frontend transmite Server‑Sent Events (SSE) desde el backend; asegúrate de que los orígenes CORS en
apps/api/.envincluyanhttp://localhost:5173.
Formatos de ID de laboratorio aceptados (por el backend): PI-01, PI_01, pi01, p01 → todos se normalizan a PI_01.
Los secretos dinámicos se crean la primera vez que se usa un laboratorio después de reiniciar el backend. También puedes restablecer un secreto:
POST /api/secrets/reset/{labId}
El secreto de cada laboratorio es diferente y se regenera al reiniciar el backend (en memoria). Considera respaldarlo con un archivo/BD si necesitas persistencia.
apps/api/.env)OLLAMA_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1
CORS_ORIGINS=http://localhost:5173
SERVER_SALT=change-me-in-production
AIVP_DEFAULT_MODE=off
ENABLE_TRAINING_LABS=false
OLLAMA_MODEL_TRAINING_LABS=llama3.1
REDIS_URL=redis://localhost:6379/0
REDIS_HOST=localhost
REDIS_PORT=6379
MEMORY_TTL_SECONDS=3600
SESSION_TTL_SECONDS=3600
AGENT_B_URL=http://localhost:8001
MM_API_BASE=http://localhost:8000
API_BASE_URL=http://localhost:8000
JIRA_URL=https://example.atlassian.net
GITHUB_API_BASE_URL=https://api.github.com
SLACK_API_BASE_URL=https://slack.com/api
apps/web/.env)# Local dev: full URL to the API (Vite proxies /api in vite.config as well)
VITE_API_BASE=http://localhost:8000/api
VITE_DEV_API_TARGET=http://localhost:8000
[email protected]
Docker / los builds de estilo producción usan VITE_API_BASE=/api para que el navegador use rutas de mismo origen detrás de nginx (consulta RUN_STEPS.md → Opción B).
POST /api/labs/{lab}/chat — flujo SSE con data: {"content": "..."}POST /api/secrets/validate — { labId, answer } → { success, message }POST /api/secrets/reset/{lab} — (opcional, para pruebas)Añade tus capturas de pantalla en docs/screenshots/ y refiérelas aquí:




``
Ejecuta npm install dentro de apps/web.
``
Añade from typing import Iterator (o elimina la anotación) en main.py.
CORS / SSE bloqueado
Asegúrate de que CORS_ORIGINS incluya http://localhost:5173.
Errores de Ollama
Asegúrate de que ollama serve esté ejecutándose y que el modelo esté descargado: ollama pull llama3.1.
Comprobación con curl
curl -N -X POST http://localhost:8000/api/labs/PI_01/chat \
-H "Content-Type: application/json" \
-d '{"prompt":"Say hello in one sentence."}'
Deberías ver líneas de streaming como data: {"content":"Hello …"}.
¡Las contribuciones son bienvenidas! Por favor:
Áreas sugeridas:
Si detectas un error o tienes una idea:
Si te gusta este proyecto, por favor ⭐ marca / dale like y ¡compártelo con otros!
MIT.