
Этот репозиторий содержит официальную реализацию POISONCRAFT: практическое отравление генерации с дополненной выборкой (RAG) для больших языковых моделей.
Этот репозиторий содержит официальную реализацию POISONCRAFT: Practical Poisoning of Retrieval-Augmented Generation for Large Language Models.

POISONCRAFT демонстрирует, как злоумышленник может внедрить «отравленный» контент в корпус, используемый конвейерами Retrieval-Augmented Generation (RAG), тем самым вводя большую языковую модель в заблуждение, заставляя её галлюцинировать или ссылаться на вредоносный контент. Данный код предоставляет скрипты для:
Подготовки и предобработки стандартных наборов данных (например, Natural Questions, MS MARCO, HotpotQA).
Внедрения состязательных суффиксов (то есть «ядов») в текст, похожий на запросы, чтобы ухудшить или изменить результаты поиска.
Оценки эффективности отравления на различных ретриверах (например, Contriever, SimCSE и BGE) и измерения переносимости атаки.
Ниже приведено общее руководство по настройке окружения. Точные требования перечислены в requirements.txt. Мы рекомендуем создать новое виртуальное окружение, чтобы избежать конфликтов:
# Пример с использованием conda
conda create -n PoisonCraft python=3.10
conda activate PoisonCraft
# Установка зависимостей
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
Некоторые части этого проекта, такие как классификация доменов и категоризация запросов, полагаются на API-вызовы (например, модели OpenAI GPT). Вам необходимо настроить API-ключ и параметры модели следующим образом:
"api_key_info": {
"api_keys": ["your_openai_api_key"],
"api_key_use": 0
}
Примечание: этот проект поддерживает несколько провайдеров LLM (например, OpenAI, Llama и PaLM2). Убедитесь, что вы выбрали правильный файл конфигурации для вашей модели.
Мы предоставляем различные bash-скрипты в папке scripts для разных этапов конвейера. Ниже приведена пошаговая инструкция:
1. Загрузка и подготовка наборов данных
Запустите scripts/run_prepare_dataset.sh для загрузки и распаковки наборов данных, а также для создания обучающих/тестовых разбиений:
bash scripts/run_prepare_dataset.sh
Этот скрипт внутренне вызывает:
2. Предобработка наборов данных
Чтобы вычислить оценки схожести top-k с истинными ответами для каждого домена, выполните:
bash scripts/run_process_data.sh
3. [Необязательно] Оценка BEIR для поиска истинных ответов
Выполняйте этот шаг только в том случае, если вы хотите оценить модель ретривера, так как это может занять значительное время. Выполните следующие шаги:
python src/beir_eval/eval_beir.py --model_code bge-small --dataset nq --top_k 100
bash scripts/run_process_data.sh
Для генерации состязательных суффиксов (то есть «ядов») вы можете использовать:
bash scripts/run_multi_poisoncraft.sh
Вы можете настроить такие параметры, как:
После генерации состязательных суффиксов вы можете оценить, сколько запросов получат «отравленные» ссылки, выполнив:
bash scripts/run_retrieval_attack.sh
Этот скрипт:
В качестве альтернативы, для оценки на уровне LLM (то есть окончательной генерации текста с включением результатов top-k поиска), вы можете использовать:
bash scripts/run_target_attack.sh