
Plateforme de laboratoire de sécurité IA pratique avec plus de 50 scénarios couvrant l'injection de prompts, l'exploitation de systèmes agentiques, la manipulation de modèles et les attaques sur les frontières de confiance MCP. Utilise Ollama + FastAPI + React pour une pratique offensive/défensive en toute sécurité.
AIVP est une plateforme pratique de laboratoires de sécurité IA couvrant 4 phases et 50+ laboratoires (actuellement 50+ scénarios dans la base de code). Elle combine Ollama + Llama 3.1, un backend FastAPI et un frontend React/Vite pour permettre aux praticiens de s'entraîner en toute sécurité aux techniques de sécurité IA offensives et défensives.
Si cela vous aide, merci de ⭐ starrer / liker le dépôt, de le forker, et n'hésitez pas à ouvrir des PR !
Utilisez le guide d'exécution dédié : RUN_STEPS.md. Il couvre le mode manuel (Vite + uvicorn) et Docker (nginx + API + Redis, Ollama sur l'hôte), y compris les prérequis pour un accès fiable aux laboratoires.
Le comportement de la configuration est strict dans les chemins d'exécution actifs : des valeurs d'environnement requises manquantes peuvent faire échouer le démarrage par conception.
La plateforme couvre quatre parcours de formation :
Chaque laboratoire utilise des secrets dynamiques propres à chaque laboratoire et une validation explicite afin que vous puissiez vérifier le succès de l'exploitation dans un environnement sûr.
Usage exclusivement pédagogique — Les laboratoires simulent des scénarios de sécurité IA offensifs et défensifs sur des systèmes locaux. Ne pas cibler de vrais services, données ou infrastructures que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester. Les secrets de ces laboratoires sont synthétiques et régénérés pour chaque laboratoire ; ce ne sont pas des identifiants de production. Utilisation à vos propres risques. Aucune garantie n'est fournie.
POST /api/labs/{lab}/chatTéléchargez un modèle au moins une fois :
ollama pull llama3.1(ou une autre variante compatible llama3.1 de votre choix)
apps/
api/ # FastAPI backend (SSE -> Ollama)
main.py
requirements.txt
.env.example
web/ # React + Vite frontend
src/
.env.example
Conseil : 16 GB de RAM système suffisent ; 32 GB offrent une marge confortable pour le navigateur, Node, Python et l'IDE.
Depuis la racine du dépôt (le dossier qui contient apps\api et 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
Ouvrez une nouvelle fenêtre PowerShell pour le 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
Dans un autre shell :
cd apps/web
npm install
cp .env.example .env
npm run dev # http://localhost:5173
ollama serve si nécessaire).ollama pull llama3.1.:8000.:5173.Le frontend diffuse les événements envoyés par le serveur (SSE) depuis le backend ; assurez-vous que les origines CORS dans
apps/api/.envincluenthttp://localhost:5173.
Formats d'ID de laboratoire acceptés (par le backend) : PI-01, PI_01, pi01, p01 → tous normalisés en PI_01.
Les secrets dynamiques sont créés la première fois qu'un laboratoire est utilisé après un redémarrage du backend. Vous pouvez également réinitialiser un secret :
POST /api/secrets/reset/{labId}
Le secret de chaque laboratoire est différent et régénéré au redémarrage du backend (en mémoire). Envisagez de le persister dans un fichier/une base de données si vous avez besoin de persistance.
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]
Les builds Docker / de type production utilisent VITE_API_BASE=/api afin que le navigateur utilise des chemins de même origine derrière nginx (voir RUN_STEPS.md → Option B).
POST /api/labs/{lab}/chat — flux SSE avec data: {"content": "..."}POST /api/secrets/validate — { labId, answer } → { success, message }POST /api/secrets/reset/{lab} — (facultatif, pour les tests)Ajoutez vos captures d'écran dans docs/screenshots/ et référencez-les ici :




``
Exécutez npm install dans apps/web.
``
Ajoutez from typing import Iterator (ou supprimez l'annotation) dans main.py.
CORS / SSE bloqués
Assurez-vous que CORS_ORIGINS inclut http://localhost:5173.
Erreurs Ollama
Assurez-vous que ollama serve est en cours d'exécution et que le modèle est téléchargé : ollama pull llama3.1.
Vérification rapide avec 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."}'
Vous devriez voir des lignes de streaming comme data: {"content":"Hello …"}.
Les contributions sont les bienvenues ! Merci de :
Suggestions de domaines :
Si vous repérez un bug ou avez une idée :
Si vous aimez ce projet, merci de ⭐ le starrer / liker et de le partager avec d'autres !
MIT.