
garak v0.17.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 slides!
Поддержка LLM
в настоящее время поддерживаются:
- генеративные модели hugging face hub
- текстовые модели replicate
- чат- и continuation-модели 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.11,<=3.14"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
Хорошо, если всё прошло успешно, скорее всего, вы готовы к работе!
Примечание: если вы клонировали репозиторий до переезда в организацию NVIDIA на GitHub, но читаете это по адресу github.com/NVIDIA, обновите ваши remote-репозитории следующим образом:
git remote set-url origin https://github.com/NVIDIA/garak.git
Начало работы
Общий синтаксис:
garak <options>
garak должен знать, какую модель сканировать, и по умолчанию он попытается применить все известные ему пробы к этой модели, используя детекторы уязвимостей, рекомендованные каждой пробой. Список проб можно посмотреть с помощью:
garak --list_probes
Чтобы указать генератор, используйте опции --target_type и, при необходимости, --target_name. Тип модели задаёт семейство/интерфейс модели; имя модели задаёт конкретную используемую модель. Раздел «Intro to generators» ниже описывает некоторые поддерживаемые генераторы. Простое семейство генераторов — модели Hugging Face; чтобы загрузить одну из них, задайте --target_type как huggingface, а --target_name — как имя модели на Hub (например, "RWKV/rwkv-4-169m-pile"). Некоторым генераторам может потребоваться API-ключ, заданный как переменная окружения, и они сообщат вам, если он нужен.
garak по умолчанию запускает все пробы, но вы можете указать конкретные. Например, --spec probes.promptinject будет использовать только методы фреймворка PromptInject. Вы также можете указать конкретный плагин вместо семейства плагинов, добавив имя плагина после .; например, --spec probes.lmrc.SlurUsage будет использовать реализацию проверки моделей на генерацию оскорблений на основе фреймворка Language Model Risk Cards.
За помощью и вдохновением обращайтесь к нам в Twitter или discord!
Примеры
Проверка коммерческой модели на prompt injection на основе кодирования (OSX/*nix) (замените пример значения на реальный API-ключ OpenAI)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
Посмотрите, уязвима ли версия GPT2 от Hugging Face к DAN 11.0
python3 -m garak --target_type huggingface --target_name gpt2 --spec 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 и открывайте issues. Удачной охоты!