diff --git a/CHANGELOG.md b/CHANGELOG.md index b68edcb..6b6bccc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,9 +96,25 @@ - Критерий приёмки: после пилота на одной команде в журнале есть не менее 5 реальных записей, каждая с категорией данных и отметкой обезличивания; повторяющаяся операция закрывается одной строкой, без ручного заполнения таблицы каждый раз. - Причина: в папке «AI безопасность» журнал присутствует только как пустая форма Регламента. Пустая форма — не контроль. -### 4. (Задел, вне объёма 1.7.6) Принуждение на исходящем запросе +### 4. Принуждение на исходящем запросе — механизм есть, не хватает решения -Каталог `hooks/` пуст — механизма, физически не дающего уйти оригиналу, нет. Кандидат на следующий релиз: перехват исходящего запроса (hook или шлюз) с прогоном шаблонов ПДн и блокировкой отправки. Перед планированием — проверить, какие события Hermes умеет перехватывать; обещать механизм без проверки нельзя. +Проверено 05.11.2026 по установленной сборке: точка перехвата в Hermes существует и врезана в путь запроса. + +- Плагин регистрирует middleware: `ctx.register_middleware("llm_request", fn)` — `hermes_cli/plugins.py:939`. +- Применяется перед вызовом провайдера: `agent/turn_api_request.py:156` → `apply_llm_request_middleware(...)`, и `api_kwargs` заменяются тем, что вернул плагин (`hermes_cli/middleware.py:88`). +- Middleware видит полный `request`, включая `messages`/`input`, и может переписать их или прервать вызов исключением. +- Парный механизм `llm_execution` оборачивает сам вызов провайдера — там же делается обратная подстановка масок в ответ. + +Значит «перехвата нет» — это про отсутствие реализации, а не про отсутствие возможности. Реально мешают четыре решения, а не код: + +1. **Режим по умолчанию.** Жёсткая блокировка толкает работу на личный телефон (об этом прямо предупреждает отраслевой разбор). Нужен режим «маскировать + писать в журнал», блокировка — только для красной категории. +2. **Обратная подстановка.** Маска на входе без демаскировки ответа делает ответ бесполезным: модель вернёт `[РОЛ_01]`. Нужны две точки — `llm_request` и `llm_execution`. +3. **Ложные срабатывания.** Шаблоны ловят номера СП и ГОСТ, ИНН поставщика, кадастровые в спецификации. Нужен период «warn»: только журнал, правила настраиваются на реальном потоке 20–30 запросов. +4. **Правовая рамка.** Middleware обрабатывает ПДн внутри агента → агент становится средством обработки. Карта соответствий хранится вне модели, журнал обязателен. + +Чего не закроет и перехват: картинки (vision), вложения, и путь «человек скопировал в браузер мимо агента» — это только шлюз или DLP на периметре. + +- Критерий приёмки: на контрольном запросе с ФИО, ИНН и адресом в модель уходит маска, в журнале появляется строка, ответ возвращается с реальными значениями; на 20 запросах без ПДн — ноль блокировок и ноль ложных масок. ### 5. Состав из «Mastermind — требования к следующей сборке»