Глава 5 — Валидация входа и фильтрация выхода
Пятый пост поглавного разбора LLM Primer VII: AI Security. Глава, превращающая многослойную рамку смягчения главы 4 в операционную дисциплину — ступени санитизации, инструментарий guardrail'ов, структурный вывод, red teaming и метрики безопасности, что-то значащие.
Зачем существует эта глава
Четырёхслойная архитектура смягчения, названная в главе 4, хороша ровно настолько, насколько её слои операционны. Глава 5 развивает два из них: сторону ввода, где запросы пользователей инспектируются и либо пропускаются, преобразуются, либо отклоняются; и сторону вывода, где ответ модели проверяется по второму набору ворот до того, как он покинет систему. Вокруг обеих сидят дисциплины структурного промптинга, adversarial-тестирования и измерения безопасности. Инструменты созрели — Llama Guard, NeMo Guardrails, Lakera Guard, AWS Bedrock Guardrails, Garak, PyRIT, promptfoo — и операционные паттерны их проводки друг к другу сошлись.
5.1 Санитизация ступенчатая, не однократная
«Санитизация ввода» несёт вводящие в заблуждение коннотации эпохи SQL-инъекций. В системах LLM санитизация — ступенчатый процесс: осмотреть, классифицировать, преобразовать, пропустить или отклонить, — чей выход не «безопасный» ввод, а ввод, прошедший набор политических ворот с зафиксированным исходом. У конвейера обычно четыре вида проверок, упорядоченных по стоимости. Структурные проверки самые дешёвые: лимиты длины, ограничения по набору символов, Unicode NFKC-нормализация, отделение zero-width и confusable-символов, из которых состоит большая часть литературы о контрабанде. Проверки на основе паттернов ловят явные переопределения и известные adversarial-шаблоны; они шумные в обоих направлениях, но полезны как грубое сито, когда попадания логируются, а не блокируются. Классификационные проверки используют выделенные модели безопасности — Llama Guard, OpenAI Moderation API и эквиваленты Lakera и AWS Bedrock — для оценки ввода по определённой таксономии. LLM-проверки, самый дорогой уровень, вызывают меньшую модель для рассуждения об интенте, когда уверенность классификатора промежуточная. У каждой ступени есть частота ложных срабатываний и ложных пропусков, и обе должны быть измерены до того, как конвейеру доверят продакшн-трафик.
5.2 Структурный вывод — защита, а не просто удобство форматирования
Архитектура defence-in-depth главы 4 имеет третий структурный слой, который развивает эта глава: ограничение вывода модели определённой схемой, чтобы даже вывод, находящийся под влиянием инъекции, не мог покинуть структурный конверт. Простейшая форма — JSON с принуждением схемой. Модели инструктируется выдавать JSON, соответствующий схеме; приложение парсит и валидирует; несоответствующий вывод отклоняется или переспрашивается. Библиотека instructor Джейсона Лю обёртывает клиентов OpenAI и Anthropic pydantic-моделями — разработчик пишет класс, описывающий структуру вывода, а библиотека обрабатывает построение промпта, валидацию и retry. Guidance от Microsoft Research идёт дальше, ограничивая по-токенную генерацию против шаблона, определяющего, какие именно позиции могут содержать свободный текст. На стороне модерации вывода семейство Llama Guard от Meta — версии 1–3 с добавлением мультимодального покрытия в 3 — стало каноническим открытым классификатором за окно 2023–2025 годов, интегрированным в большинство продакшн-стеков как фильтр ответа. NVIDIA NeMo Guardrails и коммерческие предложения от Lakera, AWS Bedrock и Cisco AI Defense конкурируют на схожей основе.
5.3 Неизмеренная защита — не защита
Red teaming — то, что превращает заявление о безопасности в измерение. Ручной red teaming — обученные adversarial-тестировщики, часто внешние — производит конкретные промпты, преуспевшие против развёртывания, сгруппированные по паттерну атаки. Автоматизированный red teaming масштабирует ручную работу по пространству входа. NVIDIA Garak, открытый в 2023 и постоянно обновляемый, гоняет батарею проб против целевой точки и сообщает, какие преуспели; пробы покрывают prompt injection, утечку данных, элицитацию hate-speech, кодовую контрабанду, role-play-джейлбрейки и так далее. Microsoft PyRIT (Python Risk Identification Toolkit), выпущенный в 2024, добавляет агентный red-team-паттерн, где одна модель генерирует атаки против другой. promptfoo сравнивает промпты и модели против оценочных наборов, полезно, когда вопрос в том, какая конфигурация безопаснее. Метрики, которые имеют значение, составляют два режима отказа. Attack success rate отвечает на «какая доля определённого набора атак прошла?» Refusal calibration отвечает на «какая доля отклонённых запросов не должна была быть отклонена?» Система с нулевым attack success и 50% refusal rate не решила проблему; она сдвинула стоимость с небезопасных выводов на бесполезные. Обе метрики требуют размеченных сэмплов, взятых из распределений реального трафика, и обе условны на композиции оценочного набора. Отчёт одного числа без композиции — это то, где заявления о безопасности вводят в заблуждение чаще всего.
Что подготавливает глава 5
Глава 6 берётся за retrieval-augmented generation конкретно. Слой ввода, разработанный здесь, обращается с сообщением пользователя как с недоверенной частью. RAG-системы добавляют вторую недоверенную часть: извлечённые куски, чьё происхождение часто менее чистое, чем сообщение пользователя. Косвенная prompt-инъекция Гресаке, характеристика инъекционных атак против LLM-интегрированных приложений Liu, отравление retrieval-корпусов Zhong и более новые линии PoisonedRAG и BadRAG — все описывают, как эта вторая поверхность отказывает. Глава 6 проходит границы доверия в RAG, конкретные паттерны атак, архитектуру безопасного retrieval, к которой сошлось поле, и практики мониторинга, которые всплывают retrieval-атаки до того, как они станут инцидентами.
Дальше — Глава 6: Риски retrieval-augmented generation. Границы доверия в RAG, инъекция вредоносных документов, отравление индекса через путь эмбеддингов и мониторинг, ловящий атаки, которые санитизация упустила.