Проблема возникает не в модели, а между системами

Представим обычный сценарий: менеджер перешёл из продаж в закупки. В файловом хранилище ему закрыли папку с коммерческими условиями клиентов. Но внутренний помощник уже проиндексировал документы, а часть ответов сохранил в кэше. Если RAG продолжает искать по старым фрагментам от имени общего технического аккаунта, смена роли в исходной системе сама по себе не гарантирует, что менеджер перестанет получать сведения.

Это не сообщение об инциденте конкретной компании, а проверочный сценарий для проекта. Локальное размещение модели снижает зависимость от внешней передачи данных, но не подменяет управление доступом внутри предприятия. OWASP отдельно относит ошибки в векторном хранилище и извлечении к рискам RAG, а для чувствительной информации рекомендует принцип минимальных прав. Практический вопрос поэтому звучит так: через какое время после отзыва права тот же пользователь перестанет видеть документ во всех путях доступа?

Где остаются копии и следы документа

В типовой схеме есть не одна «база знаний», а цепочка. Сначала коннектор читает исходный документ. Затем его разбивают на фрагменты, создают векторы и записывают текст или ссылку на текст вместе с метаданными. Поиск возвращает подходящие фрагменты, приложение собирает контекст для модели, а ответ может попасть в историю диалога, журнал, кэш или экспорт. Удаление права в исходной папке меняет лишь одну часть цепочки.

Для каждого документа стоит вести устойчивый идентификатор, версию, источник, владельца и статус доступа. Для каждого фрагмента — ссылку на этот документ и его актуальную область видимости. Если один файл доступен разным группам на уровне отдельных разделов, грубый тег «доступен отделу» не подходит: граница доступа должна совпадать с единицей извлечения. Удобнее заранее отказаться от индексирования тех разделов, для которых приложение не умеет выразить и проверить право.

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

Минимальная архитектура отзыва

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

На каждом пользовательском запросе нужны два барьера:

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

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

Не стоит путать отзыв права с физическим удалением всех следов. История диалогов, экспорт, журналы аудита и резервные копии живут по разным правилам хранения. Для них нужны отдельные сроки, роли доступа и процедуры удаления или ограничения. Уже отправленное человеку сообщение нельзя автоматически «забрать назад»; именно поэтому критично не допускать новой выдачи после события отзыва.

Что измерять вместо обещания «мгновенно»

Практичный показатель — время от изменения права в исходной системе до первого гарантированного отказа в RAG. Его полезно разбить на задержку получения события, обновление индекса, инвалидацию кэша и проверку при запросе. Для особо чувствительных документов наибольшую защиту даёт проверка действующего права непосредственно при чтении, а не ожидание фоновой переиндексации. Но она добавляет сетевой вызов и зависимость от каталога прав; задержку ответа нужно измерить на своих нагрузках.

В тестовой выборке достаточно нескольких десятков документов с разными владельцами и тремя ролями: владелец, сотрудник другого отдела, бывший участник проекта. Сначала подтвердите, что разрешённые вопросы находят нужные источники. Затем отзовите право и повторите тот же вопрос, перефразировку и прямое открытие ссылки. Проверьте также старый чат, кэшированный ответ и поиск после сбоя коннектора. Необходимый результат — отсутствие защищённого текста, а не просто отсутствие ссылки.

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

Экономика и следующий шаг

Для малого бизнеса сложность чаще лежит не в видеокарте, а в связке учётных записей, версий документов и кэшей. Не покупайте новый слой инфраструктуры только ради красивой схемы прав, если действующее хранилище и каталог уже дают нужные идентификаторы и события. Сначала оцените стоимость коннектора, проверки прав при запросе, журналирования и регулярного теста. Сравнивайте её со стоимостью ручного поиска в документах и с риском ошибочной выдачи; универсального процента окупаемости здесь нет.

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

Иллюстрация: Cbarille / Wikimedia Commons, CC BY-SA 4.0; скриншот консоли управления ACL, квадратный кроп. Это пример интерфейса прав, а не рекомендация конкретного продукта.