
Plataforma prática de laboratório de segurança de IA com mais de 50 cenários abrangendo injeção de prompts, exploração de sistemas agentivos, manipulação de modelos e ataques a limites de confiança MCP. Utiliza Ollama + FastAPI + React para prática segura ofensiva/defensiva.
AIVP é uma plataforma prática de laboratório de segurança de IA abrangendo 4 fases e 50+ laboratórios (atualmente 50+ cenários na base de código). Ele combina Ollama + Llama 3.1, um backend FastAPI e um frontend React/Vite para permitir que profissionais pratiquem técnicas ofensivas e defensivas de segurança em IA de forma segura.
Se isto te ajudar, por favor, ⭐ marque com estrela / curta o repositório, faça um fork e fique à vontade para abrir PRs!
Use o guia de execução dedicado: RUN_STEPS.md. Ele aborda os fluxos manual (Vite + uvicorn) e Docker (nginx + API + Redis, Ollama no host), incluindo pré-requisitos para acesso confiável aos laboratórios.
O comportamento da configuração é rigoroso em caminhos de execução ativos: valores de ambiente ausentes podem causar falha na inicialização por design.
A plataforma cobre quatro trilhas de treinamento:
Cada laboratório usa segredos dinâmicos por laboratório e validação explícita para que você possa verificar o sucesso do exploit em um ambiente seguro.
Apenas para Uso Educacional — Os laboratórios simulam cenários ofensivos e defensivos de segurança em IA em sistemas locais. Não direcione serviços, dados ou infraestrutura reais que você não possua ou não tenha permissão explícita para testar. Os segredos nestes laboratórios são sintéticos e regenerados por laboratório; não são credenciais de produção. Use por sua conta e risco. Nenhuma garantia é fornecida.
POST /api/labs/{lab}/chatBaixe um modelo pelo menos uma vez:
ollama pull llama3.1(ou outra variante compatível com llama3.1 de sua preferência)
apps/
api/ # Backend FastAPI (SSE -> Ollama)
main.py
requirements.txt
.env.example
web/ # Frontend React + Vite
src/
.env.example
Dica: 16 GB de RAM funcionam; 32 GB oferecem folga confortável para navegador, Node, Python e IDE.
A partir da raiz do repositório (a pasta que contém apps\api e apps\web):
# 0) Certifique-se de que o modelo está disponível
ollama pull llama3.1
# 1) Backend venv + dependências + execução
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
Abra uma nova janela do PowerShell para o frontend:
cd apps/web
npm install
copy .env.example .env
npm run dev # http://localhost:5173
# 0) Modelo
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
Em outro shell:
cd apps/web
npm install
cp .env.example .env
npm run dev # http://localhost:5173
ollama serve se necessário).ollama pull llama3.1.:8000.:5173.O frontend faz streaming de Eventos Enviados pelo Servidor (SSE) a partir do backend; certifique-se de que as origens CORS em
apps/api/.envincluamhttp://localhost:5173.
Formatos de ID de laboratório aceitos (pelo backend): PI-01, PI_01, pi01, p01 → todos normalizam para PI_01.
Segredos dinâmicos são criados na primeira vez que um laboratório é usado após uma reinicialização do backend. Você também pode redefinir um segredo:
POST /api/secrets/reset/{labId}
O segredo de cada laboratório é diferente e regenerado na reinicialização do backend (em memória). Considere fazer backup com um arquivo/banco de dados se precisar de persistência.
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)# Desenvolvimento local: URL completa para a API (Vite faz proxy de /api no vite.config também)
VITE_API_BASE=http://localhost:8000/api
VITE_DEV_API_TARGET=http://localhost:8000
[email protected]
Construções Docker / estilo produção usam VITE_API_BASE=/api para que o navegador use caminhos de mesma origem por trás do nginx (veja RUN_STEPS.md → Opção B).
POST /api/labs/{lab}/chat — Stream SSE com data: {"content": "..."}POST /api/secrets/validate — { labId, answer } → { success, message }POST /api/secrets/reset/{lab} — (opcional, para teste)Adicione suas capturas de tela em docs/screenshots/ e referencie-as aqui:




``
Execute npm install dentro de apps/web.
``
Adicione from typing import Iterator (ou remova a anotação) em main.py.
CORS / SSE bloqueado
Certifique-se de que CORS_ORIGINS inclua http://localhost:5173.
Erros do Ollama
Certifique-se de que ollama serve está em execução e o modelo foi baixado: ollama pull llama3.1.
Teste rápido com curl
curl -N -X POST http://localhost:8000/api/labs/PI_01/chat \
-H "Content-Type: application/json" \
-d '{"prompt":"Diga olá em uma frase."}'
Você deve ver linhas de streaming como data: {"content":"Olá …"}.
Contribuições são bem-vindas! Por favor:
Áreas sugeridas:
Se você encontrar um bug ou tiver uma ideia:
Se você gostou deste projeto, por favor, ⭐ marque com estrela / curta e compartilhe com outros!
MIT.