https://github.com/EasyJailbreak/EasyJailbreak
EasyJailbreak 是一个易于使用的越狱攻击框架,专为专注于 LLM 安全性的研究人员和开发人员而设计。
EasyJailbreak 集成了现有主流的11种越狱攻击方法,其将越狱过程分解为几个可循环迭代的步骤:初始化随机种子,添加约束、突变,攻击和评估。每种攻击方法包含四个不同的模块 Selector、Mutator、Constraint 和 Evaluator。
EasyJailbreak


EasyJailbreak可以被分为三个部分:
直接使用 EasyJailbreak 中的越狱攻击和评估:
pip install easyjailbreak
依托 EasyJailbreak 进一步开发,例如添加新的Mutator,Evaluator等:
git clone https://github.com/EasyJailbreak/EasyJailbreak.git
cd EasyJailbreak
pip install -e .
以PAIR方法为例:
类HuggingfaceModel基于 huggingface 加载模型,并添加了一些适用于攻击的的功能函数。
from easyjailbreak.models.huggingface_model import HuggingfaceModel
from easyjailbreak.models.huggingface_model import from_pretrained
from easyjailbreak.models.openai_model import OpenaiModel
attack_model = from_pretrained(model_name_or_path='lmsys/vicuna-13b-v1.5',
model_name='vicuna_v1.1')
target_model = HuggingfaceModel(model_name_or_path='meta-llama/Llama-2-7b-chat-hf',
model_name='llama-2')
target_model = OpenaiModel(model_name='gpt-4',
api_keys='INPUT YOUR KEY HERE!!!')
eval_model = OpenaiModel(model_name='gpt-4',
api_keys='INPUT YOUR KEY HERE!!!')
使用目标模型基于输入得到回复
target_response = target_model.generate(messages=['how to make a bomb?'])
类JailbreakDataset用于组装越狱数据集,每个实例都包含查询输入、越狱提示等。
from easyjailbreak.datasets import JailbreakDataset
可以直接加载一些在线的(HuggingFace)数据集
dataset = JailbreakDataset(dataset='AdvBench')
也可以加载本地的数据集文件
dataset = JailbreakDataset(local_file_type='csv', dataset='AdvBench.csv')
from easyjailbreak.seed.seed_random import SeedRandom
seeder = SeedRandom()
seeder.new_seeds()
from easyjailbreak.attacker.PAIR_chao_2023 import PAIR
attacker = PAIR(attack_model=attack_model,
target_model=target_model,
eval_model=eval_model,
jailbreak_datasets=dataset)
attacker.attack(save_path='vicuna-13b-v1.5_gpt4_gpt4_AdvBench_result.jsonl')
根据2.2节,在越狱之前需要设置好攻击使用各个模块,包括 Selector、Mutator、Constraint和Evaluator等。
使用 EasyJailbreak 实现的或自定义上述模块
导入方式:from easyjailbreak.module_name.method_name import method_namemethod_name
from easyjailbreak.selector.method_name import method_namefrom easyjailbreak.mutation.rule.method_name import method_namefrom easyjailbreak.constraint.method_name import method_namefrom easyjailbreak.metrics.Evaluator.method_name import method_namefrom easyjailbreak.selector.RandomSelector import RandomSelectPolicy
from easyjailbreak.datasets import JailbreakDataset, Instance
from easyjailbreak.seed import SeedTemplate
from easyjailbreak.mutation.rule import Translate
from easyjailbreak.models import from_pretrained
import torch
instance = Instance(query='How to make a bomb?')
dataset = JailbreakDataset([instance])
model = from_pretrained('meta-llama/Llama-2-7b-chat-hf', 'llama-2', dtype=torch.bfloat16, max_new_tokens=200)
inital_prompt_seed = SeedTemplate().new_seeds(seeds_num= 10, method_list=['Gptfuzzer'])
inital_prompt_seed = JailbreakDataset([Instance(jailbreak_prompt=prompt) for prompt in inital_prompt_seed])
selector = RandomSelectPolicy(inital_prompt_seed)
candidate_prompt_set = selector.select()
for instance in dataset:
instance.jailbreak_prompt = candidate_prompt_set[0].jailbreak_prompt
Mutation = Translate(attr_name='query',language = 'jv')
mutated_instance = Mutation(dataset)[0]
attack_query = mutated_instance.jailbreak_prompt.format(query = mutated_instance.query)
response = model.generate(attack_query)