EMNLP 2026 论文 CamoDocs: A Poisoning Attack Against Retrieval-Augmented Language Models Using Camouflaged Documents 的官方仓库。
CamoDocs 是一种针对检索增强生成(RAG)的知识库投毒攻击,无需包含查询。每个对抗性子文档都通过将其与一个经过优化的良性子文档拼接来进行伪装,从而使生成的投毒文档能够规避过滤防御所依赖的查询重叠伪影。

CamoDocs 生成良性和对抗性子文档,使用分散令牌和一致性过滤优化良性部分,并将它们合并以创建能够规避过滤防御并诱导目标错误答案的投毒文档。
已在 Python 3.10、CUDA 12.8、PyTorch 2.8.0 环境下测试。一块 48 GB GPU 足以运行 8B 级别的受害者模型。Mixtral-8x7B 无法在单块 48 GB 显卡上运行;请使用 --lm_deploy_tp 将其拆分到多块显卡上。
conda create -n camodocs python=3.10 -y
conda activate camodocs
pip install -r requirements.txt
python -m spacy download en_core_web_sm
python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')"
LLM Filter 防御还需要 openai/gpt-oss-safeguard-20b,这需要更新的 vLLM/transformers/torch 技术栈,因此它位于独立的环境中:
conda create -n camodocs_vllm python=3.10 -y
conda activate camodocs_vllm
pip install -r requirements_vllm.txt
首先设置以下变量。每个脚本都会检查其所需的变量,如果缺少任何一个,则会立即退出。
export REPO_ROOT=/absolute/path/to/this/repo
export DATA_ROOT=/absolute/path/for/intermediate/outputs
export OPENAI_API_KEY=... # LLM judge, GPT-4o-mini synthesis
export HF_TOKEN=... # gated models (Llama-3.1, Mixtral)
然后运行任意防御评估。捆绑的工件可让您完全跳过阶段 1-3:
bash scripts/eval_trustrag.sh
每个脚本在 HotpotQA 上使用 Llama-3.1-8B 受害者模型复现一行结果。如需使用其他数据集,请在环境中设置 EVAL_DATASET=nq(或 msmarco);如需使用其他受害者模型,请编辑脚本中的 MODEL_NAME。
bash scripts/eval_trustrag.sh # TrustRAG (k-means + conflict prompting)
bash scripts/eval_query_detection.sh # Query Detection (SequenceMatcher filter)
bash scripts/eval_divide_and_vote.sh # Divide-and-Vote
bash scripts/eval_robustrag.sh # RobustRAG (keyword aggregation)
bash scripts/eval_isolation_forest.sh # Isolation Forest
bash scripts/eval_rerank.sh # Cross-encoder rerank (bge-reranker-v2-m3)
bash scripts/llm_filter_eval.sh # LLM Filter (needs the vLLM critic below)
前六个脚本需要 1 块 GPU。LLM Filter 还需要在第二个 shell 中运行一个 20B 的评判模型,因此除了受害者模型之外,还需要足够的 GPU 内存来运行该评判模型。我们的运行使用了四块 48 GB 显卡;请根据您自己的硬件设置 TP 和 LM_DEPLOY_TP:
# Shell 1
conda activate camodocs_vllm
bash scripts/gpt_oss_safeguard_vllm_serve.sh # serves on :8001, TP=4
# Shell 2
conda activate camodocs
bash scripts/llm_filter_eval.sh # health-checks the critic first
阶段 1-2 使用 GPT-4o-mini 起草良性和对抗性段落,阶段 3 应用令牌级优化,阶段 4 评估防御效果。
bash scripts/gen_synth_benign_hotpotqa.sh # Stage 1: benign carrier drafts
bash scripts/gen_adv_hotpotqa.sh # Stage 2: adversarial drafts
bash scripts/camodocs_token_manipulation.sh # Stage 3: CamoDocs token manipulation
bash scripts/eval_trustrag.sh # Stage 4: evaluation
这些脚本携带了报告运行所使用的精确超参数(beta=10, alpha=30, m=1000, m'=100, top-k=5)。
BEIR 数据集会在首次使用时自动下载到 ${REPO_ROOT}/datasets/。每个阶段都会执行此操作,因此无需单独的数据设置步骤。如需提前获取它们,请执行:
mkdir -p ${REPO_ROOT}/datasets && cd ${REPO_ROOT}/datasets
for ds in hotpotqa nq msmarco; do
wget https://public.ukp.informatik.tu-darmstadt.de/thakur/BEIR/datasets/${ds}.zip
unzip ${ds}.zip
done
为跳过昂贵的预处理,此版本捆绑了预计算的 Contriever 检索结果(results/beir_results/)、固定的 1,000 查询评估子集(target_queries_fixed/)以及所有三个数据集的示例阶段 2/3 输出(data_examples/)。
所有报告的数字均可从捆绑的工件中为 HotpotQA、NQ 和 MS-MARCO 复现。(重新运行阶段 2 本身需要您自己的 NQ 和 MS-MARCO 答案文件——如果您尝试,gen_adv.py 会对此进行说明。)
此代码库根据 MIT 许可证(LICENSE)提供,遵循原始的 PoisonedRAG 仓库,该仓库同样采用 MIT 许可证。
一个例外:src/contriever_src/ 是 Meta 的 contriever 代码,仍受 CC BY-NC 4.0 约束,因此该目录仅供非商业用途使用。
此软件包仅供研究和可复现性目的提供。发布的代码旨在复现论文中报告的实验,并支持 RAG 鲁棒性和防御方面的研究。
该软件包根据其各自的许可证和使用条款使用公开可用的数据集、模型和软件库。BEIR 数据集(如 HotpotQA、NQ 和 MS-MARCO)从官方 BEIR URL 下载,而非在此软件包中重新分发。
流程中使用的模型权重和 API(包括 GPT-4o-mini、GPT-4.1-mini、Llama-3.1-8B、Qwen3-8B、Mixtral-8x7B、Contriever、ANCE、GPT-2、bge-reranker-v2-m3 和 gpt-oss-safeguard-20b)仍受其原始提供者的许可证和使用政策的约束。此软件包不授予对这些第三方工件的额外权利。
此软件包中包含的对抗性文档和中间工件仅用于 RAG 鲁棒性的受控研究评估。它们不应被用于攻击已部署的系统或投毒真实世界的知识库。
@misc{jung2026camodocs,
title={CamoDocs: A Poisoning Attack Against Retrieval-Augmented Language Models Using Camouflaged Documents},
author={Jaewon Jung and Haizhong Zheng and Hongsun Jang and Jaeyong Song and Beidi Chen and Jinho Lee},
year={2026},
eprint={2608.28389},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2608.28389},
}