Инженер включил debug-лог на ночь. Утром в observability лежали API-ключ провайдера из system prompt, телефоны клиентов и медицинский комментарий из вложения. Сам ответ пользователю был корректным. Инцидент создала инфраструктура вокруг модели.
Сначала описывают путь данных: что приходит, где очищается, кому отправляется, сколько хранится и кто может прочитать. Юридические требования зависят от юрисдикции и договора, поэтому инженер не сочиняет их по памяти. Он превращает согласованные ограничения в код, конфигурацию и проверяемые сроки хранения.
Минимизация до вызова
import re
EMAIL = re.compile(r"\b[^\s@]+@[^\s@]+\.[^\s@]+\b")
PHONE = re.compile(r"(?<!\d)\+?\d[\d ()-]{8,}\d")
def redact(text: str) -> str:
text = EMAIL.sub("[EMAIL]", text)
return PHONE.sub("[PHONE]", text)Regex является первым барьером, а не полной DLP-системой. Имена, номера договоров и данные в свободной форме требуют правил предметной области или отдельного детектора. Иногда PII нужна задаче; тогда её не маскируют наугад, а выбирают разрешённый маршрут и фиксируют основание обработки.
Secrets хранят в secret manager, выдают workload identity с минимальными правами и регулярно ротируют. Ключ не должен попадать в prompt, exception, trace или клиентский ответ. Логи по умолчанию содержат метаданные: request ID, модель, длительность, usage, версию prompt и статус redaction. Полный payload включают только по отдельной политике доступа и retention.
request -> classify data -> redact/minimize -> allowed provider/region
-> generate -> output scan -> restricted audit metadataНеприятные отказы
Провайдер использует данные не так, как предполагала команда; backup живёт дольше основной таблицы; support имеет доступ к trace; пользователь удалён, а embeddings остались; тестовый датасет собран из production без основания; prompt injection просит модель напечатать секрет из контекста. Шифрование диска не исправляет лишнюю отправку внешнему API.
Нужен реестр обработок и владельцы решений. Для каждого поля указывают цель, систему хранения, получателей, retention и процедуру удаления. Ответы «кажется, провайдер не обучается на API» для аудита не годятся; нужна действующая документация и договор.
Правило главы
Данные, которые не нужны модели, не должны пересекать её границу. Всё необходимое получает явный маршрут, срок хранения и владельца. Compliance не добавляют после запуска как ещё один middleware.
Практикум
Нарисуйте data-flow одной функции от HTTP-запроса до backup и traces. Подложите canary email, телефон и фальшивый API-ключ. Проверьте prompt, provider logs, application logs, очередь ошибок и удаление. Затем оформите таблицу retention и автоматический тест, который падает при появлении canary в observability.