mcjksieu005/prompt_injection_battle
GitHub: mcjksieu005/prompt_injection_battle
面向教育营队活动的实时 AI 提示词攻防对抗游戏平台,让参与者通过红蓝对抗体验 prompt injection 的攻击与防御。
Stars: 0 | Forks: 0
# AI 關鍵字攻防 - 三驗企劃書
資訊營AI組 周宗穎
GitHub連結:https://github.com/mcjksieu005/prompt_injection_battle
## 測試網站連結
- 記分板:http://ws1.csie.ntu.edu.tw:6767/prompt_battle/scoreboard/
- 後台:http://ws1.csie.ntu.edu.tw:6767/prompt_battle/admin/
- 帳號:admin
- 密碼:6767
- 紅隊:http://ws1.csie.ntu.edu.tw:6767/prompt_battle/team?team=red
- 帳號:red
- 密碼:114514
- 藍隊:http://ws1.csie.ntu.edu.tw:6767/prompt_battle/team?team=blue
- 帳號:blue
- 密碼:1919810
## 遊戲簡介
該遊戲改編自李宏毅老師課程 GenAI 2025 HW4 和 ML 2026 HW1,讓小隊員體驗 prompt injection,嘗試誘導對方模型輸出不該輸出的關鍵字,同時加強自己模型防禦使得關鍵字不被輸出。
## 遊戲配置
| 項目 | 描述 |
|------|------|
| 參與人員 | 20名小隊員分為 Team A、Team B 對抗,可自行分工撰寫 defense prompt 或 attack prompt |
| 題目形式 | 關主提供關鍵字清單 (3~5個),由兩組各自撰寫 defense prompt 和 attack prompt |
| 得分方式 | 一條 attack prompt 使對方模型輸出幾個關鍵字 (不重複) 便得幾分 |
| 使用模型 | 一個強度適中的 LLM 模型,聽得進防禦指令,也可以被攻破 (測試版使用 qwen2.5:7b-instruct) |
| 設備需求 | 總共5台電腦:主持人1台、兩隊各2台電腦,可進行基礎分工;網路、投影機 (放映比分與戰況,optional) |
## 遊戲流程
整體時長預計30分鐘
1. **遊戲講解**:講解 LLM 的 prompt 運作原理、如何撰寫 attack 跟 defense prompt,以及一些範例 (參考ML作業題目)
2. **Prompt撰寫**:計時10分鐘,讓各組自行分工,撰寫 defense prompt 跟第一輪的 attack prompt,defense prompt 有字數上限 (暫定為1000 token),attack prompt最多10條
3. **第一次攻擊**:雙方把 defense prompt 放上自己的模型,並把自己的 attack prompt 餵給對方,並宣讀第一輪結果與得分
4. **第二次攻擊**:計時10分鐘,雙方可以編寫新的attack prompt攻擊對方的模型 (15秒 CD),也可以修改自己的 defense prompt (寫好點擊儲存後適用於後續的attack prompt),
5. **遊戲結算**:停止攻擊,並公布雙方分數,宣讀結果,若同分則 defense prompt 的字數少者獲勝 (防禦效率),若依然相同則attack prompt 較少者獲勝 (攻擊強度),若依然相同就判平手
## 運行架構與部署說明 (以下是AI生的)
這是一個基於 FastAPI 與 WebSockets 開發的即時 AI 提示詞攻防遊戲系統。專為營隊活動設計,具備低延遲廣播、雙隊獨立介面、關主後台管理與大螢幕記分板功能。
### 📂 專案架構 (基於 FastAPI + Vanilla JS)
* `backend.py`: 系統後端核心 (狀態機、WebSocket 廣播中心、API 路由)。
* `static/`: 前端靜態資源資料夾。
* `login.html`: 中央登入大廳 (具備 Cookie 身分驗證)。
* `admin.html`: 關主控制台 (賽程切換、設定同步)。
* `team.html`: 雙方小隊操作終端 (紅藍兩隊共用,依 URL 參數動態渲染)。
* `scoreboard.html`: 大螢幕投影專用記分板。
* `old(gradio)/`: 舊版概念驗證 (POC) 程式碼備份。
### 💻 環境建置與啟動流程
建議使用 Python 3.10 以上版本。
**1. 建立並啟動虛擬環境**
python -m venv venv
# Windows
venv\Scripts\activate
# Mac/Linux
source venv/bin/activate
**2. 安裝依賴套件**
pip install -r requirements.txt
**3. 設定環境變數**
請複製 .env.example 並重新命名為 .env,接著填入你的設定值:
OPENROUTER_API_KEY=你的_API_KEY
BASE_PATH=/prompt_battle
ADMIN_PWD=admin123
RED_PWD=red123
BLUE_PWD=blue123
**4. 啟動伺服器**
python backend.py
伺服器啟動後,將會在 http://0.0.0.0:6767 運行。
### 🔗 系統存取路徑
所有使用者請先進入登入大廳,系統會依據身分自動導向:
- 入口網站 (登入大廳):http://localhost:6767/prompt_battle/login
- 強制跳轉目標網址 (供參考):
- 關主後台:.../prompt_battle/admin
- 記分板:.../prompt_battle/scoreboard
- 紅隊終端:.../prompt_battle/team?team=red
- 藍隊終端:.../prompt_battle/team?team=blue
### 🛡️ 安全性設計
- Cookie 攔截:未經登入無法存取任何遊戲頁面。
- 路由隔離:小隊員無法透過修改 URL 參數進入敵對陣營或關主後台。
- 動態禁用:鎖定階段時,前端輸入框將強制觸發系統層級的 disabled,防堵任何鍵盤穿透操作。
标签:AI安全, AI风险缓解, Chat Copilot, DLL 劫持, 后端开发, 大语言模型, 对抗性攻击, 提示词工程, 教学项目, 策略决策点, 逆向工具