Об этом проекте

garak (Generative AI Red-teaming & Assessment Kit) — это инструмент командной строки для проверки больших языковых моделей и диалоговых систем на режимы отказа. Он разработан NVIDIA и выпущен под лицензией Apache 2.0. Что он делает - Проверяет, можно ли заставить LLM отказать нежелательным образом, включая галлюцинации, утечку данных, промпт-инъекции, дезинформацию, генерацию токсичного контента, джейлбрейки и другие слабости. - Объединяет статические, динамические и адаптивные пробы для исследования этих режимов отказа. - В README его роль сравнивается с nmap или Metasploit Framework, но применёнными к LLM. Поддерживаемые цели - Генеративные модели Hugging Face Hub, включая локальные конвейеры transformers, Inference API и приватные Inference Endpoints. - Чат- и completion-модели OpenAI. - Текстовые модели Replicate и приватные конечные точки Replicate. - Фундаментальные модели AWS Bedrock через Converse API, охватывающие семейства, такие как Anthropic Claude, Meta Llama, Amazon Titan, AI21 Labs, Cohere и Mistral AI. - Cohere, Groq, litellm, конечные точки NVIDIA NIM, модели ggml/llama.cpp и практически всё, что доступно через REST-конечную точку. - Встроенные генераторы тестов (test.Blank, test.Repeat) для разработки плагинов. Установка и использование - Устанавливается из PyPI с помощью pip, из основной ветки GitHub или клонируется из исходников в среду Conda (Python 3.11–3.13). - Общий синтаксис — `garak <options>`; инструменту нужна целевая модель, и по умолчанию он запускает все известные пробы с рекомендованными детекторами для каждой пробы. - `--list_probes` выводит список доступных проб; `--target_type` и `--target_name` выбирают модель; `--spec` сужает запуск до семейства проб или одного плагина. - Ключи API для хостинговых провайдеров передаются через переменные среды, такие как OPENAI_API_KEY, HF_INFERENCE_TOKEN, REPLICATE_API_TOKEN, COHERE_API_KEY, GROQ_API_KEY, NIM_API_KEY и BEDROCK_API_KEY. Примеры проб, описанные в README - blank, atkgen (автоматическая генерация атак), badchars (незаметные Unicode-возмущения), av_spam_scanning, continuation, dan (атаки DAN и подобные DAN), donotanswer, encoding (промпт-инъекция через текстовую кодировку), gcg (состязательный суффикс), glitch (глитч-токены), grandma, goodside, leakreplay (воспроизведение обучающих данных), lmrc (Language Model Risk Cards), malwaregen, misleading, packagehallucination, promptinject, realtoxicityprompts, snowball (снежный ком галлюцинаций) и xss. Результаты и журналирование - Для каждой пробы garak печатает индикатор выполнения, а затем строку с оценкой результатов по каждому детектору, помечая ответы как FAIL с коэффициентом отказов при возникновении нежелательного поведения. - Журналы включают garak.log для отладки, JSONL-отчёт для каждого запуска с записью на каждую попытку пробы и журнал попаданий с подробностями попыток, выявивших уязвимость. - Базовый скрипт анализа analyse/analyse_log.py выводит пробы и промпты, давшие больше всего попаданий. Архитектура и расширяемость - Код организован в пробы, детекторы, оценщики, генераторы и обвязки (harnesses), каждая из которых имеет base.py, определяющий базовые классы плагинов. - Режим работы по умолчанию использует обвязку probewise, которая создаёт экземпляр каждой пробы и читает её атрибуты primary_detector и extended_detectors, чтобы решить, какие детекторы запускать. - Разработчики могут писать новые плагины, наследуясь от базовых классов, таких как garak.probes.base.TextProbe, тестировать их интерактивно или с помощью тестовых генераторов и детекторов и выводить их списком через --list_probes, --list_detectors или --list_generators. Ресурсы проекта - Документация на docs.garak.ai и reference.garak.io/readthedocs, сообщество в Discord, домашняя страница проекта garak.ai, препринт arXiv (2406.11036) и запись для цитирования в академических целях.