动手实操的AI安全实验室平台,涵盖50多个场景,涉及提示注入、智能体系统利用、模型操纵以及MCP信任边界攻击。采用Ollama + FastAPI + React构建,用于安全的攻防演练实践。
AIVP 是一个动手实践的 AI 安全实验平台,涵盖 4 个阶段和 50+ 个实验(目前代码库中有 50+ 个场景)。它结合了 Ollama + Llama 3.1、FastAPI 后端和 React/Vite 前端,让从业者能够安全地演练攻防两端的 AI 安全技术。
如果这个项目对你有帮助,请 ⭐ star / 点赞 该仓库、fork 它,并随时欢迎提交 PR!
请使用专门的运行指南:RUN_STEPS.md。它涵盖了手动(Vite + uvicorn)和 Docker(nginx + API + Redis,Ollama 在宿主机上)两种方式,包括可靠访问实验所需的前置条件。
实际运行路径中的配置行为是严格的:缺少必需的 env 值会按设计导致启动失败。
该平台涵盖四条训练路线:
每个实验都使用动态的、按实验区分的密钥和显式验证,让你可以在安全的环境中验证利用是否成功。
仅供教育用途——这些实验在本地系统上模拟攻防两端的 AI 安全场景。请不要针对你不拥有或未经明确授权测试的真实服务、数据或基础设施。这些实验中的密钥是合成的,并按实验重新生成;它们不是生产环境凭据。请自行承担使用风险。不提供任何担保。
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 GB 系统内存可用;32 GB 可为浏览器、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
在另一个 shell 中:
cd apps/web
npm install
cp .env.example .env
npm run dev # http://localhost:5173
ollama serve)。ollama pull llama3.1。:8000 上运行后端(FastAPI)。:5173 上运行前端(Vite)。前端从后端流式接收服务器推送事件(SSE);请确保
apps/api/.env中的 CORS origins 包含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/ 目录下,并在此处引用:




``
在 apps/web 内运行 npm install。
``
在 main.py 中添加 from typing import Iterator(或移除该注解)。
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 …"} 的流式输出行。
欢迎贡献!请:
建议的方向:
如果你发现 Bug 或有想法:
如果你喜欢这个项目,请 ⭐ star / 点赞 并分享给其他人!
MIT。