本仓库提供了 POISONCRAFT:针对大语言模型的检索增强生成的实用投毒 的官方实现。

POISONCRAFT 旨在演示恶意行为者如何将“中毒”内容植入检索增强生成(RAG)流水线所使用的语料库中,从而误导大语言模型产生幻觉或引用恶意内容。本代码库提供以下脚本:
准备和预处理标准数据集(例如 Natural Questions、MS MARCO、HotpotQA)。
将对抗性后缀(即“毒素”)注入类查询文本,以降低或操纵检索结果。
在不同检索器(例如 Contriever、SimCSE 和 BGE)下评估投毒效果,并衡量可迁移性。
以下是配置环境的高级指南。具体要求详见 requirements.txt。为避免冲突,我们建议创建一个新的虚拟环境:
# Example using conda
conda create -n PoisonCraft python=3.10
conda activate PoisonCraft
# Install dependencies
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
本项目的某些部分(如领域分类和查询分类)依赖 API 调用(如 OpenAI GPT 模型)。你需要按如下方式配置 API 密钥和模型设置:
"api_key_info": {
"api_keys": ["your_openai_api_key"],
"api_key_use": 0
}
注意:本项目支持多种 LLM 提供商(例如 OpenAI、Llama 和 PaLM2)。请确保为你的模型选择相应的配置文件。
我们在 scripts 文件夹下提供了用于流水线不同阶段的多种 bash 脚本。以下是分步参考:
1. 下载并准备数据集
运行 scripts/run_prepare_dataset.sh 以下载并解压数据集,并创建训练/测试划分:
bash scripts/run_prepare_dataset.sh
该脚本内部会调用:
2. 预处理数据集
要计算每个领域的 top-k 真实相似度分数,请运行:
bash scripts/run_process_data.sh
3. [可选]评估 BEIR 以获取 Ground Truth
仅当你想评估检索器模型时才执行此步骤,因为它可能会花费大量时间。请按照以下步骤操作:
python src/beir_eval/eval_beir.py --model_code bge-small --dataset nq --top_k 100
bash scripts/run_process_data.sh
要生成对抗性后缀(即“毒素”),你可以使用:
bash scripts/run_multi_poisoncraft.sh
你可以自定义参数,例如:
生成对抗性后缀后,你可以运行以下命令来评估有多少查询获得了“中毒”引用:
bash scripts/run_retrieval_attack.sh
该脚本:
或者,对于 LLM 级别的评估(即包含 top-k 检索结果的最终文本生成),你可以使用:
bash scripts/run_target_attack.sh