Разбор задачи

Языковая модель в изолированном контуре банка

Ответ по внутренним регламентам собирается поиском внутри контура: перелистывать письма регулятора уже незачем

Проверяется: расчёт железа и регламент эксплуатации

Финансовый секторРаботаем по NDA

Задача

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

Где ломается

Что съедает срок и бюджет на самом деле

Почти никогда — не модель. Ниже места, из-за которых такие проекты встают, и что мы с каждым делаем.

Планирование железа считается не по размеру модели, а по памяти видеокарты

веса плюс KV-cache на каждого одновременного пользователя. Длинный документ в контексте и десяток параллельных запросов упираются в память раньше, чем в вычисления. Квантование снижает требования, но меняет ответы, поэтому варианты сравниваются на одном и том же наборе вопросов, а не на впечатлении.

Разграничение прав обязано применяться на этапе отбора фрагментов, до того как текст попал в контекст модели

Фильтрация уже готового ответа защитой не является: закрытый фрагмент к этому моменту прочитан и может быть пересказан своими словами без цитаты.

Журнал сам становится защищаемым ресурсом

В запрос и в контекст попадают куски документов и персональные данные, значит у журнала нужны собственное разграничение доступа, срок хранения и формат выгрузки — иначе средство контроля превращается в новый канал утечки.

Изолированный контур означает отсутствие доступа к репозиториям моделей и пакетов

Веса, образы и обновления переносятся через контролируемый шлюз по регламенту, а развёртывание должно воспроизводиться с нуля без интернета — иначе первое же обновление останавливает систему.

Ограничение, которое определяет решение

Информация ограниченного доступа не обрабатывается во внешних облачных ИИ-сервисах — запрет действует с марта 2026, и он определяет здесь всё остальное: инференс только на инфраструктуре банка, состав журналируемых событий и порядок разграничения берутся из требований 152-ФЗ, приказов ФСТЭК России № 17 и № 21, а для банковского контура — из требований ГОСТ Р 57580. Аттестация объекта информатизации и оценка соответствия — лицензируемые работы, их выполняет организация с лицензией ФСТЭК; сторона, которая разворачивает систему, готовит для неё документы, но её не подменяет.

Как проверить, что работа сделана

Приёмка идёт четырьмя проверками, и все они выполняются руками сотрудников банка. Первая — качество ответов на согласованном заранее наборе из 50–100 реальных вопросов с эталонными ответами и ссылками на документ и страницу.

Вторая — разграничение: те же вопросы задаются от лица учётных записей с разными правами по документам, к которым доступа нет; правильным результатом считается отсутствие ответа, а не пересказ закрытого фрагмента. Третья — журнал: по случайно выбранному обращению восстанавливается, кто и когда спросил, какой был запрос и какие фрагменты попали в контекст.

Четвёртая — изоляция: на стенде физически отключается внешний канал, после чего система должна продолжать работать, а установка — воспроизводиться из переданных скриптов.

О чём спросить любого подрядчика

  • Спросите прямо, на каком шаге применяются права доступа.
  • Ответ «модель отфильтрует лишнее» или «настроим фильтр на выходе» означает, что закрытый документ всё равно попадёт в контекст.
  • Спросите, что именно пишется в журнал, кто имеет к нему доступ и сколько он хранится — если журнал не описан как отдельный защищаемый ресурс, к нему не готовились.
  • Попросите объяснить, откуда в изолированном контуре берутся веса модели и пакеты и как выглядит развёртывание с нуля без интернета.
  • Уточните, остаются ли после проекта закрытые модули, ключи или лицензии, без которых систему нельзя перезапустить, — это условие имеет смысл записать в договор.
  • И отдельно: подрядчик без лицензии ФСТЭК не имеет права выполнять аттестацию, и он должен сказать это сам, а не растворять в формулировке «обеспечим соответствие требованиям».
Как делали

Порядок работ по этапам

На каждом этапе назван результат, который остаётся у заказчика. На проверке — признак, по которому работу не приняли бы.

  1. Обследование контураОпределили состав базы — внутренние регламенты, распоряжения, письма регулятора — и с подразделением безопасности зафиксировали, что за пределы контура не уходит ничего. Собрали профиль обращений: какие подразделения спрашивают, какой длины документы и сколько запросов ожидается одновременно.
  2. Расчёт конфигурацииКонфигурацию считали от памяти видеокарт и числа одновременных запросов — отсюда размер модели, длина контекста и число параллельных сессий. Поиск и инференс развели по разным службам, а права применили на этапе отбора фрагментов, до того как текст попадёт в контекст модели, а не фильтрацией готового ответа.
  3. Развёртывание в контуреПодняли инференс на GPU-сервере заказчика, затем индекс с гибридным поиском по регламентам и письмам, затем слой прав и веб-интерфейс. На стенде смотрели поведение при одновременных обращениях и при выгрузке моделей из памяти.
  4. Проверка доступаПрогнали вопросы, составленные методологами, и отдельно проверку прав: под учётной записью без доступа к документу его фрагмент не должен появиться ни в ответе, ни в ссылках. Единственное такое попадание считалось провалом и возвращало систему на доработку; ответ без ссылки на пункт регламента тоже не приняли бы.
  5. Обучение администраторовПередали развёрнутую систему, расчёт железа и регламент эксплуатации и переноса моделей. Администраторы научились заводить новую модель, пересобирать индекс и разбирать журнал обращений сами.
Архитектура и стек

Как это устроено внутри

Контур собран из трёх служб: шлюз на FastAPI, поисковый узел и инференс на vLLM, поднятый на GPU-сервере заказчика. Права применяет поисковый узел — фильтр по группам пользователя из LDAP уходит прямо в запрос к OpenSearch и pgvector, поэтому закрытый фрагмент не доходит до сборки контекста, а не вырезается из готового ответа. Запросы к картам выстроены в Redis Streams с ограничением числа одновременных генераций: прямая раздача на карту при всплеске упирается в память под KV-кеш, а очередь удерживает лишние запросы вместо отказа. Конфигурация памяти под модель и предельная длина контекста зафиксированы в compose-файле; при перезапуске узла очередь сохраняется, незавершённые запросы берутся заново, метаданные документов и журнал обращений лежат в PostgreSQL.

Стек
  • Python
  • FastAPI
  • PostgreSQL
  • OpenSearch
  • Redis Streams
  • Docker Compose
  • vLLM
  • pgvector
  • LDAP

Похожая задача у вас?

Разберём её на созвоне за 40 минут: назовём объём работ, ограничения контура и по каким числам вы будете принимать результат. Если задача не наша — скажем прямо.