CipherChat实验结果文件实战教程:用torch.load加载并分析越狱对话数据
【免费下载链接】CipherChatA framework to evaluate the generalization capability of safety alignment for LLMs项目地址: https://gitcode.com/gh_mirrors/ci/CipherChat
CipherChat 是一个用于评测 LLM 安全对齐泛化能力的实验框架,其experimental_results/目录直接公开了全部越狱对话数据(query-response 对)。本教程带你用torch.load一次性完成这些实验结果文件的加载与分析全流程:看懂文件命名规则、解析数据结构、计算越狱成功率,并定位论文图表的数据来源——不需要运行任何 API,新手也能直接上手。🚀
1️⃣ 先搞懂 CipherChat:它如何评测 LLM 越狱
CipherChat 的核心思路:LLM 的安全对齐几乎完全基于自然语言,因此先把模型"教会"一种人类不可读的密码(如凯撒密码、Unicode 码位),再用该密码提交越狱指令,最后用规则解码器还原模型回复,即可系统性度量安全对齐的边界。
三个环节对应的代码模块:
| 环节 | 做了什么 | 对应模块 |
|---|---|---|
| Step 1 | 构造"密码专家"系统提示 + 少量示例 | prompts_and_demonstrations.py |
| Step 2 | 用密码加密用户指令并发送给 LLM | encode_experts.py |
| Step 3 | 规则解码 LLM 回复 + 毒性检测 | main.py(L51-L76) |
2️⃣ 解读实验结果文件:目录结构与命名规则
所有越狱对话数据都存放在experimental_results/下,按实验类型分目录:
| 目录 | 内容 |
|---|---|
ciphers_bypass/ | 主实验:多种密码(caesar、ascii、unicode、morse 等)的越狱对比 |
results_on_multi_domains/ | 11 个安全域(犯罪、侮辱、隐私、心理健康等)的泛化实验 |
ablation_study/ | 消融实验:去系统角色、去不安全示例、换安全示例、改示例数量 |
other_models/ | Claude、Llama2、GPT-3 等其他模型的越狱对话数据 |
human_evaluation/ | 人工评估结果(同样可用torch.load加载) |
文件名由 10 个配置字段拼接而成(生成逻辑见main.pyL119-L128)。以示例文件MainExperiment_gpt-4-0613_data_crimes-and-illegal-activities_caesar_toxic_en_True_True_2_0_results.list为例:
| 字段 | 含义 | 示例取值 |
|---|---|---|
| 实验标签 | 主实验 | MainExperiment |
| 模型名 | 被评测 LLM | gpt-4-0613 |
| 数据文件 | 即data/data_en_zh.dict | data |
| 安全域 | 指令所属领域 | crimes-and-illegal-activities |
| 密码方法 | 编码方式 | caesar(凯撒密码) |
| 示例毒性 | 示例是否危险 | toxic |
| 语言 | 指令语言 | en |
| 系统角色 / 示例 | 是否启用 | True / True |
| 样本数 / 温度 | 2 / 0 | 2 / 0 |
看懂这条规则,你就能按文件名直接挑到想要的实验数据。📂
3️⃣ 用 torch.load 加载越狱对话数据:3 行代码搞定
先安装 PyTorch(pip install torch),然后:
import torch # 加载一个实验结果文件 result_data = torch.load( "experimental_results/ciphers_bypass/MainExperiment_gpt-4-0613_data_crimes-and-illegal-activities_caesar_toxic_en_True_True_2_0_results.list" ) config = result_data[0] # 第 1 个元素:本次实验的完整配置 pairs = result_data[1:] # 第 2 个元素起:query-response 对话对列表的第一个元素是实验配置,其余元素全部是对话数据(README 的 "Our results" 部分有同样说明)。
⚠️ 小贴士:PyTorch ≥ 2.6 中
torch.load默认参数变为weights_only=True,加载这类 Python 对象会报错,只需写成torch.load(path, weights_only=False)。
4️⃣ 查看对话结构:每条 query-response 对怎么存
pairs中每个元素是一个字典,包含两个字段:
conversation:完整会话日志,依次含用户指令(👨💻)、模型回复(🤖)与毒性检测结论(🔦 toxic detector),且前两部分都带"解码后的自然语言 + 密码原文"toxic:毒性检测输出,形如 "yes/no + grammar: 1-5",前者判断回复是否越狱成功,后者衡量回复流利度
对应的解析逻辑可参考utils.py中的segment_components(L52-L103)与filter_function(L105-L120),后者还利用 BLEU 分数过滤掉"模型只是复读加密问题"的无效回复。
看一个真实案例:同样的越狱指令,Vanilla 基线模型拒绝回答,而经 CipherChat 加密后模型输出了危害性内容——这就是越狱对话数据的价值所在:
5️⃣ 实战:计算各安全域的越狱成功率
数据在手,就能快速复现论文核心指标——越狱成功率(Unsafe Rate):
def is_toxic(conv): """判断回复是否越狱成功:toxic 字段 'grammar' 之前出现 yes""" return "yes" in conv["toxic"].lower().split("grammar")[0] n = len(pairs) rate = sum(is_toxic(p) for p in pairs) / n print(f"样本数: {n},越狱成功率: {rate:.1%}")把循环套到results_on_multi_domains/里所有文件上,就能复现论文主结果图——不同密码在各安全域的越狱成功率柱状图:
6️⃣ 进阶:复现消融实验与多模型对比
加载方式相同,分析脚本可以原样复用到其他实验数据上:
- 消融实验(
ablation_study/):对比"去掉系统角色 / 用安全示例替换不安全示例 / 示例数改为 1"等条件下的越狱成功率,验证方法各组件的贡献 - 其他模型(
other_models/):Claude、Llama2、GPT-3 等模型的越狱对话数据,可绘制论文的跨模型对比图
7️⃣ 常见问题与注意事项
- 加载报错 UnpicklingError:优先检查 PyTorch 版本,并确认指定了
weights_only=False - 仅限科研用途:项目公开越狱评测数据仅用于学术研究,请遵循 README 中 "RESEARCH USE ONLY, NO MISUSE" 的原则
- 格式统一:所有
*.list文件都是"配置 + 对话对列表"的同构结构,一套加载器即可通吃全部实验数据
写在最后
CipherChat 的实验结果文件是开源的 LLM 越狱评测数据之一。本文给出的完整链路是:看懂命名规则 → torch.load 加载 → 解析对话结构 → 计算越狱成功率 → 复现论文图表。如果你想自己运行实验生成新数据,参考main.py顶部的参数示例即可,产出的文件与本文分析的方法完全通用。🔐
【免费下载链接】CipherChatA framework to evaluate the generalization capability of safety alignment for LLMs项目地址: https://gitcode.com/gh_mirrors/ci/CipherChat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考