
garak v0.16.0
Модульный сканер уязвимостей LLM, который проверяет на галлюцинации, утечку данных, промпт-инъекции, джейлбрейки и токсичность с помощью статических, динамических и адаптивных зондов для нескольких провайдеров моделей.
garak, сканер уязвимостей LLM
Набор инструментов для красной команды и оценки генеративного ИИ
garak проверяет, можно ли заставить LLM дать сбой нежелательным образом. garak проверяет на галлюцинации, утечку данных, инъекции промптов, дезинформацию, генерацию токсичности, джейлбрейки и многие другие недостатки. Если вы знакомы с nmap или msf / Metasploit Framework, garak делает нечто похожее, но для LLM.
garak сосредоточен на способах заставить LLM или диалоговую систему дать сбой. Он объединяет статические, динамические и адаптивные проверки для исследования этого.
garak — бесплатный инструмент. Мы любим его разрабатывать и всегда заинтересованы в добавлении функциональности для поддержки приложений.
Начало работы
> Посмотрите наше руководство пользователя! docs.garak.ai
> Присоединяйтесь к нашему Discord!
> Ссылки на проект и дом: garak.ai
> Twitter: @garak_llm
> DEF CON слайды!
Поддержка LLM
в настоящее время поддерживает:
- hugging face hub генеративные модели
- replicate текстовые модели
- openai api чат-модели и модели продолжения
- aws bedrock фундаментальные модели
- litellm
- практически всё, доступное через REST
- gguf модели, такие как llama.cpp версии >= 1046
- .. и многие другие LLM!
Установка:
garak — инструмент командной строки. Он разрабатывается в Linux и OSX.
Стандартная установка с помощью pip
Просто возьмите его из PyPI, и вы готовы к работе:``` python -m pip install -U garak
### Установка версии для разработки с помощью `pip`
Стандартная версия `garak` из pip обновляется периодически. Чтобы получить более свежую версию с GitHub, попробуйте:```
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
Клонирование из исходного кода
garak имеет свои собственные зависимости. Вы можете установить garak в его собственной среде Conda:```
conda create --name garak "python>=3.10,<=3.12"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
Хорошо, если всё прошло нормально, вы, вероятно, готовы к работе!
**Примечание**: если вы клонировали репозиторий до перехода в организацию `NVIDIA` на GitHub, но читаете это по адресу `github.com/NVIDIA`, пожалуйста, обновите ваши remotes следующим образом:```
git remote set-url origin https://github.com/NVIDIA/garak.git
Начало работы
Общий синтаксис:
garak <options>
garak необходимо знать, какую модель сканировать, и по умолчанию он попробует все известные ему зонды на этой модели, используя детекторы уязвимостей, рекомендуемые каждым зондом. Вы можете увидеть список зондов, используя:
garak --list_probes
Чтобы указать генератор, используйте опции --target_type и, опционально, --target_name. Тип модели определяет семейство/интерфейс модели; имя модели указывает точную модель для использования. Раздел «Введение в генераторы» ниже описывает некоторые из поддерживаемых генераторов. Простое семейство генераторов — это модели Hugging Face; чтобы загрузить одну из них, установите --target_type в huggingface и --target_name в имя модели на Hub (например, "RWKV/rwkv-4-169m-pile"). Некоторым генераторам может потребоваться установить API-ключ в качестве переменной окружения, и они сообщат вам, если это необходимо.
garak по умолчанию запускает все зонды, но вы также можете указать конкретные. Например, --probes promptinject будет использовать только методы фреймворка PromptInject. Вы также можете указать один конкретный плагин вместо семейства плагинов, добавив имя плагина после точки; например, --probes lmrc.SlurUsage будет использовать реализацию проверки генерации оскорблений на основе фреймворка Language Model Risk Cards.
За помощью и вдохновением обращайтесь к нам в Twitter или Discord!
Примеры
Исследовать коммерческую модель на наличие кодировочной инъекции промптов (OSX/*nix) (замените пример значения на настоящий ключ API OpenAI)``` export OPENAI_API_KEY="sk-123XXXXXXXXXXXX" python3 -m garak --target_type openai --target_name gpt-5-nano --probes encoding
Проверьте, уязвима ли версия GPT2 от Hugging Face для DAN 11.0```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0
Чтение результатов
Для каждого загруженного проба garak выводит индикатор выполнения по мере генерации. После завершения генерации выводится строка с оценкой результатов этого проба по каждому детектору. Если хотя бы одна из попыток запроса вызвала нежелательное поведение, ответ будет помечен как FAIL, и будет указан процент сбоев.
Вот результаты с модулем encoding на варианте GPT-3:

И те же результаты для ChatGPT:

Мы видим, что более новая модель гораздо более восприимчива к атакам на основе кодирования, в то время как text-babbage-001 оказался уязвим только к инъекциям quoted-printable и MIME-кодирования. Цифры в конце каждой строки, например 840/840, показывают общее количество сгенерированных текстов и сколько из них выглядели нормально. Цифра может быть довольно большой, потому что для каждого запроса генерируется более одного текста — по умолчанию 10.
Ошибки записываются в garak.log; прогон подробно логируется в файл .jsonl, указанный в начале и конце анализа. Есть базовый скрипт анализа в analyse/analyse_log.py, который выводит пробы и запросы, приведшие к наибольшему количеству срабатываний.
Отправляйте PR и открывайте issue. Удачной охоты!
Введение в генераторы
Hugging Face
Использование Pipeline API:
--target_type huggingface(для моделей transformers, запускаемых локально)--target_name— используйте имя модели из Hub. Работают только генеративные модели. Если что-то не работает, хотя не должно, пожалуйста, откройте issue и вставьте команду, которую вы пробовали, и исключение!