swagger3x/art-hub

GitHub: swagger3x/art-hub

一个基于 Django 的 AI 红队安全意识培训平台,通过模拟的提示词注入和对抗性 ML 实验室帮助学员学习 AI 安全知识。

Stars: 0 | Forks: 0

# ART-Hub 一个用于 AI 红队和对抗安全意识培训的平台。 学员将通过一系列简短的模块进行学习 —— 一门课程、一个提示词注入实验室,以及一个对抗性 ML 实验室 —— 所有的尝试都会被记录下来,以便讲师可以在 Django 管理后台审查进度。 本仓库是 MVP 脚手架:一个单一的 Django 项目,使用带有 HTMX 的服务端渲染模板来实现交互部分,没有单独的前端构建。 ## 目录 - [概述](#overview) - [架构](#architecture) - [环境要求](#requirements) - [本地配置](#local-setup) - [配置说明](#configuration) - [项目结构](#project-layout) - [实验室引擎](#the-lab-engine) - [数据模型](#data-model) - [测试](#testing) - [部署](#deployment) ## 概述 ART-Hub 内置了三个预置模块: | 模块 | 类型 | 学员需要做什么 | | --- | --- | --- | | AI 安全意识 | `awareness` | 阅读课程并将其标记为已完成 | | 提示词注入实验室 | `injection` | 提交提示词,尝试让模拟的助手泄露机密 | | 对抗性 ML 实验室 | `adversarial_ml` | 调整扰动强度并观察模拟分类器的性能退化 | 一旦用户针对某个模块记录了一次通过的提交,该模块即被视为已完成。仪表板会反映每个用户的该状态。 **实验室是模拟的。** 没有调用任何语言模型或分类器。实验室的行为由小型的确定性规则集生成,这使得 MVP 运行快速、免费,且能够安全地暴露给不受信任的输入。替换为真实执行的接口已在[实验室引擎](#the-lab-engine)中记录。 ## 架构 ``` Browser ──HTTP/HTMX──▶ Django views ──▶ run_lab() ──▶ rules module ▲ │ │ └────── HTML fragment ───┘ │ └──▶ Submission (Postgres) ◀──┘ ``` - **Django 5** 单体应用 —— 认证、模块、实验室和管理后台集成在一个可部署单元中。 - 生产环境使用 **PostgreSQL**,本地开发默认使用 SQLite。 - **HTMX**(从 CDN 加载)发送实验室尝试请求,并将渲染的结果片段替换到页面中。没有 SPA,没有构建步骤,也没有打包工具。 - **WhiteNoise** 用于从应用进程中提供压缩且带有哈希值的静态文件。 ## 环境要求 - Python 3.11+ - PostgreSQL(仅限生产环境 —— 本地开发默认使用 SQLite) ## 本地配置 ``` python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt cp .env.example .env # then edit SECRET_KEY python manage.py makemigrations # no migrations are committed yet python manage.py migrate python manage.py loaddata modules/fixtures/modules.json python manage.py createsuperuser python manage.py runserver ``` | URL | 用途 | | --- | --- | | http://127.0.0.1:8000/ | 学员仪表板(需要登录) | | http://127.0.0.1:8000/accounts/signup/ | 自助注册 | | http://127.0.0.1:8000/admin/ | 管理后台 —— 模块、用户、提交记录 | ## 配置说明 所有配置均通过 `django-environ` 从环境变量中读取,在开发环境下会自动加载 `.env` 文件。请参阅 `.env.example`。 | 变量 | 默认值 | 备注 | | --- | --- | --- | | `SECRET_KEY` | 仅用于开发的备用值 | 在生产环境中必须设置为随机值 | | `DEBUG` | `False` | 仅在本地开发时设置为 `True` | | `DATABASE_URL` | `sqlite:///db.sqlite3` | 任何 `django-environ` 支持的 URL,例如 `postgres://…` | | `ALLOWED_HOSTS` | `localhost,127.0.0.1` | 以逗号分隔 | ## 项目结构 ``` art_hub/ Django project — settings, URLs, WSGI/ASGI entrypoints accounts/ Custom User model with a role field, signup and auth URLs modules/ Module catalogue, learner dashboard, seed fixtures labs/ Lab engine, rule sets, Submission model and admin templates/ Base layout, dashboard, one template per lab type static/css/ Stylesheet (no build step) tests/ Test suite render.yaml Render.com blueprint (web service + Postgres) ``` 路由: | 路径 | 应用 | | --- | --- | | `/` | `modules` —— 仪表板 | | `/labs//` | `labs` —— 实验室详情和提交 | | `/accounts/` | `accounts` —— 注册、登录、登出 | | `/admin/` | Django 管理后台 | ## 实验室引擎 `labs/engine.py` 只公开了一个公共函数: ``` run_lab(module: Module, user_input) -> dict ``` 它返回 `{"matched_rule": str | None, "output_shown": str, "passed": bool}`。 所有的视图、管理操作和报告都会经过这个函数,没有例外。它会根据 `module.type` 分发到 `labs/rules/` 中的规则模块: - **`prompt_injection.py`** —— 将输入与一系列已知的注入模式进行匹配(指令覆盖、角色重分配、角色扮演越狱、提示词探测、编码技巧)。如果匹配成功,则返回预设的“已泄露”机密并通过测试;其他情况则返回预设的拒绝。 - **`adversarial_ml.py`** —— 将扰动强度(0–100,包含边界值)映射到四种预设的分类器输出之一,用于演示置信度下降和最终的错误分类。通过的条件是达到错误分类状态。 `awareness` 模块没有引擎;视图会直接将其标记为已完成。 **扩展。** 要添加一种实验室类型:添加一个 `Module.Type` 选项,添加一个包含 `run(user_input) -> dict` 方法的规则模块,在 `ENGINES` 中注册它,最后在 `labs/views.py` 的 `TEMPLATE_MAP` 中添加对应的模板。如果要用真实的模型执行替换模拟逻辑,只需更改 `run_lab()` 的内部实现即可 —— 调用方和存储的结果结构保持不变。 ## 数据模型 - **`accounts.User`** —— 继承自 `AbstractUser`,扩展了 `role`(`user` | `admin`)字段和一个 `is_admin_role` 辅助方法。 - **`modules.Module`** —— 包含 `slug`、`title`、`type`、`order`、`lesson_content`。按 `order` 排序;三个 MVP 模块作为 fixture 预置。 - **`labs.Submission`** —— 每次尝试对应一条记录:包含 `user`、`module`、`input_data`、`matched_rule`、`output_shown`、`passed`、`created_at`。这是审计轨迹,也是仪表板完成状态的数据来源。支持在管理后台中按模块和结果进行筛选。 ## 测试 ``` python manage.py test ``` `tests/test_engine.py` 涵盖了两个规则集的引擎契约:检测到的注入模式与良性输入的对比,以及高扰动强度与低扰动强度的对比。 ## 部署 `render.yaml` 是一个 Render 蓝图,用于同时配置 Python Web 服务和 Postgres 实例: - **构建(Build)** —— 安装依赖,然后执行 `collectstatic` - **部署前(Pre-deploy)** —— 执行 `migrate`(在流量切换到新版本之前运行) - **启动(Start)** —— 执行 `gunicorn art_hub.wsgi:application` - **环境变量(Env)** —— 由 Render 生成的 `SECRET_KEY`,`DEBUG=false`,以及从配置的数据库注入的 `DATABASE_URL` 在首次部署之前,请将 `ALLOWED_HOSTS` 设置为服务的主机名,并提交生成的 migrations。
标签:AI红队, Django, HTMX, 安全培训平台, 测试用例, 逆向工具