akuumaa/prompt-injection-eval
GitHub: akuumaa/prompt-injection-eval
该框架用于以受控、可复现的方式评估 LLM 助手面对直接、间接和隐蔽提示注入攻击时的鲁棒性。
Stars: 0 | Forks: 0
# Prompt Injection 评估框架
本仓库包含一个小型评估框架,用于测试针对基于 LLM 的助手的 prompt injection 攻击。
该项目是在 Mittelhessen 应用技术大学人工智能方向的计算机科学硕士学位课程的硕士研讨会中开发的。
它不是一份官方发布。其目标是构建一个简单的研究原型,用于实验、文档记录和可复现的评估。
## 项目构思
基于 LLM 的应用程序通常会同时使用不同类型的输入。这可能包括系统指令、用户提问以及外部内容,如电子邮件、文档、网页或表格。
Prompt injection 攻击试图将恶意指令放入此上下文中。然后,模型可能会遵循注入的指令,而不是原始任务。
本项目测试如何以简单且受控的方式评估此类攻击。
## 攻击类型
该框架重点关注三种攻击类型:
- **Direct prompt injection**:攻击直接写在用户输入中。
- **Indirect prompt injection**:攻击被放置在外部内容中,例如在电子邮件或文档中。
- **Hidden prompt injection**:攻击被隐藏或混淆,例如在注释、类似元数据的文本或带有不可见字符的文本中。
## 目标
本项目的目标是构建一个小巧且易于理解的评估框架。
该框架应该:
- 使用简单的配置文件进行实验,
- 将任务、攻击、模型访问、metrics 和结果生成分离开来,
- 测试 direct、indirect 和 hidden prompt injection 攻击,
- 自动计算基本评估 metrics,
- 将详细结果保存为 CSV 文件,
- 创建简单的图表以比较攻击类型。
## 指标
该框架计划计算以下 metrics:
- **Task Success Rate**:模型正确回答原始任务的频率。
- **Canary Leakage Rate**:模型输出隐藏 canary 字符串的频率。
- **Attack Success Rate**:达成攻击目标的频率。
- **Refusal Rate**:模型拒绝回答的频率。
- **Injection Detection Rate**:模型明确指出输入包含 prompt injection 尝试的频率。
- **Robust Task Completion Rate**:模型正确回答原始任务且未遵循攻击的频率。
## 计划分析
该项目不仅应检查攻击是成功还是失败。它还应展示不同类型的模型行为。
例如,模型可能会:
- 正确回答原始任务,
- 遵循注入的指令,
- 拒绝整个请求,
- 检测到 prompt injection 但仍正确回答,
- 未能完成原始任务且未泄漏 canary。
计划生成的图表包括:
- 按攻击类型划分的攻击成功率,
- 按攻击类型划分的 metrics 概览,
- 结果分布,
- 用于任务类型和攻击类型的可选热力图。
## 项目结构
```
prompt-injection-eval/
├── data/ # Small synthetic example data
├── configs/ # Experiment and attack configurations
├── results/ # Generated results, ignored by Git
├── scripts/ # Scripts for running experiments
├── src/
│ └── sem_eval/ # Main framework code
│ ├── models/ # Model adapters
│ └── evaluators/ # Metrics and evaluation logic
├── tests/ # Tests
├── README.md
├── pyproject.toml
└── uv.lock
```
## 设置
本项目使用 uv 进行 Python 和依赖项管理。
安装依赖项:
```
uv sync
```
运行当前项目入口点:
```
uv run python main.py
```
之后,可以使用以下命令启动实验:
```
uv run python scripts/run_experiment.py
```
标签:AI安全, Chat Copilot, DLL 劫持, Python, 反取证, 大语言模型, 安全评估, 无后门, 逆向工具