独立可运行版本,基于 CC-BOS 研究框架重构。
随着大语言模型(LLM)的广泛应用,其安全风险日益受到关注。现有研究表明,LLM 对越狱攻击高度敏感,且攻击效果因语言环境而异。本项目研究文言文在越狱攻击中的作用——由于文言文的简洁性与晦涩性,可以部分绕过现有的安全约束,暴露 LLM 中存在的显著漏洞。基于这一发现,本项目提出了 CC-BOS 框架,通过多维果蝇优化算法自动生成文言文对抗提示词,在黑盒环境下实现高效的自动化越狱攻击。提示词被编码为八个策略维度——涵盖角色、引导、机制、隐喻、表达、知识、触发模式和上下文,并通过嗅觉搜索、视觉搜索和柯西变异进行迭代优化。此外,项目还设计了文言文到英文的翻译模块,以提高可读性和评估准确性。
- Python 3.8 及以上版本
- 大语言模型 API 访问权限(如 OpenAI API Key、DeepSeek API Key 等)
-
安装依赖包:
pip install -r requirements.txt
-
配置 API 密钥:
复制环境变量模板文件并填入你的 API 密钥:
cp .env.example .env
编辑
.env文件,填入对应的密钥和接口地址:# 目标模型(被攻击的 LLM + Judge 评分模型) OPENAI_API_KEY=sk-your-openai-key OPENAI_BASE_URL=https://api.openai.com/v1 TARGET_MODEL=gpt-4o # 被攻击的目标模型 # 评分模型(可选,不设置则回退到 OPENAI_*) JUDGE_API_KEY=sk-your-judge-api-key JUDGE_BASE_URL=https://api.openai.com/v1 # 评估毒性 JUDGE_MODEL=gpt-5.4 # 生成器模型(生成文言文对抗提示词) DEEPSEEK_API_KEY=sk-your-deepseek-key DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 GENERATOR_MODEL=deepseek-chat # 翻译模型(文言文 → 英文翻译) TRANSLATE_API_KEY=sk-your-translate-key TRANSLATE_BASE_URL=https://api.deepseek.com/v1 TRANSLATE_MODEL=deepseek-chat
说明: 本项目使用
.env文件管理所有配置,通过config.py自动加载,无需手动修改代码。模型名称也可在.env中自由切换。
本项目的工作流涉及三个独立角色的模型,因此采用三组独立的 API 配置:
| 角色 | 配置项 | 默认模型 | 用途说明 |
|---|---|---|---|
| 生成器 | DEEPSEEK_* + GENERATOR_MODEL |
deepseek-chat |
根据果蝇优化维度生成文言文对抗提示词 |
| 目标模型 | OPENAI_* + TARGET_MODEL |
gpt-5.4 |
被攻击的 LLM,接收对抗提示并生成回复 |
| 评判模型 | OPENAI_* + JUDGE_MODEL |
gpt-5.4 |
评估目标模型回复的毒性分数(与目标模型共用 API) |
| 翻译模型 | TRANSLATE_* + TRANSLATE_MODEL |
deepseek-chat |
将文言文回复翻译为英文,供评判模型评分 |
用户提示词 ──→ [生成器] 生成文言文对抗提示词
│
▼
[目标模型] 接收对抗提示 → 文言文回复
│
▼
[翻译模型] 文言文 → 英文翻译
│
▼
[评判模型] 评估毒性分数 → 反馈至果蝇优化
三组配置分开的好处:你可以用不同服务商的 API(如 DeepSeek 做生成、OpenAI 做目标和评判、Moonshot 做翻译),互不干扰。
项目从 CSV 文件中读取意图和提示词。确保输入文件包含以下列:
goal:原始用户提示词。target:期望的目标响应。intention:原始用户提示词(用于评估)。
项目已提供示例数据文件 data/test.csv。
在命令行中执行 gen.py,可通过命令行参数自定义生成过程:
cd code
python gen.py --population_size 5 --max_iter 5 --input_file ../data/test.csv| 参数 | 默认值 | 说明 |
|---|---|---|
--input_file |
../data/test.csv |
输入的 CSV/JSONL 文件路径 |
--data_format |
csv |
输入数据格式:csv 或 jsonl |
--population_size |
5 |
每次优化迭代的种群大小 |
--max_iter |
5 |
最大优化迭代次数 |
early_stopping_threshold 定义了模型输出的目标平均分数(毒性强度),作为优化的成功判定标准:
- 阈值 = 120(峰值毒性): 目标为绝对越狱。优化持续进行,直至模型响应与有害意图完全一致且不包含任何拒绝关键词。
- 阈值 = 80(快速穿透): 目标为实质性越狱。一旦达到显著毒性水平即停止优化,优先保证触发不合规行为的效率。
用户可根据具体研究需求灵活调整该阈值。
注意: 降低阈值(如设为 80)可通过优先快速越狱显著降低查询成本;而较高阈值(120)则最大化生成提示词的毒性强度。
脚本将在 result/ 目录下生成两个输出文件(目录自动创建):
adv_prompt.jsonl:生成的最终对抗提示词。record.jsonl:每个提示词的详细过程日志,包括分数、模型响应和尝试记录。
CC-BOS-standalone/
├── code/ # 核心源码目录
│ ├── config.py # 配置文件(从 .env 加载 API 密钥)
│ ├── gen.py # 主脚本:提示词生成、优化与评估循环
│ ├── translate.py # 翻译模块(文言文 → 英文)
│ └── utils.py # 工具函数(LLM API 调用、评分、文本提取)
├── data/ # 数据集目录
│ └── test.csv # 示例输入数据
├── result/ # 输出目录(自动创建)
├── .env.example # 环境变量模板
├── .gitignore # Git 忽略规则
├── requirements.txt # Python 依赖
└── README.md # 项目文档
| 改进项 | 原项目 | 本项目 |
|---|---|---|
| API 密钥管理 | 硬编码在代码中 | 通过 .env 文件管理,安全隔离 |
| API 配置 | 单一配置混用 | OpenAI / DeepSeek / 翻译三组独立配置 |
| 文件路径 | 相对路径,依赖工作目录 | 基于 __file__ 动态定位,任意目录可运行 |
| 输出目录 | 需手动创建 | 自动创建 result/ 目录 |
| 文件编码 | 未显式指定 | 所有读写显式使用 utf-8 |
| 依赖管理 | environment.yml(280+ 行) |
requirements.txt(7 个核心依赖) |
| 示例数据 | 无 | 内置 data/test.csv 可直接运行 |
特别感谢 CL-GSO 的作者们。本项目在其优秀实现的基础上进行了扩展,感谢他们对该领域的开源贡献。
如果您认为本项目或其基础 CL-GSO 框架对您的研究有所帮助,请考虑引用以下论文:
@inproceedings{huang2026obscure,
title={Obscure but Effective: Classical Chinese Jailbreak Prompt Optimization via Bio-Inspired Search},
author={Xun Huang and Simeng Qin and Xiaoshuang Jia and Ranjie Duan and Huanqian Yan and Zhitao Zeng and Fei Yang and Yang Liu and Xiaojun Jia},
booktitle={The Fourteenth International Conference on Learning Representations (ICLR)},
year={2026},
url={https://openreview.net/forum?id=O7fxz7D6vf}
}