AI Guardrails для безопасности LLM
TrustyAI Guardrails Orchestrator запускает детекторы на входных и выходных данных LLM для фильтрации или пометки контента. Он основан на open-source проекте FMS-Guardrails. TrustyAI Operator предоставляет CRD GuardrailsOrchestrator для его развертывания и управления.
В этом документе рассматривается только развертывание с помощью AutoConfig и встроенный детектор на основе regex.
Содержание
Предварительные требованияРазвертывание с AutoConfigСтатус ресурсаВстроенный детектор на основе regexСтруктура ConfigMap gatewayПорты сервиса и справка по APIПорты и ролиАутентификация (auth enabled)Справка по путям запросовИспользование API и примерыОтдельное обнаружение (/api/v1/text/contents)API оркестратора: детекторы на запрос (/api/v2/chat/completions-detection)API gateway: предустановленный пайплайн (/all/v1/chat/completions)Предварительные требования
- Установлен TrustyAI Operator (см. Install TrustyAI).
- LLM развернут как InferenceService в целевом namespace.
Развертывание с AutoConfig
С AutoConfig оператор генерирует конфигурацию оркестратора и gateway из ресурсов в namespace; для базовой настройки не требуются ручные ConfigMap.
Создайте кастомный ресурс GuardrailsOrchestrator с включённым autoConfig, встроенным детектором и gateway:
inferenceServiceToGuardrail: имя InferenceService (LLM) для защиты; должно совпадать с развернутой моделью в том же namespace.enableBuiltInDetectors: приtrueдобавляется встроенный детектор на основе regex в sidecar.enableGuardrailsGateway: приtruegateway открывает предустановленные маршруты (например,/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
Встроенный детектор предоставляет алгоритмы на основе регулярных выражений. Поддерживаемые алгоритмы включают:
Конфигурация 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 токен.
Аутентификация (auth enabled)
Запросы к портам gateway или built-in-detector должны содержать:
Authorization: Bearer <token>
Токен должен быть валидным Kubernetes ServiceAccount токеном (или другим токеном, принимаемым прокси аутентификации кластера) для субъекта с доступом к сервису (например, services/proxy). Неавторизованные запросы получают 401/403.
Как получить токен
Создайте ServiceAccount, Role (с правами get, create на services/proxy) и RoleBinding в том же namespace, что и Guardrails Orchestrator; затем создайте токен для ServiceAccount:
Опционально задайте длительность токена, например --duration=8760h для одного года. Последняя команда выводит токен; используйте его в заголовке Authorization: Bearer <token>.
Клиенты внутри кластера могут использовать проецируемый volume с токеном ServiceAccount как Bearer токен.
Справка по путям запросов
Другие маршруты gateway (например, /<preset-name>/v1/chat/completions) определены в ConfigMap gateway в разделе routes.
Использование API и примеры
Отдельное обнаружение (/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, если открыт) и порт built-in-detector (см. Порты и роли).
Ответ: массив (по одному элементу на каждый элемент contents) массивов объектов обнаружения. Каждый объект содержит start, end, text, detection (например, EmailAddress), detection_type (например, pii) и score.
Пример ответа (отдельное обнаружение, обнаружен email)
API оркестратора: детекторы на запрос (/api/v2/chat/completions-detection)
Используйте порт orchestrator (8032 или 8432), когда вызывающий должен выбирать, какие детекторы запускать для каждого запроса. Тело запроса: model, messages и опционально detectors (например, input / output с параметрами детектора).
Пример: запустить встроенный детектор с regex email на входных и выходных данных:
Если детектор находит совпадение во входных данных (например, email), в ответе присутствуют detections и warnings, а choices пуст:
Пример ответа (обнаружение во входных данных)
Формат ответа совпадает с ответом gateway для чата: choices, detections, warnings. Если не нужны детекторы, опустите detectors для обычного чат-комплишена без детекции.
API gateway: предустановленный пайплайн (/all/v1/chat/completions)
Используйте порт gateway (8090 или 8490) для чата с фиксированным пайплайном детекторов (определённым в ConfigMap gateway). Тело запроса: model, messages (OpenAI-стиль). Для выбора детекторов на запрос используйте API оркестратора.
Используйте адрес сервиса и порт gateway (см. Порты и роли).
Если входные/выходные данные проходят проверку: detections и warnings равны null, choices содержит ответ модели:
Пример ответа (вход/выход прошли проверку)
Если входные данные вызывают детекцию (например, PII): detections и warnings установлены, choices пуст: