
Este repositorio proporciona la implementación oficial de POISONCRAFT: envenenamiento práctico de la generación aumentada por recuperación para modelos de lenguaje de gran tamaño.
Este repositorio proporciona la implementación oficial de POISONCRAFT: Envenenamiento Práctico de la Generación Aumentada por Recuperación para Modelos de Lenguaje de Gran Tamaño.

POISONCRAFT tiene como objetivo demostrar cómo un actor malicioso puede plantar contenido “envenenado” en el corpus utilizado por los pipelines de Generación Aumentada por Recuperación (RAG), engañando así a un Modelo de Lenguaje de Gran Tamaño para que alucine o haga referencia a contenido malicioso. Este código base proporciona scripts para:
Preparar y preprocesar conjuntos de datos estándar (p. ej., Natural Questions, MS MARCO, HotpotQA).
Inyectar sufijos adversariales (es decir, “venenos”) en texto similar a consultas para degradar o manipular los resultados de recuperación.
Evaluar la efectividad del envenenamiento con diferentes recuperadores (p. ej., Contriever, SimCSE y BGE) y medir la transferibilidad.
A continuación se presenta una guía de alto nivel para configurar el entorno. Los requisitos exactos se enumeran en requirements.txt. Recomendamos crear un nuevo entorno virtual para evitar conflictos:
# 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
Ciertas partes de este proyecto, como la clasificación de dominios y la categorización de consultas, dependen de llamadas a la API (p. ej., modelos OpenAI GPT). Debe configurar la clave de API y los ajustes del modelo de la siguiente manera:
"api_key_info": {
"api_keys": ["your_openai_api_key"],
"api_key_use": 0
}
Nota: Este proyecto admite múltiples proveedores de LLM (p. ej., OpenAI, Llama y PaLM2). Asegúrese de seleccionar el archivo de configuración apropiado para su modelo.
Proporcionamos varios scripts bash en la carpeta scripts para diferentes etapas del pipeline. A continuación se muestra una referencia paso a paso:
1. Descargar y Preparar los Conjuntos de Datos
Ejecute scripts/run_prepare_dataset.sh para descargar y descomprimir los conjuntos de datos, y crear divisiones de entrenamiento/prueba:
bash scripts/run_prepare_dataset.sh
Este script internamente llama a:
2. Preprocesar los Conjuntos de Datos
Para calcular las puntuaciones de similitud ground truth top-k para cada dominio, ejecute:
bash scripts/run_process_data.sh
3. [Opcional]Evaluando BEIR para Ground Truth
Ejecute este paso solo si desea evaluar un modelo recuperador, ya que puede llevar bastante tiempo. Siga estos pasos:
python src/beir_eval/eval_beir.py --model_code bge-small --dataset nq --top_k 100
bash scripts/run_process_data.sh
Para generar sufijos adversariales (es decir, “venenos”), puede usar:
bash scripts/run_multi_poisoncraft.sh
Puede personalizar parámetros como:
Después de generar los sufijos adversariales, puede evaluar cuántas consultas obtienen referencias “envenenadas” ejecutando:
bash scripts/run_retrieval_attack.sh
Este script:
Alternativamente, para la evaluación a nivel de LLM (es decir, generación de texto final con los resultados de recuperación top-k incluidos), puede usar:
bash scripts/run_target_attack.sh