
AIVP è una piattaforma pratica di laboratorio di sicurezza AI che copre 4 fasi e 50+ laboratori (attualmente 50+ scenari nel codebase). Combina Ollama + Llama 3.1, un backend FastAPI e un frontend React/Vite per consentire ai professionisti di esercitarsi in sicurezza su tecniche offensive e difensive di sicurezza AI.
Se questo progetto ti è utile, per favore ⭐ metti una stella / metti mi piace al repo, fai un fork, e sentiti libero di aprire PR!
Usa la guida dedicata: RUN_STEPS.md. Copre i flussi manuale (Vite + uvicorn) e Docker (nginx + API + Redis, Ollama sull'host), inclusi i prerequisiti per un accesso affidabile ai laboratori.
Il comportamento della configurazione è rigoroso nei percorsi di runtime attivi: i valori env obbligatori mancanti possono far fallire l'avvio per progettazione.
La piattaforma copre quattro percorsi formativi:
Ogni laboratorio usa segreti dinamici specifici e una validazione esplicita, così puoi verificare il successo dell'exploit in un ambiente sicuro.
Solo a scopo educativo — I laboratori simulano scenari di sicurezza AI offensivi e difensivi su sistemi locali. Non prendere di mira servizi, dati o infrastrutture reali che non possiedi o per cui non hai esplicita autorizzazione al test. I segreti in questi laboratori sono sintetici e rigenerati per ogni laboratorio; non sono credenziali di produzione. Utilizzo a proprio rischio. Nessuna garanzia fornita.
POST /api/labs/{lab}/chatEsegui il pull del modello almeno una volta:
ollama pull llama3.1(o un'altra variante compatibile con llama3.1 che preferisci)
apps/
api/ # Backend FastAPI (SSE -> Ollama)
main.py
requirements.txt
.env.example
web/ # Frontend React + Vite
src/
.env.example
Suggerimento: 16 GB di RAM di sistema funzionano; 32 GB offrono un margine confortevole per browser, Node, Python e IDE.
Dalla radice del repo (la cartella che contiene apps\api e apps\web):
# 0) Assicurati che il modello sia disponibile
ollama pull llama3.1
# 1) venv backend + dipendenze + avvio
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
Apri una nuova finestra PowerShell per il frontend:
cd apps/web
npm install
copy .env.example .env
npm run dev # http://localhost:5173
# 0) Modello
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
In un'altra shell:
cd apps/web
npm install
cp .env.example .env
npm run dev # http://localhost:5173
ollama serve se necessario).ollama pull llama3.1.:8000.:5173.Il frontend riceve in streaming gli eventi Server‑Sent Events (SSE) dal backend; assicurati che le origini CORS in
apps/api/.envincludanohttp://localhost:5173.
Formati ID laboratorio accettati (dal backend): PI-01, PI_01, pi01, p01 → tutti normalizzati a PI_01.
Segreti dinamici vengono creati al primo utilizzo di un laboratorio dopo un riavvio del backend. Puoi anche reimpostare un segreto:
POST /api/secrets/reset/{labId}
Il segreto di ogni laboratorio è diverso e viene rigenerato al riavvio del backend (in memoria). Valuta di usare un file/DB come supporto se ti serve la persistenza.
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)# Sviluppo locale: URL completo dell'API (Vite inoltra /api anche in vite.config)
VITE_API_BASE=http://localhost:8000/api
VITE_DEV_API_TARGET=http://localhost:8000
[email protected]
Le build in stile Docker/produzione usano VITE_API_BASE=/api così il browser usa percorsi same-origin dietro nginx (vedi RUN_STEPS.md → Opzione B).
POST /api/labs/{lab}/chat — stream SSE con data: {"content": "..."}POST /api/secrets/validate — { labId, answer } → { success, message }POST /api/secrets/reset/{lab} — (opzionale, per test)Aggiungi i tuoi screenshot in docs/screenshots/ e referenziali qui:




``
Esegui npm install dentro apps/web.
``
Aggiungi from typing import Iterator (o rimuovi l'annotazione) in main.py.
CORS / SSE bloccati
Assicurati che CORS_ORIGINS includa http://localhost:5173.
Errori di Ollama
Assicurati che ollama serve sia in esecuzione e che il modello sia stato scaricato: ollama pull llama3.1.
Verifica rapida 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."}'
Dovresti vedere righe in streaming come data: {"content":"Hello …"}.
I contributi sono benvenuti! Per favore:
Aree suggerite:
Se trovi un bug o hai un'idea:
Se ti piace questo progetto, per favore ⭐ metti una stella / metti mi piace e condividilo con altri!
MIT.