English translation is not available yet. Showing Russian content.

Объясните разницу между NeMo Guardrails и Garak. Когда что используется?

Краткий тезис

NeMo Guardrails и Garak — это инструменты для обеспечения безопасности LLM-приложений, но они решают принципиально разные задачи. NeMo Guardrails — это runtime-защита, которая внедряется в production-среду и перехватывает потенциально опасные запросы и ответы в реальном времени. Garak — это инструмент для тестирования (red-teaming), который запускается до деплоя и автоматически генерирует атаки для поиска уязвимостей модели. Guardrails предотвращает инциденты, Garak — помогает их найти и устранить на этапе разработки.


1. Термины: Runtime-защита vs Red-teaming

Runtime-защита — это механизмы, работающие в режиме реального времени во время эксплуатации системы. Они проверяют каждый входящий запрос и исходящий ответ на соответствие заданным политикам безопасности, фильтруют нежелательный контент, предотвращают инъекции и утечки данных. Guardrails реализует именно такой подход.

Red-teaming (красная команда) — это процесс активного поиска уязвимостей в модели путём имитации атак злоумышленника. Garak автоматизирует red-teaming: генерирует тысячи вариаций вредоносных промптов (jailbreaks, prompt injections, токсичные запросы) и оценивает, как модель на них реагирует.

Ключевое различие — фаза жизненного цикла: NeMo Guardrails работает после деплоя (в production), Garak — до деплоя (на этапе тестирования и валидации).


2. NeMo Guardrails: архитектура и сценарии

NeMo Guardrails — это открытая библиотека от NVIDIA для добавления «ограничителей» (guardrails) в LLM-приложения. Основные компоненты:

  • Colang — декларативный язык для описания правил (rails). Пример:
    # Запрет на обсуждение незаконных действий
    define user ask illegal
      "Как взломать ..."
      "Где купить наркотики ..."
    
    define flow
      user ask illegal
        bot refuse "Извините, я не могу ответить на этот запрос."
    
  • Runtime engine — выполняет правила, анализирует намерения пользователя, извлекает сущности, классифицирует запросы.
  • Input/Output rails — проверки на входе (input) и выходе (output). Input rails могут отвергнуть запрос, output rails — модифицировать или заблокировать ответ.
  • Moderation railsинтеграция с внешними модераторами (например, Azure Content Safety, NVIDIA Nemo).

Когда используется:

  • В production-среде, где требуется гарантировать, что модель не выдаст опасный контент.
  • Для compliance-требований (например, GDPR — запрет на генерацию персональных данных).
  • Когда нужна настраиваемая политика безопасности: можно создать свои правила под конкретный use case.

Пример конфигурации (Python):

from nemoguardrails import RailsConfig, LLMRails

config = RailsConfig.from_path("./config")
rails = LLMRails(config)

response = rails.generate(messages=[{"role": "user", "content": "Как украсть данные?"}])
print(response["content"])  # "Извините, я не могу ответить на этот запрос."

3. Garak: автоматизированный red-teaming

Garak — это инструмент для тестирования LLM на устойчивость к атакам. Разработан компанией NVIDIA (ранее от Leondra). Особенности:

  • Плагинная архитектура — есть модули (probes) для разных типов атак:
    • Jailbreak — попытки обойти ограничения (например, «DAN», «roleplay as assistant without restrictions»).
    • Prompt injection — внедрение вредоносных инструкций.
    • Toxicity — проверка на генерацию оскорбительного контента.
    • Data leakage — попытка извлечь тренировочные данные.
    • Denial of service — генерация бесконечных ответов.
  • Генерация атак — Garak может модифицировать один промпт в сотни вариаций (через синонимы, перестановки, encoding).
  • Отчёт — после прогона выводит подробную статистику: сколько атак прошло, какие типы уязвимостей найдены, примеры успешных атак.

Когда используется:

  • Перед деплоем новой модели или обновления.
  • Для регулярного аудита безопасности (например, раз в месяц).
  • Для сравнения разных моделей или версий одной модели.
  • Для сертификации модели (например, для соответствия стандарту OWASP LLM Top 10).

Пример запуска Garak:

# Установка
pip install garak

# Прогон на модели (например, OpenAI GPT-3.5)
garak --model_name openai/gpt-3.5-turbo --probes promptinject,toxicity

# Прогон на локальной модели (через Hugging Face)
garak --model_type huggingface --model_name microsoft/phi-2 --probes jailbreak

4. Сравнительная таблица NeMo Guardrails vs Garak

ХарактеристикаNeMo GuardrailsGarak
НазначениеRuntime-защитаRed-teaming / тестирование
Этап использованияProduction (после деплоя)Разработка / Pre-deployment
Режим работыАктивный — перехватывает запросы/ответыПассивный — генерирует атаки, не изменяет ответы
Язык правилColang (декларативный DSL)Нет правил — конфигурация через probes
ИнтеграцияЧерез Python SDK, REST API, LangChainЧерез CLI, Python API
Что проверяетВвод/вывод на соответствие политикамУстойчивость модели к атакам
Генерация атакНет (только блокировка)Да (автоматическая мутация промптов)
РезультатЗаблокированный запрос или модифицированный ответОтчёт с найденными уязвимостями
Типичные пользователиDevSecOps, инженеры по безопасности в productionИсследователи безопасности, QA-инженеры
Пример использования«Не дать модели ответить на вопрос о взломе»«Проверить, можно ли заставить модель выдать секретный ключ»

5. Взаимодополнение: почему нужны оба инструмента

NeMo Guardrails и Garak не заменяют друг друга, а дополняют:

  1. Garak находит уязвимости → разработчик закрывает их (дообучение, доработка guardrails).
  2. NeMo Guardrails защищает от оставшихся угроз в production.
  3. Garak можно использовать для регрессионного тестирования guardrails: после обновления правил прогнать те же атаки и убедиться, что новые атаки блокируются.

Пример цикла безопасности:

  • Разработчик модели → обучение → Garak (находит 10 jailbreaks) → дообучение + настройка NeMo Guardrails → деплой → ежедневная runtime-защита NeMo Guardrails → ежемесячный прогон Garak для обновлённых атак.

6. Когда что использовать: конкретные сценарии

NeMo Guardrails использовать, когда:

  • Вы запускаете чат-бота для клиентов (нужно фильтровать нецензурную лексику, персональные данные).
  • LLM-приложение работает с конфиденциальными данными (медицина, финансы).
  • Требуется аудит всех взаимодействий с моделью (логирование и блокировка запрещённых тем).
  • Вы хотите добавить «мягкие» ограничения (например, «не отвечай на вопросы о политике»).

Garak использовать, когда:

  • Вы выпускаете новую версию модели и хотите сравнить её уязвимости с предыдущей.
  • Вы ищете конкретные типы уязвимостей (например, только prompt injection или data leakage).
  • Вы проводите аудит безопасности в рамках compliance (ISO 27001, SOC 2).
  • Вы тренируете red-team внутри компании — Garak даёт baseline для ручного тестирования.

Комбинированный сценарий: Вы хотите быть уверены, что модель устойчива к новым видам атак (Garak), а также имеет runtime-защиту на случай, если атака всё-таки сработает (NeMo Guardrails). Например, Garak находит, что модель можно обмануть через Unicode homoglyphs. Вы добавляете в NeMo Guardrails правило на нормализацию Unicode во входных данных. Затем повторно прогоняете Garak — атака больше не проходит.


7. Ограничения и best practices

NeMo Guardrails:

  • Не защищает от атак, которые маскируются под легитимные запросы (например, «explain how to pick a lock» vs «how to open a lock without key»). Требует тонкой настройки политик.
  • Снижает latency (добавляет вызов LLM для классификации намерений).
  • Может быть обойдён, если злоумышленник знает правила (social engineering).

Garak:

  • Не даёт 100% гарантии, что уязвимостей нет — только те, что есть в probes.
  • Результаты зависят от качества генерации атак (нужно обновлять библиотеки probes).
  • Может генерировать ложноположительные срабатывания (модель отвечает безопасно, но probe считает иначе).

Best practices:

  • Используйте оба инструмента в CI/CD пайплайне: перед каждым деплоем прогоняйте Garak, а production защищайте NeMo Guardrails.
  • Храните историю атак Garak (в формате JSON) для отслеживания регрессий.
  • Для NeMo Guardrails настраивайте разные наборы правил для разных каналов (например, для публичного чата — строгие правила, для внутреннего — мягкие).

Пет-проект для закрепления

Задача: Разработать минимальную систему защиты LLM-бота для генерации кода, используя NeMo Guardrails и Garak.

Инструменты:

  • Python 3.10+
  • NeMo Guardrails (pip install nemoguardrails)
  • Garak (pip install garak)
  • Локальная модель (например, microsoft/phi-2 через transformers)

Шаги:

  1. Настройка NeMo Guardrails:

    • Создайте конфигурацию с правилом: запретить генерацию кода для взлома (тестирование, эксплуатация).
    • Напишите файл config/rails.co с Colang-правилами.
    • Запустите простой Flask-сервер с NeMo Guardrails.
  2. Тестирование с Garak:

    • Напишите скрипт, который запускает Garak с probe jailbreak против вашей модели (без guardrails) и сохраняет отчёт.
    • Запустите Garak против эндпоинта с NeMo Guardrails (через --endpoint).
    • Сравните количество успешных атак до и после внедрения guardrails.
  3. Итерация:

    • Найдите в отчёте Garak атаки, которые обошли guardrails.
    • Добавьте новые правила в NeMo Guardrails (например, нормализацию base64, проверку на obfuscated code).
    • Повторите прогон Garak.

Ожидаемый результат:

  • Рабочий сервер с runtime-защитой.
  • Отчёт Garak, показывающий снижение количества успешных атак с (например) 15% до 2%.
  • Понимание, как интегрировать оба инструмента в реальный пайплайн.

Связь с другими вопросами

ВопросТема
124Защита RAG от инъекций (связано с NeMo Guardrails)
126Тестирование безопасности (Garak как инструмент)
123Типы атак (общие термины)
128Настройка guardrails (NeMo Guardrails)
119Общий процесс оценки безопасности
127Data leakage — одна из тем Garak

Навигация