
Практическая платформа для лаборатории по безопасности ИИ с более чем 50 сценариями, охватывающими внедрение промптов, эксплуатацию агентных систем, манипуляцию моделями и атаки на границы доверия MCP. Использует Ollama + FastAPI + React для безопасной практики нападения и защиты.
AIVP — это практическая платформа для лабораторных работ по безопасности ИИ, охватывающая 4 фазы и 50+ лабораторных работ (на данный момент в кодовой базе 50+ сценариев). Она объединяет Ollama + Llama 3.1, бэкенд на FastAPI и фронтенд на React/Vite, позволяя специалистам безопасно отрабатывать атакующие и защитные техники безопасности ИИ.
Если этот проект вам помог, пожалуйста, ⭐ поставьте звезду / отметьте репозиторий, форкните его и смело открывайте PR!
Используйте отдельное руководство по запуску: RUN_STEPS.md. В нём описаны ручной (Vite + uvicorn) и Docker (nginx + API + Redis, Ollama на хосте) способы запуска, включая предварительные требования для стабильного доступа к лабораторным работам.
Поведение конфигурации строгое в активных путях выполнения: отсутствие обязательных значений env может привести к сбою запуска — это сделано намеренно.
Платформа охватывает четыре учебных трека:
Каждая лабораторная работа использует динамические секреты и явную проверку, чтобы вы могли убедиться в успешности эксплуатации в безопасной среде.
Только в образовательных целях — Лабораторные работы моделируют атакующие и защитные сценарии безопасности ИИ на локальных системах. Не направляйте атаки на реальные сервисы, данные или инфраструктуру, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Секреты в этих лабораторных работах синтетические и регенерируются для каждой работы; это не рабочие учётные данные. Используйте на свой страх и риск. Никаких гарантий не предоставляется.
POST /api/labs/{lab}/chatХотя бы один раз загрузите модель:
ollama pull llama3.1(или другой совместимый с llama3.1 вариант, который вам нравится)
apps/
api/ # FastAPI backend (SSE -> Ollama)
main.py
requirements.txt
.env.example
web/ # React + Vite frontend
src/
.env.example
Совет: 16 ГБ системной ОЗУ достаточно; 32 ГБ дают комфортный запас для браузера, Node, Python и IDE.
Из корня репозитория (папки, содержащей apps\api и 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
Откройте новое окно PowerShell для фронтенда:
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
В другом терминале:
cd apps/web
npm install
cp .env.example .env
npm run dev # http://localhost:5173
ollama serve, если необходимо).ollama pull llama3.1.:8000.:5173.Фронтенд получает потоковые Server-Sent Events (SSE) от бэкенда; убедитесь, что CORS-источники в
apps/api/.envвключаютhttp://localhost:5173.
Принимаемые форматы ID лабораторных работ (бэкендом): PI-01, PI_01, pi01, p01 → все нормализуются к PI_01.
Динамические секреты создаются при первом использовании лабораторной работы после перезапуска бэкенда. Вы также можете сбросить секрет:
POST /api/secrets/reset/{labId}
Секрет каждой лабораторной работы уникален и регенерируется при перезапуске бэкенда (в памяти). Если нужна персистентность, рассмотрите хранение в файле/БД.
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-сборки и сборки в стиле продакшена используют VITE_API_BASE=/api, чтобы браузер обращался к путям того же источника за nginx (см. RUN_STEPS.md → Вариант B).
POST /api/labs/{lab}/chat — поток SSE с data: {"content": "..."}POST /api/secrets/validate — { labId, answer } → { success, message }POST /api/secrets/reset/{lab} — (необязательно, для тестирования)Добавьте свои скриншоты в docs/screenshots/ и укажите их здесь:




``
Выполните npm install внутри apps/web.
``
Добавьте from typing import Iterator (или удалите аннотацию) в main.py.
CORS / SSE заблокированы
Убедитесь, что CORS_ORIGINS включает http://localhost:5173.
Ошибки Ollama
Убедитесь, что ollama serve запущен и модель загружена: ollama pull llama3.1.
Проверка с помощью 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."}'
Вы должны увидеть потоковые строки вида data: {"content":"Hello …"}.
Мы приветствуем ваш вклад! Пожалуйста:
Предлагаемые направления:
Если вы нашли ошибку или у вас есть идея:
Если вам нравится этот проект, пожалуйста, ⭐ поставьте звезду / отметьте его и поделитесь с другими!
MIT.