
This repository provides the official implementation of POISONCRAFT: Practical Poisoning of Retrieval-Augmented Generation for Large Language Models.
Dieses Repository enthält die offizielle Implementierung von POISONCRAFT: Practical Poisoning of Retrieval-Augmented Generation for Large Language Models.

POISONCRAFT zielt darauf ab zu demonstrieren, wie ein böswilliger Akteur „vergiftete" Inhalte in den Korpus einschleusen kann, der von Retrieval-Augmented-Generation-Pipelines (RAG) verwendet wird, und so ein Large Language Model dazu bringt, zu halluzinieren oder auf schädliche Inhalte zu verweisen. Diese Codebasis stellt Skripte bereit, um:
Standarddatensätze (z. B. Natural Questions, MS MARCO, HotpotQA) vorzubereiten und zu verarbeiten.
Adversariale Suffixe (d. h. „Gifte") in query-ähnlichen Text einzufügen, um Retrieval-Ergebnisse zu verschlechtern oder zu manipulieren.
Die Wirksamkeit der Vergiftung unter verschiedenen Retrievern (z. B. Contriever, SimCSE und BGE) zu bewerten und die Übertragbarkeit zu messen.
Im Folgenden finden Sie eine allgemeine Anleitung zur Konfiguration der Umgebung. Die genauen Anforderungen sind in requirements.txt aufgeführt. Wir empfehlen, eine neue virtuelle Umgebung zu erstellen, um Konflikte zu vermeiden:
# Beispiel mit conda
conda create -n PoisonCraft python=3.10
conda activate PoisonCraft
# Abhängigkeiten installieren
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
Bestimmte Teile dieses Projekts, wie z. B. die Domänenklassifizierung und die Query-Kategorisierung, sind auf API-Aufrufe angewiesen (z. B. OpenAI-GPT-Modelle). Sie müssen den API-Schlüssel und die Modelleinstellungen wie folgt konfigurieren:
"api_key_info": {
"api_keys": ["your_openai_api_key"],
"api_key_use": 0
}
Hinweis: Dieses Projekt unterstützt mehrere LLM-Anbieter (z. B. OpenAI, Llama und PaLM2). Stellen Sie sicher, dass Sie die passende Konfigurationsdatei für Ihr Modell auswählen.
Wir stellen verschiedene Bash-Skripte im Ordner scripts für die verschiedenen Phasen der Pipeline bereit. Im Folgenden finden Sie eine Schritt-für-Schritt-Referenz:
1. Datensätze herunterladen und vorbereiten
Führen Sie scripts/run_prepare_dataset.sh aus, um die Datensätze herunterzuladen und zu entpacken sowie Trainings-/Test-Splits zu erstellen:
bash scripts/run_prepare_dataset.sh
Dieses Skript ruft intern Folgendes auf:
2. Datensätze vorverarbeiten
Um die Top-k-Ground-Truth-Ähnlichkeitswerte für jede Domäne zu berechnen, führen Sie Folgendes aus:
bash scripts/run_process_data.sh
3. [Optional] BEIR für Ground Truth auswerten
Führen Sie diesen Schritt nur aus, wenn Sie ein Retriever-Modell bewerten möchten, da dies erheblich Zeit in Anspruch nehmen kann. Gehen Sie wie folgt vor:
python src/beir_eval/eval_beir.py --model_code bge-small --dataset nq --top_k 100
bash scripts/run_process_data.sh
Um adversariale Suffixe (d. h. „Gifte") zu erzeugen, können Sie Folgendes verwenden:
bash scripts/run_multi_poisoncraft.sh
Sie können Parameter wie folgt anpassen:
Nach dem Erzeugen der adversarialen Suffixe können Sie auswerten, wie viele Queries „vergiftete" Referenzen erhalten, indem Sie Folgendes ausführen:
bash scripts/run_retrieval_attack.sh
Dieses Skript:
Alternativ können Sie für die Bewertung auf LLM-Ebene (d. h. die finale Textgenerierung einschließlich der Top-k-Retrieval-Ergebnisse) Folgendes verwenden:
bash scripts/run_target_attack.sh