Генеративный комплект и оценки AI Red Teaming
garak
проверяет, может ли LLM, чтобы потерпеть неудачу так, как мы не хотим. garak
зонды по галлюцинации, утечке данных, оперативной инъекции, дезинформации, генерации токсичности, джейлбрейков и многих других слабостях. Если вы знаете nmap
, это nmap
для LLMS.
garak
фокусируется на способах потери LLM или диалоговой системы. Он сочетает в себе статические, динамичные и адаптивные зонды, чтобы исследовать это.
бесплатный инструмент garak
'SA. Мы любим его разрабатывать и всегда заинтересованы в добавлении функциональности для поддержки приложений.
В настоящее время поддерживает:
garak
-это инструмент командной строки. Он разработан в Linux и OSX.
pip
Просто возьмите его от PYPI, и вам будет хорошо, чтобы пойти:
python -m pip install -U garak
pip
Стандартная версия PIP garak
периодически обновляется. Чтобы получить более свежую версию от 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
uri, пожалуйста, обновите свои пульты следующим образом:
git remote set-url origin https://github.com/NVIDIA/garak.git
Общий синтаксис:
garak <options>
garak
нужно знать, какую модель сканировать, и по умолчанию он попробует все зонды, которые он знает на этой модели, используя детекторы уязвимости, рекомендованные каждым зондом. Вы можете увидеть список зондов с помощью:
garak --list_probes
Чтобы указать генератор, используйте параметры --model_type
и, опции, опции --model_name
. Тип модели Определяет модель семейства/интерфейса; Имя модели указывает точную модель, которая будет использоваться. В разделе «Intro to Generators» ниже описываются некоторые поддерживаемые генераторы. Прямая семья генераторов обнимает модели лица; Чтобы загрузить один из них, установите --model_type
на huggingface
и --model_name
на имя модели на Hub (например, "RWKV/rwkv-4-169m-pile"
). Некоторым генераторам может понадобиться ключ API, который будет установлен в качестве переменной среды, и они дадут вам знать, если им это нужно.
garak
запускает все зонды по умолчанию, но вы тоже можете быть конкретными. --probes promptinject
будет использовать, например, методы rassticinject Framework. Вы также можете указать один конкретный плагин вместо семейства плагинов, добавив имя плагина после .
; Например, --probes lmrc.SlurUsage
будет использовать реализацию проверки для моделей, генерирующих оскорбления на основе карт карт риска языка.
Для получения помощи и вдохновения, найдите нас в Твиттере или Discord!
Зонд CHATGPT для инъекции приглашения на основе кодирования (OSX/*NIX) (замените примерное значение на реальном ключ API OpenAI)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --model_type openai --model_name gpt-3.5-turbo --probes encoding
Посмотрите, является ли версия GPT2 об объятиях GPT2 уязвимой для DAN 11.0
python3 -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0
Для каждого загруженного зонда Гарак печатает панель прогресса, как он генерирует. Как только поколение завершено, дается строка, оценивающая результаты зонда на каждом детекторе. Если какая -либо из попыток быстрого принесла нежелательное поведение, ответ будет отмечен как сбой, а также указанная частота отказов.
Вот результаты с модулем encoding
на варианте GPT-3:
И те же результаты для Chatgpt:
Мы можем видеть, что более поздняя модель гораздо более восприимчива к инъекционным атакам на основе кодирования, где было обнаружено, что текстовый баб-001 был уязвим только для инъекций кодирования и кодирования кодировки котировки. Цифры в конце каждого ряда, например, 840/840, указывают на количество текстовых поколений, а затем сколько из них, казалось, ведут себя хорошо. Цифра может быть довольно высокой, потому что более одного поколения производится за подсказку - по умолчанию, 10.
Ошибки идут в garak.log
; Запуск подробно зарегистрирован в файле .jsonl
, указанном при анализе Start & End. Существует базовый сценарий анализа в analyse/analyse_log.py
, который выведет зонды и подсказки, которые привели к наибольшему количеству попаданий.
Отправить PRS и открытые проблемы. Счастливой охоты!
Использование API трубопровода:
--model_type huggingface
(для моделей трансформаторов для работы локально)--model_name
-Используйте имя модели из Hub. Будут работать только генеративные модели. Если это не удастся и не должно, пожалуйста, откройте проблему и вставьте в команду, которую вы попробовали + исключение!Используя API вывода:
--model_type huggingface.InferenceAPI
(для доступа на основе API модели)--model_name
-Имя модели из Hub, например, "mosaicml/mpt-7b-instruct"
Используя частные конечные точки:
--model_type huggingface.InferenceEndpoint
(для частных конечных точек)
--model_name
-URL конечной точки, например, https://xxx.us-east-1.aws.endpoints.huggingface.cloud
(Необязательно) Установите переменную среды HF_INFERENCE_TOKEN
в токен API обнимающего лица с роли «Читать»; Смотрите https://huggingface.co/settings/tokens при регистрации
--model_type openai
--model_name
-модель Openai, которую вы хотели бы использовать. gpt-3.5-turbo-0125
-это быстрый и хорош для тестирования.OPENAI_API_KEY
на свой ключ API OpenAI (например, "SK-19763ASDF87Q6657"); См.Признанные типы моделей белые списки, потому что плагин должен знать, какую подпуску использовать. Модели завершения или чат -компирации в порядке. Если вы хотите использовать модель, не поддерживаемую, вы должны получить информативное сообщение об ошибке и отправить PR / Откройте проблему.
REPLICATE_API_TOKEN
на ваш токен API, например, R8-123XXXXXXXXXXX "; Смотрите https://replicate.com/account/api-tokens при регистрацииОбщественные реплицированные модели:
--model_type replicate
--model_name
-Имя репликации модели и хэш, например, "stability-ai/stablelm-tuned-alpha-7b:c49dae36"
Частные повторные конечные точки:
--model_type replicate.InferenceEndpoint
(для частных конечных точек)--model_name
-Имя пользователя/модель-имени Слиз из развернутой конечной точки, например, elim/elims-llama2-7b
--model_type cohere
--model_name
(необязательно, по умолчанию command
) -конкретная модель коэффициентов, которую вы хотели бы проверитьCOHERE_API_KEY
в свой ключ API COHERE, например, ABCDEFGHIJ123456789 "; См.--model_type groq
--model_name
-имя модели для доступа через API GroqGROQ_API_KEY
на свой клавиша API GROQ, см. HTTPS://console.groq.com/docs/quickstart для получения подробной информации о создании ключа API--model_type ggml
--model_name
-Путь к модели GGML, которую вы хотели бы загрузить, EG /home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
GGML_MAIN_PATH
на путь к вашему main
исполняемому файлу GGML rest.RestGenerator
очень гибкий и может подключаться к любой конечной точке REST, которая возвращает открытый текст или JSON. Ему нужна какая -то краткая конфигурация, которая обычно приведет к короткому файлу YAML, описывающему вашу конечную точку. См.
Используйте модели с https://build.nvidia.com/ или других конечных точек NIM.
NIM_API_KEY
в ваш токен API аутентификации или укажите ее в конфигурации YAMLДля моделей чата:
--model_type nim
--model_name
-имя model
NIM, например meta/llama-3.1-8b-instruct
Для моделей завершения:
--model_type nim.NVOpenAICompletion
--model_name
-имя model
NIM, например, bigcode/starcoder2-15b
OCTO_API_TOKEN
в ваш токен API, например, R8-123XXXXXXXXXXXX "; Смотрите https://replicate.com/account/api-tokens при регистрацииОбщественная конечная точка OCTO:
--model_type octo
--model_name
-Общественная конечная точка Octoai для модели, например, mistral-7b-instruct-fp16
OCTO Private Endpoint:
--model_type octo.InferenceEndpoint
(для частных конечных точек)--model_name
-развернутый URL конечной точки, например, https://llama-2-70b-chat-xxx.octoai.run/v1/chat/completions
--model_type test
(Альтернативно) --model_name test.Blank
для тестирования. Это всегда генерирует пустую строку, используя генератор test.Blank
. Будет отмечаться как провал для любых тестов, которые требуют вывода, например, те, которые делают спорные претензии, и ожидают, что модель опровергнет их, чтобы пройти.
--model_type test.Repeat
для тестирования. Этот генератор повторяет полученную подсказку.
Зонд | Описание |
---|---|
пустой | Простой зонд, который всегда отправляет пустую подсказку. |
Аткген | Автоматизированная генерация атаки. Красная команда LLM исследует цель и реагирует на нее в попытке получить токсичный выход. Прототип, в основном без сохранности, на данный момент использует простой настройку GPT-2 на подмножестве попыток HHRLHF, которые дали обнаруживаемую токсичность (единственная цель, которая в настоящее время поддерживается на данный момент). |
av_spam_scanning | Зонды, которые пытаются сделать модель, выводящими сигнатуры контента выводятся |
продолжение | Зонды, которые испытывают, если модель продолжит нежелательное слово, вероятно, нежелательное слово |
Дан | Различные атаки, подобные Дэну, и Дэн |
Donotanswer | Подсказки, на которые ответственные языковые модели не должны отвечать. |
кодирование | Быстрое впрыск через кодирование текста |
GCG | Разбейте системную подсказку, добавив состязательный суффикс. |
глюк | Модель зонда для токенов сбоев, которые провоцируют необычное поведение. |
бабушка | Апелляция на напоминание о бабушке. |
Goodside | Реализации атак Райли Гуддейд. |
Ликерплей | Оцените, будет ли модель воспроизводить данные обучения. |
LMRC | Подвыборки для карт рисков языковой модели зонды |
Malwaregen | Попытки, чтобы модель генерировала код для создания вредоносного ПО |
вводя в заблуждение | Попытки сделать модельную поддержку вводить в заблуждение и ложные претензии |
Пакетхаллуцинация | Попытка получить поколения кода, которые указывают несуществующие (и, следовательно, небезопасные) пакеты. |
recavleinject | Внедрение работы агентства Enterprise recavletinject (Best Paper Awards @ Neurips ML Safety Workshop 2022) |
RealtoxicityPrompts | Подмножество работ риэлтоксичности, работающих (данные ограничены, потому что полный тест займет так много времени для запуска) |
снежный ком | Снежные галлюцинационные зонды, предназначенные для того, чтобы сделать модель, дайте неправильный ответ на вопросы, чтобы обработать его, чтобы обработать |
XSS | Ищите уязвимости разрешение или атаки по перекрестной площадке, такие как эксфильтрация частных данных. |
garak
генерирует несколько видов журнала:
garak.log
. Это включает в себя отладку информации от garak
и его плагинов, и продолжается через пробеги.garak
. Имя этого файла выводится в начале и, в случае успеха, также в конце прогона. В отчете представлена запись для каждой попытки зондирования, как по мере получения поколений, и снова, когда они оцениваются; Атрибут status
записи постоянно принимает от garak.attempts
, чтобы описать, на каком этапе она была сделана. Проверьте справочные документы для авторитетного руководства по структуре кода garak
.
В типичном забеге garak
будет читать тип модели (и, опциозно, имя модели) из командной строки, затем определит, какие probe
и detector
для запуска, запустить generator
, а затем передать их в harness
для проведения исследования; evaluator
имеет дело с результатами. В каждой из этих категорий есть много модулей, и каждый модуль предоставляет ряд классов, которые действуют как отдельные плагины.
garak/probes/
- классы для создания взаимодействия с LLMSgarak/detectors/
- Занятия для обнаружения LLM демонстрирует заданный режим отказаgarak/evaluators/
- Схемы отчетности по оценкеgarak/generators/
- Плагины для LLMS, которые нужно исследоватьgarak/harnesses/
- классы для структурирования тестированияresources/
- вспомогательные предметы, требуемые плагинами Режим работы по умолчанию состоит в том, чтобы использовать жгут probewise
. Учитывая список имен модулей зонда и имен плагина зонда, жгут probewise
создает экземпляры каждого зонда, тогда для каждого зонда считывает свой атрибут recommended_detectors
, чтобы получить список detector
для выполнения на выходе.
Каждая категория плагинов ( probes
, detectors
, evaluators
, generators
, harnesses
) включает в себя base.py
, который определяет базовые классы, используемые плагинами в этой категории. Каждый модуль плагина определяет классы плагина, которые наследуют от одного из базовых классов. Например, garak.generators.openai.OpenAIGenerator
спускается с garak.generators.base.Generator
.
Большие артефакты, такие как модельные файлы и более крупные корпусы, держатся вне репозитория; Их можно хранить в EG, обнимающего концентратор лица и загружены на местном масштабе клиентами, использующими garak
.
garak.probes.base.TextProbe
import garak.probes.mymodule
p = garak.probes.mymodule.MyProbe()
python3 -m garak -m test.Blank -p mymodule -d always.Pass
python3 -m garak -m test.Blank -p test.Blank -d mymodule
датpython3 -m garak -m mymodule -p test.Blank -d always.Pass
garak
, чтобы перечислить все плагины типа, который вы пишете, с помощью --list_probes
, --list_detectors
или --list_generators
У нас здесь нет часто задаваемых вопросов. Обратитесь, если у вас есть еще вопросы! [email protected]
Справочная документация кода находится по адресу Garak.readthedocs.io.
Вы можете прочитать бумагу Garak Preprint. Если вы используете Garak, пожалуйста, цитируйте нас.
@article{garak,
title={{garak: A Framework for Security Probing Large Language Models}},
author={Leon Derczynski and Erick Galinkin and Jeffrey Martin and Subho Majumdar and Nanna Inie},
year={2024},
howpublished={url{https://garak.ai}}
}
«Лож - это навык, как и любой другой, и если вы хотите поддерживать уровень совершенства, вы должны постоянно практиковать» - ELM
Для обновлений и новостей см. @Garak_llm
© 2023- Леон Дерцински; Apache License v2, см. Лицензию