动手学大模型:大模型越狱攻击
导读: 大模型越狱攻击与工具
想要得到更好的安全,要先从学会攻击开始。让我们了解越狱攻击如何撬开大模型的嘴!
1. 本教程目标:
- 熟悉使用EasyJailbreak工具包;
- 掌握大模型的常用越狱方法的实现与结果;
2. 工作准备:
2.1 了解EasyJailbreak
https://github.com/EasyJailbreak/EasyJailbreak
EasyJailbreak 是一个易于使用的越狱攻击框架,专为专注于 LLM 安全性的研究人员和开发人员而设计。
EasyJailbreak 集成了现有主流的11种越狱攻击方法,其将越狱过程分解为几个可循环迭代的步骤:初始化随机种子,添加约束、突变,攻击和评估。每种攻击方法包含四个不同的模块 Selector、Mutator、Constraint 和 Evaluator。
EasyJailbreak

2.2 主要框架

EasyJailbreak可以被分为三个部分:
- 第一部分是准备攻击和评估所需的 Queries, Config, Models 和 Seed。
- 第二部分是攻击循环,包含两个主要的过程,Mutation(突变)和 Inference(推理)
- Mutation:首先基于 Selector(选择模块)选取合适的越狱提示,然后基于 Mutator(突变模块)变换越狱提示,最后基于 Constraint(限制模块)过滤所需的越狱提示。
- Inference:这一部分基于先前获得的越狱提示攻击目标大模型,并获取模型的回复。然后将回复被送入 Evaluator(评估模块)获取攻击结果。
- 第三部分是得到最终的攻击和评估报告,基于预设的停止机制,结束攻击循环,获取最终的越狱提示、模型回复、攻击结果等。
https://easyjailbreak.github.io/EasyJailbreakDoc.github.io/
3. 安装环境
直接使用 EasyJailbreak 中的越狱攻击和评估:
依托 EasyJailbreak 进一步开发,例如添加新的Mutator,Evaluator等:
4. EasyJailbreak用例
以PAIR方法为例:
1. 加载模型
类HuggingfaceModel基于 huggingface 加载模型,并添加了一些适用于攻击的的功能函数。
使用目标模型基于输入得到回复
2. 加载数据集
类JailbreakDataset用于组装越狱数据集,每个实例都包含查询输入、越狱提示等。
可以直接加载一些在线的(HuggingFace)数据集
也可以加载本地的数据集文件
3. 初始化随机种子
4. 设置攻击方法
5. 实施攻击
自定义越狱攻击(可选)
根据2.2节,在越狱之前需要设置好攻击使用各个模块,包括 Selector、Mutator、Constraint和Evaluator等。
使用 EasyJailbreak 实现的或自定义上述模块
导入方式:``from easyjailbreak.module_name.method_name import method_namemethod_name``
- Selector: ``
from easyjailbreak.selector.method_name import method_name`` - Mutator: ``
from easyjailbreak.mutation.rule.method_name import method_name`` - Constraint: ``
from easyjailbreak.constraint.method_name import method_name`` - Evaluator: ``
from easyjailbreak.metrics.Evaluator.method_name import method_name``
基本攻击流程实现:
1. 设置恶意查询
2. 加载目标模型
3. 设置越狱提示
4. 设置选择器
5. 基于选择器选取合适的越狱提示
6. 基于突变器变换查询/提示
7. 获取目标模型的回复