Это кодовая база imprompter
. Он предоставляет необходимые компоненты для воспроизведения и тестирования атаки, представленной в статье. Вы также можете создать свою собственную атаку поверх него.
Скринкаст, показывающий, как злоумышленник может получить персональные данные пользователя в реальном продукте LLM (Mistral LeChat) с помощью нашей состязательной подсказки:
Больше видео-демо можно найти на нашем сайте. А пока большое спасибо Мэтту Бёрджесу из WIRED и Саймону Уиллисону за написание крутых историй (WIRED, блог Саймона), освещающих этот проект!
Настройте среду Python с помощью pip install .
или pdm install
(pdm). Мы рекомендуем использовать виртуальную среду (например, conda
с pdm venv
).
Для GLM4-9b
и Mistral-Nemo-12B
требуется графический процессор с видеопамятью объемом 48 ГБ. Для Llama3.1-70b
требуется 3 видеопамяти по 80 ГБ.
Есть два файла конфигурации, которые требуют внимания перед запуском алгоритма.
./configs/model_path_config.json
определяет путь к модели Huggingface в вашей системе. Скорее всего, вам придется изменить это соответствующим образом.
./configs/device_map_config.json
настраивает сопоставление слоев для загрузки моделей на несколько графических процессоров. Мы демонстрируем нашу конфигурацию для загрузки LLama-3.1-70B на 3 графических процессора Nvidia A100 80G. Возможно, вам придется настроить это соответствующим образом для вашей вычислительной среды.
Следуйте примерам сценариев выполнения, например ./scripts/T*.sh
. Пояснения каждого аргумента можно найти в разделе 4 нашей статьи.
Программа оптимизации будет генерировать результаты в файлах .pkl
и журналы в папке ./results
. Файл рассола обновляется на каждом этапе выполнения и всегда сохраняет текущие 100 самых популярных состязательных запросов (с наименьшими потерями). Он структурирован как минимальная куча, вершиной которой является приглашение с наименьшими потерями. Каждый элемент кучи представляет собой кортеж (<loss>, <adversarial prompt in string>, <optimization iteration>, <adversarial prompt in tokens>)
. Вы всегда можете перезапустить существующий файл Pickle, добавив аргументы --start_from_file <path_to_pickle>
к исходному сценарию выполнения.
Оценка осуществляется через evaluation.ipynb
. Следуйте приведенным там подробным инструкциям для поколений по тестированию набора данных, вычислению метрик и т. д.
Особым случаем являются метрики предварительной проверки/отзыва личных данных. Они вычисляются автономно с помощью pii_metric.py
. Обратите внимание, что --verbose
предоставляет полную информацию PII каждой записи разговора для отладки, а --web
следует добавлять, когда результаты получены из реальных продуктов в Интернете.
Пример использования (не веб-результат, т.е. локальный тест):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/local_evaluations/T11.json
Пример использования (веб-результат, т.е. реальный тест продукта):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/product_evaluations/N6_lechat.json --web --verbose
Мы используем Selenium для автоматизации процесса тестирования реальных продуктов (Mistral LeChat и ChatGLM). Мы предоставляем код в каталоге browser_automation
. Обратите внимание, что мы тестировали это только в среде рабочего стола Windows 10 и 11. Предполагается, что оно будет работать и в Linux/MacOS, но это не гарантировано. Возможно, потребуются небольшие доработки.
Пример использования: python browser_automation/main.py --target chatglm --browser chrome --output_dir test --dataset datasets/pii_conversations_rest25_gt.json --prompt_pkl results/T12.pkl --prompt_idx 1
--target
указывает продукт, сейчас мы поддерживаем два варианта chatglm
и mistral
.
--browser
определяет используемый браузер, вы должны использовать либо chrome
, либо edge
.
--dataset
указывает на набор данных разговора, с помощью которого нужно протестировать
--prompt_pkl
ссылается на файл pkl, из которого нужно прочитать приглашение, а --prompt_idx
определяет упорядоченный индекс приглашения, которое будет использоваться из pkl. Альтернативно, можно определить приглашение напрямую в main.py
и не предоставлять эти две опции.
Мы предоставляем все сценарии ( ./scripts
) и наборы данных ( ./datasets
) для получения подсказок (T1-T12), которые мы представляем в статье. Более того, мы также предоставляем файл результатов pkl ( ./results
) для каждого запроса, пока мы сохраняем их копию и результат оценки ( ./evaluations
), полученный с помощью evaluation.ipynb
. Обратите внимание, что для атаки на утечку личной информации наборы данных обучения и тестирования содержат реальную личную информацию. Несмотря на то, что они получены из общедоступного набора данных WildChat, мы решили не публиковать их напрямую из соображений конфиденциальности. Для справки мы предоставляем подмножество этих наборов данных с одной записью по адресу ./datasets/testing/pii_conversations_rest25_gt_example.json
. Пожалуйста, свяжитесь с нами, чтобы запросить полную версию этих двух наборов данных.
Мы инициировали раскрытие информации командам Mistral и ChatGLM 9 и 18 сентября 2024 г. соответственно. Члены группы безопасности Mistral отреагировали оперативно и признали уязвимость проблемой средней серьезности . Они исправили утечку данных, отключив рендеринг внешних изображений с уценкой 13 сентября 2024 г. (подтверждение можно найти в журнале изменений Mistral). Мы подтвердили, что исправление работает. Команда ChatGLM ответила нам 18 октября 2024 года после нескольких попыток связи по различным каналам и заявила, что начала над этим работать.
Пожалуйста, рассмотрите возможность цитирования нашей статьи, если вы считаете эту работу ценной.
@misc{fu2024impromptertrickingllmagents, title={Импровизация: обманом заставить агентов LLM использовать инструменты}, автор = {Сяохань Фу, Шухэн Ли, Цзихань Ван, Ихао Лю, Раджеш К. Гупта, Тейлор Берг-Киркпатрик и Эрленс Фернандес}, год={2024}, eprint={2410.14923}, archivePrefix={arXiv}, первичныйКласс={cs.CR}, URL = {https://arxiv.org/abs/2410.14923}, }