
Marco de ataque de caja negra que secuestra el razonamiento en sistemas de generación aumentada por recuperación agénticos mediante la inyección de documentos envenenados, con soporte para múltiples métodos de ataque y conjuntos de datos.
Ejecute los siguientes comandos desde el directorio padre del repositorio clonado KidnapRAG.
cd KidnapRAG
conda create -n KidnapRAG python=3.10
conda activate KidnapRAG
pip install -r requirements.txt
Luego, descargue los datasets del corpus 📄 y mueva el dataset ReAct a /KidnapRAG/ReAct y el dataset WebThinker a /KidnapRAG/WebThinker
Ejemplos en HotpotQA con el modelo Llama.
cd ReAct/ReAct
CUDA_VISIBLE_DEVICES=0,1,2,3 python attack_react.py --attack_method clean --model_path meta-llama/Llama-3.3-70B-Instruct --seed 1 --dataset hotpotqa
--model_path admite Llama-3.3-70B-Instruct y Qwen/Qwen2.5-32B-Instruct.
--dataset admite hotpotqa, musique y 2wikimultihopqa.
CUDA_VISIBLE_DEVICES=0,1 python generate_attack_doc_kill.py --input_path /KidnapRAG/ReAct/results/adv_targeted_results/hotpotqa_seed1_clean_llama70b.json --gpu_num 2 --dataset hotpotqa --type ours
--type admite además los siguientes métodos de ataque: naive para Ataque Ingenuo, ignore para Ataque de Ignorar, completion_real para Ataque de Finalización Falsa, completion_realcmb para Ataque Combinado, topicattack para TopicAttack, poisonedRAG para PoisonedRAG y paradox para RAG Paradox.
BM, BCM, BCCM, BCCCM, BCCCCM)cd ..
python concat.py --dataset hotpotqa --gen_model llama70b
--gen_model admite llama70b para Llama-3.3-70B-Instruct y qwen25 para Qwen/Qwen2.5-32B-Instruct.
CUDA_VISIBLE_DEVICES=0 python scripts/build_index.py \
--corpus_path /KidnapRAG/ReAct/datasets/hotpotqa/REACT_BM_llama70b.jsonl \
--output_dir /KidnapRAG/ReAct/datasets/hotpotqa/REACT_BM_llama70b \
--model_name intfloat/e5-large-v2
cd ReAct
CUDA_VISIBLE_DEVICES=0,1,2,3 python attack_react.py --attack_method BM --model_path meta-llama/Llama-3.3-70B-Instruct --seed 1 --dataset hotpotqa
Ejemplos en HotpotQA con el modelo QwQ.
Ejecute esta sección desde la raíz del repositorio KidnapRAG.
cd Webthinker
bash scripts/webthinker/qwq_clean.sh \
./datasets/hotpotqa/hotpotqa_promptinject_select.json \
./datasets/hotpotqa_corpus/hotpotqa_corpus.jsonl \
./results/hotpotqa/clean_qwq.json
Argumentos:
./datasets/hotpotqa/hotpotqa_promptinject_select.json: ruta de la consulta./datasets/hotpotqa_corpus/hotpotqa_corpus.jsonl: ruta del corpus./results/hotpotqa/clean_qwq.json: ruta de resultadoscd scripts
CUDA_VISIBLE_DEVICES=0,1 python generate_attack_doc_kill.py --input_path /KidnapRAG/Webthinker/results/hotpotqa/clean_qwq.json --gpu_num 2 --dataset hotpotqa --type ours
BM, BCM, BCCM, BCCCM, BCCCCM)cd ..
python concat.py --dataset hotpotqa --gen_model qwq
--gen_model admite deepseek_32b para lixiaoxi45/WebThinker-R1-32B y qwq para Qwen/QwQ-32B.
bash scripts/webthinker/qwq_attack.sh \
./datasets/hotpotqa/hotpotqa_promptinject_select.json \
./datasets/hotpotqa_corpus/hotpotqa_corpus.jsonl \
./datasets/hotpotqa_poisoned_corpus/WEBTHINKER_BM_qwq.jsonl \
./results/hotpotqa/BM.json
Argumentos:
./datasets/hotpotqa/hotpotqa_promptinject_select.json: ruta de la consulta./datasets/hotpotqa_corpus/hotpotqa_corpus.jsonl: ruta del corpus./datasets/hotpotqa_poisoned_corpus/WEBTHINKER_BM_qwq.jsonl: ruta del corpus envenenado./results/hotpotqa/BM.json: ruta de resultados@misc{
}