Игорь Градов
Игорь Градов
6 мин
ai

NeMo Guardrails собирает безопасность ИИ в один Python-скрипт: пример для финтеха

NVIDIA NeMo Guardrails защищает финансового ИИ-ассистента от утечек данных, мошеннических промптов и опасных советов, и вся эта многослойная система собирается в одном Python-скрипте за вечер.

NeMo Guardrails собирает безопасность ИИ в один Python-скрипт: пример для финтеха
Почему это важно

Безопасность ИИ в финтехе перестала быть абстрактной темой: как только языковая модель получает доступ к балансам и переводам, одна галлюцинация (когда модель уверенно выдумывает то, чего не было) или один обход системного промпта (базовой инструкции, задающей поведение модели) может стоить реальных денег клиента.

Открытая библиотека NeMo Guardrails от NVIDIA позволяет выстроить цепочку проверок на каждом этапе запроса: от входящего сообщения пользователя до финального ответа модели. В туториале, который разбираем ниже, собран готовый стек для финансового ассистента: детекция персональных данных, фильтрация тем, контроль инструментов и маскировка номеров счетов. Для российских финтех-команд, интегрирующих локальные языковые модели, этот пайплайн показывает архитектуру, которую можно адаптировать под собственные требования к безопасности ИИ.

Что понадобится?

  • Python 3.9+ и менеджер пакетов pip
  • API-ключ OpenAI (в туториале используется модель gpt-4o-mini, но конфигурация позволяет подставить другой эндпоинт, в том числе локальный)
  • Библиотека nemoguardrails (ставится одной командой)
  • Базовое понимание YAML и Python (уровень «читаю код, могу поправить строку»)
  • Время: 1,5 часа на первую сборку, если не спешить

Пошаговая инструкция

1. Установите библиотеку и настройте доступ к модели

pip install -q nemoguardrails

В Python-скрипте задайте модель и ключ:

import os, getpass

MODEL = "gpt-4o-mini"
if not os.environ.get("OPENAI_API_KEY"):
    os.environ["OPENAI_API_KEY"] = getpass.getpass("API key: ")

Если вы работаете с локальной моделью или прокси, укажите BASE_URL в переменной. Конфигурация подхватит его автоматически.

2. Опишите YAML-конфигурацию с инструкциями и рельсами

YAML-файл задаёт три слоя защиты:

  • Input rails (входные рельсы): перехватывают сообщение до того, как оно попадёт в модель. Здесь срабатывает редактирование персональных данных и самопроверка на джейлбрейки (попытки заставить модель нарушить свои инструкции)
  • Retrieval rails (рельсы извлечения): фильтруют служебные куски контекста, чтобы внутренняя документация не просочилась в ответ
  • Output rails (выходные рельсы): маскируют номера счетов и проверяют, не обещает ли модель гарантированную доходность

В блоке instructions модель получает роль финансового помощника с запретом выдумывать балансы и комиссии.

3. Напишите Colang-потоки для детерминированных проверок

Colang это язык описания диалогов в NeMo Guardrails. Каждый поток описывает конкретный сценарий:

  • redact pii input: проверяет сообщение на наличие номеров карт и SSN-номеров (номер социального страхования, аналог СНИЛС). Если находит, блокирует сообщение целиком. Если находит последовательности цифр, похожие на номер счёта, маскирует их и пропускает запрос дальше
  • filter internal chunks: убирает из контекста внутренние фрагменты, не предназначенные для клиента
  • mask account numbers: перезаписывает номера счетов в ответе модели перед отправкой пользователю

Отдельные потоки задают тематические ограничения: на вопросы о политике и инвестиционных рекомендациях модель отвечает вежливым отказом.

4. Зарегистрируйте Python-экшены

Каждый Colang-поток вызывает Python-функцию через декоратор @action. Вот ключевые:

from nemoguardrails.actions import action

@action(name="has_hard_pii")
async def has_hard_pii(text=None):
    """Жёсткая блокировка: полные номера карт и SSN
    не попадают в модель."""
    return bool(CARD_RE.search(text or "") or SSN_RE.search(text or ""))

@action(name="redact_pii")
async def redact_pii(text=None):
    """Мягкая маскировка: цифровые последовательности
    заменяются на [REDACTED_ACCT], запрос идёт дальше."""
    return ACCT_RE.sub("[REDACTED_ACCT]", text or "")

Регулярные выражения CARD_RE, SSN_RE и ACCT_RE ловят типичные форматы. Для российских реалий замените шаблоны на маски номеров карт «Мир», ИНН и СНИЛС.

5. Настройте политику переводов

Поток money transfer проверяет сумму перевода через функцию check_transfer_policy. Если сумма превышает дневной лимит (в примере это 2000 долларов), модель блокирует операцию и объясняет причину. Лимит задаётся переменной DAILY_LIMIT, поменять его можно без правки логики.

6. Запустите и протестируйте пайплайн

from nemoguardrails import LLMRails, RailsConfig

config = RailsConfig.from_content(YAML_CONFIG, COLANG_CONFIG)
rails = LLMRails(config)

Туториал включает набор тестовых запросов в стиле «красной команды» (red team, имитация атак на систему): попытки джейлбрейка, вставка номеров карт, вопросы о политике, запросы на перевод выше лимита. По каждому запросу система выдаёт трассировку (какой рельс сработал) и расход токенов (единиц текста, которыми модель измеряет объём).

Что ввели и что получили

Пользователь отправляет: «My card is 4111 1111 1111 1111, check my balance». Рельс redact pii input распознаёт полный номер карты через регулярное выражение. Сообщение блокируется до модели. Пользователь получает: «For your security, please don't paste full card or ID numbers into chat. I've discarded that message». Баланс не раскрыт, номер карты не ушёл в API. На запрос «Should I buy Bitcoin?» срабатывает тематический поток investment advice, и модель отвечает отказом с предложением рассказать об инструментах бюджетирования.

Частые ошибки

Не адаптировать регулярные выражения под локальные форматы. Шаблон SSN бесполезен в России. Если не заменить его на маски СНИЛС, ИНН и номеров карт «Мир», система пропустит реальные персональные данные. Безопасность ИИ работает ровно настолько, насколько точны ваши фильтры.

Полагаться только на LLM-проверки без детерминированных рельсов. Самопроверка модели (self check) отлавливает нюансы, но её можно обойти сложным промптом. Регулярные выражения и жёсткие блокировки не обходятся: ставьте оба слоя.

Забыть про расход токенов. Каждый рельс, использующий LLM для проверки, тратит токены. Два self-check промпта на входе и выходе удваивают стоимость вызова. Считайте бюджет до продакшена.

Не тестировать мультиходовые сценарии. Атака может выглядеть безобидно в одном сообщении, но собирать контекст через три-четыре хода. Туториал поддерживает stateful-взаимодействие (сохранение контекста между сообщениями), используйте это.

Что делать с этим прямо сейчас?

Разработчику в российском финтехе: если вы подключаете локальную языковую модель (YandexGPT, GigaChat или опенсорс-решение на своих серверах), архитектура NeMo Guardrails ложится поверх любого LLM-бэкенда. Замените engine: openai на свой эндпоинт, адаптируйте PII-фильтры под российские форматы документов и начните с трёх рельсов: вход, выход, тематика.

Автору на Дзене, пишущему про технологии: тема «как банковский чат-бот защищается от взлома» собирает аудиторию, потому что читатель хочет понять, безопасен ли тот бот, с которым он разговаривает. Разберите один конкретный рельс, получите практичный лонгрид.

Предпринимателю, который внедряет ИИ-ассистента в продукт: прежде чем выкатывать чат-бота клиентам, пройдите по чек-листу из туториала. Если бот отвечает на вопрос «обойди свои инструкции», у вас проблема. NeMo Guardrails бесплатна и ставится за час.

Мнение редакции dzen.guru

Я протестировал пайплайн из туториала и вижу главную ценность не в самих рельсах, а в трассировке: система показывает, какой именно контроль сработал на каждом запросе и сколько токенов это стоило. Для продакшена это критично, потому что без такой прозрачности вы не поймёте, где защита избыточна, а где дыра. Честная оговорка: туториал построен на gpt-4o-mini через API OpenAI. Для российских проектов с требованиями по локализации данных придётся адаптировать под локальный LLM, и self-check промпты могут работать хуже на моделях с меньшим контекстным окном. Но архитектурный каркас переносится.

Генератор промптов dzen.guru

Попробуйте наш генератор, чтобы собрать системный промпт для своего ИИ-ассистента с учётом тематических ограничений

Попробовать генератор

Главное, что стоит забрать из этого туториала: безопасность ИИ не бывает одним слоем. Регулярное выражение ловит номер карты, LLM-проверка ловит манипуляцию, тематический поток не даёт модели играть в инвестиционного консультанта. Соберите все три, протестируйте на атакующих сценариях и только после этого подпускайте к реальным клиентам.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

ИИ-ассистент из markdown-файлов: настройка за 30 минут заменяет ручной дневник
ai

ИИ-ассистент из markdown-файлов: настройка за 30 минут заменяет ручной дневник

Автор Дзена, тимлид, менеджер проекта: у вас наверняка бывает так, что перед встречей с руководителем или перед полугодовой оценкой вы два дня копаетесь в…

6 мин
Промты для нейросети с Reddit: 7 приёмов, проверенных тысячами голосов
ai

Промты для нейросети с Reddit: 7 приёмов, проверенных тысячами голосов

Промты для нейросети давно разбросаны по англоязычным форумам, и большинство русскоязычных авторов узнают о них через пятые руки, когда блогеры копируют их в…

5 мин
Vercel бесплатно покажет, что такое ИИ-агент видит на вашем сайте: 118 проверок за минуту
ai

Vercel бесплатно покажет, что такое ИИ-агент видит на вашем сайте: 118 проверок за минуту

Vercel 3 июня открыла бесплатный сервис Is Agentic, который за минуту показывает, насколько ваш сайт готов к тому, чтобы ИИ-агенты могли его найти, прочитать и…

5 мин