AI Guardrails для безопасности LLM
Оркестратор TrustyAI Guardrails запускает детекторы для входных и выходных данных LLM, чтобы фильтровать или помечать контент. Он основан на проекте с открытым исходным кодом FMS-Guardrails. TrustyAI Operator предоставляет CRD GuardrailsOrchestrator для его развертывания и управления им.
В этом документе рассматриваются только развертывание с помощью AutoConfig и встроенный regex-детектор.
Содержание
Предварительные требованияРазвертывание с AutoConfigСтатус ресурсаВстроенный regex-детекторСтруктура ConfigMap gatewayПорты сервиса и справочник APIПорты и ролиАутентификация (auth включена)Справочник путей запросовИспользование API и примерыПроверка без вызова LLM (/api/v1/text/contents)API оркестратора: детекторы для каждого запроса (/api/v2/chat/completions-detection)API gateway: предустановленный pipeline (/all/v1/chat/completions)Предварительные требования
- Установлен TrustyAI Operator (см. Install TrustyAI).
- LLM развернут как InferenceService в целевом namespace.
Развертывание с AutoConfig
С AutoConfig оператор генерирует конфигурацию оркестратора и gateway на основе ресурсов в namespace; для базовой настройки ручные ConfigMap не требуются.
Создайте пользовательский ресурс GuardrailsOrchestrator с включенными autoConfig, встроенным детектором и gateway:
inferenceServiceToGuardrail: имя InferenceService (LLM), для которого применяется guardrail; должно совпадать с развернутой моделью в том же namespace.enableBuiltInDetectors: еслиtrue, добавляется sidecar встроенного regex-детектора.enableGuardrailsGateway: еслиtrue, gateway предоставляет предустановленные маршруты (например,/all/v1/chat/completions).
Статус ресурса
У ресурса есть подресурс status. status.phase может иметь значения Progressing, Ready или Error. При использовании AutoConfig status.autoConfigState содержит сгенерированные имена ConfigMap (generatedConfigMap, generatedGatewayConfigMap), обнаруженные сервисы и message. Трафик следует направлять только после того, как status.phase == Ready, и соответствующий Deployment будет готов.
Оператор создает ConfigMap оркестратора и ConfigMap gateway с именем <orchestrator-name>-gateway-auto-config. Встроенный детектор регистрируется как built-in-detector.
Встроенный regex-детектор
Встроенный детектор предоставляет алгоритмы на основе regex. Поддерживаемые алгоритмы включают:
Конфигурация gateway по умолчанию использует placeholder regex ($^). Чтобы включить определенный алгоритм (например, email), измените ConfigMap и установите detector_params.regex в имя алгоритма (например, - email).
Структура ConfigMap gateway
Имя ConfigMap: <orchestrator-name>-gateway-auto-config. Пример:
Измените regex под built-in-detector на нужный алгоритм (например, - email). После обновления дождитесь готовности Deployment.
Порты сервиса и справочник API
Оркестратор Guardrails доступен через Service с именем <orchestrator-name>-service. Номера портов зависят от того, включена ли аутентификация (аннотация security.opendatahub.io/enable-auth: "true" на GuardrailsOrchestrator).
Порты и роли
Когда auth включена, для портов gateway и built-in-detector требуется Bearer token.
Аутентификация (auth включена)
В запросы к портам gateway или built-in-detector необходимо включать:
Authorization: Bearer <token>
Токен должен быть действительным токеном Kubernetes ServiceAccount (или другим токеном, принимаемым cluster auth proxy) для субъекта, имеющего доступ к сервису (например, services/proxy). Неавторизованные запросы получают 401/403.
Как получить токен
Создайте ServiceAccount, Role (с get, create на services/proxy) и RoleBinding в том же namespace, что и Guardrails Orchestrator; затем создайте токен для ServiceAccount:
При необходимости можно задать длительность токена, например --duration=8760h на один год. Последняя команда выводит токен; используйте его как значение заголовка Authorization: Bearer <token>.
Клиенты внутри кластера могут использовать смонтированный projected volume токена ServiceAccount в качестве Bearer token.
Справочник путей запросов
Другие маршруты gateway (например, /<preset-name>/v1/chat/completions) определяются в ConfigMap gateway routes.
Использование API и примеры
Проверка без вызова LLM (/api/v1/text/contents)
Запустите встроенный regex-детектор для текста без вызова LLM. Используйте порт built-in-detector (8080 или 8480). Тело запроса: contents (список строк), detector_params (например, regex: ["email"]).
Используйте адрес сервиса (изнутри кластера: <orchestrator-name>-service.<your-namespace>.svc.cluster.local; снаружи: Ingress host, если он доступен) и порт built-in-detector (см. Порты и роли).
Ответ: массив массивов объектов детекции (по одному элементу на каждый элемент contents). Каждый объект содержит start, end, text, detection (например, EmailAddress), detection_type (например, pii) и score.
Пример ответа (standalone detection, найден email)
API оркестратора: детекторы для каждого запроса (/api/v2/chat/completions-detection)
Используйте порт orchestrator (8032 или 8432), когда вызывающая сторона должна выбирать, какие детекторы запускаются для каждого запроса. Тело запроса: model, messages и, при необходимости, detectors (например, input / output с параметрами детекторов).
Пример: запуск встроенного детектора с regex email на входе и выходе:
Если детектор находит совпадение во входных данных (например, email), в ответе присутствуют detections и warnings, а choices пуст:
Пример ответа (input вызывает детекцию)
Форма ответа совпадает с chat gateway: choices, detections, warnings. Если нужен обычный chat completion без детекции, не указывайте detectors.
API gateway: предустановленный pipeline (/all/v1/chat/completions)
Используйте порт gateway (8090 или 8490) для chat с фиксированным конвейером детекторов (определен в ConfigMap gateway). Тело запроса: model, messages (в стиле OpenAI). Если требуется выбор детектора для каждого запроса, используйте вместо этого API оркестратора.
Используйте адрес сервиса и порт gateway (см. Порты и роли).
Когда входные/выходные данные проходят проверку: detections и warnings равны null, choices содержит ответ модели:
Пример ответа (input/output pass)
Когда входные данные вызывают детекцию (например, PII): detections и warnings заполнены, choices пуст: