
यह रिपॉज़िटरी POISONCRAFT: लार्ज लैंग्वेज मॉडल्स के लिए रिट्रीवल-ऑगमेंटेड जनरेशन की व्यावहारिक पॉइज़निंग का आधिकारिक कार्यान्वयन प्रदान करती है।
यह रिपॉज़िटरी POISONCRAFT: Practical Poisoning of Retrieval-Augmented Generation for Large Language Models. का आधिकारिक कार्यान्वयन प्रदान करती है।

POISONCRAFT यह प्रदर्शित करने का लक्ष्य रखता है कि कैसे एक दुर्भावनापूर्ण अभिनेता Retrieval-Augmented Generation (RAG) पाइपलाइनों द्वारा उपयोग किए जाने वाले कॉर्पस में "जहरीली" (poisoned) सामग्री डाल सकता है, जिससे एक Large Language Model भ्रमित होकर दुर्भावनापूर्ण सामग्री को hallucinate या संदर्भित कर सकता है। यह कोडबेस निम्नलिखित के लिए स्क्रिप्ट प्रदान करता है:
मानक डेटासेट (जैसे, Natural Questions, MS MARCO, HotpotQA) तैयार करना और प्रीप्रोसेस करना।
क्वेरी-जैसे पाठ में adversarial suffixes (अर्थात, "poisons") इंजेक्ट करना ताकि पुनर्प्राप्ति परिणामों को क्षीण या हेरफेर किया जा सके।
विभिन्न retrieverों (जैसे, Contriever, SimCSE, और BGE) के अंतर्गत poisoning प्रभावशीलता का मूल्यांकन करना और transferability को मापना।
नीचे पर्यावरण को कॉन्फ़िगर करने के लिए एक उच्च-स्तरीय मार्गदर्शिका दी गई है। सटीक आवश्यकताएँ requirements.txt में सूचीबद्ध हैं। हम संघर्षों से बचने के लिए एक नया virtual environment बनाने की अनुशंसा करते हैं:
# 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
इस परियोजना के कुछ भाग, जैसे domain classification और query categorization, API कॉल (जैसे, OpenAI GPT मॉडल) पर निर्भर करते हैं। आपको API key और मॉडल सेटिंग्स को निम्नानुसार कॉन्फ़िगर करना होगा:
"api_key_info": {
"api_keys": ["your_openai_api_key"],
"api_key_use": 0
}
नोट: यह परियोजना कई LLM प्रदाताओं (जैसे, OpenAI, Llama, और PaLM2) का समर्थन करती है। सुनिश्चित करें कि आप अपने मॉडल के लिए उपयुक्त कॉन्फ़िगरेशन फ़ाइल चुनते हैं।
हम पाइपलाइन के विभिन्न चरणों के लिए scripts फ़ोल्डर के अंतर्गत विभिन्न bash स्क्रिप्ट प्रदान करते हैं। नीचे एक चरण-दर-चरण संदर्भ दिया गया है:
1. डेटासेट डाउनलोड करें और तैयार करें
डेटासेट डाउनलोड और अनज़िप करने तथा training/test विभाजन बनाने के लिए scripts/run_prepare_dataset.sh चलाएँ:
bash scripts/run_prepare_dataset.sh
यह स्क्रिप्ट आंतरिक रूप से कॉल करती है:
2. डेटासेट प्रीप्रोसेस करें
प्रत्येक domain के लिए top-k ground truth similarity scores की गणना करने हेतु, चलाएँ:
bash scripts/run_process_data.sh
3. [वैकल्पिक] BEIR को Ground Truth के लिए मूल्यांकित करना
इस चरण को केवल तभी निष्पादित करें यदि आप किसी retriever मॉडल का मूल्यांकन करना चाहते हैं, क्योंकि इसमें काफी समय लग सकता है। इन चरणों का पालन करें:
python src/beir_eval/eval_beir.py --model_code bge-small --dataset nq --top_k 100
bash scripts/run_process_data.sh
adversarial suffixes (अर्थात, "poisons") उत्पन्न करने के लिए, आप उपयोग कर सकते हैं:
bash scripts/run_multi_poisoncraft.sh
आप निम्न जैसे मापदंडों को अनुकूलित कर सकते हैं:
adversarial suffixes उत्पन्न करने के बाद, आप मूल्यांकन कर सकते हैं कि कितनी क्वेरीज़ "poisoned" संदर्भ प्राप्त करती हैं:
bash scripts/run_retrieval_attack.sh
यह स्क्रिप्ट:
वैकल्पिक रूप से, LLM-स्तरीय मूल्यांकन (अर्थात, top-k पुनर्प्राप्ति परिणामों सहित अंतिम पाठ निर्माण) के लिए, आप उपयोग कर सकते हैं:
bash scripts/run_target_attack.sh