AI Guardrails для безопасности LLM
TrustyAI Guardrails Orchestrator запускает детекторы для входных и выходных данных LLM, чтобы фильтровать или помечать содержимое. Он основан на проекте с открытым исходным кодом FMS-Guardrails. TrustyAI Operator предоставляет CRD GuardrailsOrchestrator для его развертывания и управления им.
В этом документе рассматриваются только развертывание AutoConfig и встроенный regex detector.
Содержание
Предварительные требованияРазвертывание с AutoConfigСостояние ресурсаВстроенный regex detectorСтруктура ConfigMap gatewayПорты сервисов и справка по APIПорты и ролиАутентификация (auth enabled)Справка по путям запросовИспользование API и примерыАвтономное обнаружение (/api/v1/text/contents)API orchestrator: детекторы для каждого запроса (/api/v2/chat/completions-detection)API gateway: предустановленный пайплайн (/all/v1/chat/completions)Предварительные требования
- Установлен TrustyAI Operator (см. Install TrustyAI).
- LLM развернута как InferenceService в целевом namespace.
Развертывание с AutoConfig
При использовании AutoConfig оператор генерирует конфигурацию orchestrator и gateway на основе ресурсов в namespace; для базовой настройки вручную создавать ConfigMap не требуется.
Создайте пользовательский ресурс GuardrailsOrchestrator с включенными autoConfig, встроенным детектором и gateway:
inferenceServiceToGuardrail: имя InferenceService (LLM), для которого применяется guardrail; должно совпадать с развернутой моделью в том же namespace.enableBuiltInDetectors: еслиtrue, добавляется sidecar со встроенным regex detector.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 orchestrator и ConfigMap gateway с именем <orchestrator-name>-gateway-auto-config. Встроенный детектор регистрируется как built-in-detector.
Встроенный regex detector
Встроенный детектор предоставляет алгоритмы на основе regex. Поддерживаются следующие алгоритмы:
Конфигурация gateway по умолчанию использует шаблон regex ($^). Чтобы включить конкретный алгоритм (например, email), обновите ConfigMap и установите detector_params.regex в имя алгоритма (например, - email).
Структура ConfigMap gateway
Имя ConfigMap: <orchestrator-name>-gateway-auto-config. Пример:
Измените regex у built-in-detector на нужный алгоритм (например, - email). После обновления дождитесь готовности Deployment.
Порты сервисов и справка по API
Guardrails Orchestrator доступен через Service с именем <orchestrator-name>-service. Номера портов зависят от того, включена ли аутентификация (аннотация security.opendatahub.io/enable-auth: "true" на GuardrailsOrchestrator).
Порты и роли
Когда аутентификация включена, для портов gateway и built-in-detector требуется Bearer token.
Аутентификация (auth enabled)
Запросы к портам gateway или built-in-detector должны содержать:
Authorization: Bearer <token>
Токен должен быть действительным токеном Kubernetes ServiceAccount (или другим токеном, принимаемым auth proxy кластера) для субъекта с доступом к service (например, 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 и примеры
Автономное обнаружение (/api/v1/text/contents)
Запустите встроенный regex detector для текста без вызова LLM. Используйте порт built-in-detector (8080 или 8480). Тело запроса: contents (список строк), detector_params (например, regex: ["email"]).
Используйте адрес service (изнутри кластера: <orchestrator-name>-service.<your-namespace>.svc.cluster.local; извне: Ingress host, если он опубликован) и порт built-in-detector (см. Порты и роли).
Ответ: массив массивов объектов обнаружения (по одному элементу на каждый item в contents). Каждый объект содержит start, end, text, detection (например, EmailAddress), detection_type (например, pii) и score.
Пример ответа (автономное обнаружение, найден email)
API orchestrator: детекторы для каждого запроса (/api/v2/chat/completions-detection)
Используйте порт orchestrator (8032 или 8432), когда вызывающей стороне нужно выбирать, какие детекторы запускаются для каждого запроса. Тело запроса: model, messages и, при необходимости, detectors (например, input / output с параметрами детектора).
Пример: запуск встроенного детектора с regex email для input и output:
Когда детектор находит совпадение во входных данных (например, email), ответ включает detections и warnings, а choices пуст:
Пример ответа (input вызывает обнаружение)
Структура ответа соответствует chat gateway: choices, detections, warnings. Если нужен обычный chat completion без обнаружения, не указывайте detectors.
API gateway: предустановленный пайплайн (/all/v1/chat/completions)
Используйте порт gateway (8090 или 8490) для chat с фиксированным пайплайном детекторов (определяется в ConfigMap gateway). Тело запроса: model, messages (в стиле OpenAI). Для выбора детекторов для каждого запроса используйте вместо этого API orchestrator.
Используйте адрес service и порт gateway (см. Порты и роли).
Если input/output проходят проверку: detections и warnings равны null, в choices содержится ответ модели:
Пример ответа (input/output проходят)
Когда input вызывает обнаружение (например, PII): detections и warnings заполняются, choices пуст: