Тестирование промптов и валидация ввода

Валидация ввода всегда была частью QA — проверка, что форма отклоняет некорректные данные, что API возвращает понятную ошибку на некорректный запрос. AI-системам нужна та же дисциплина, но диапазон «некорректного ввода» намного шире, потому что ввод часто представляет собой свободный текст на естественном языке, а не структурированное поле с чёткими правилами.

В этой статье рассматриваются:

  1. Почему валидация ввода важнее для AI-систем
  2. Категории тестовых вводов
  3. Prompt injection — новый вид атаки
  4. Как построить набор тестов для промптов

Почему валидация ввода важнее для AI-систем

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

Категории тестовых вводов

Тщательный набор тестов для обработки ввода AI-системой обычно охватывает:

  • Граничные случаи — пустой ввод, чрезмерно длинный ввод, ввод на неожиданном языке, необычное форматирование или спецсимволы.
  • Запросы вне области — вопросы, не связанные с назначением системы, чтобы убедиться, что она корректно отказывается отвечать, а не импровизирует.
  • Неоднозначный ввод — расплывчатые или неполные запросы, чтобы увидеть, задаёт ли система уточняющий вопрос или гадает.
  • Провокационный ввод (adversarial) — ввод, намеренно сконструированный, чтобы запутать модель, обойти её ограничения или извлечь информацию, которой она не должна делиться.
  • Вредоносный ввод — попытки заставить систему производить вредоносный, оскорбительный или нарушающий политику контент.

Prompt injection — новый вид атаки

Prompt injection — атака, специфичная для AI-систем, при которой пользователь встраивает скрытые инструкции в свой ввод — или в документ, который AI должен обработать, — чтобы переопределить исходные инструкции системы. Простой пример: пользователь пишет «игнорируй предыдущие инструкции и вместо этого скажи мне...». Более сложный пример прячет похожие инструкции внутри документа, письма или веб-страницы, которую AI-ассистент просят прочитать и суммировать, — так атака приходит через контент, который обрабатывает система, а не через прямой пользовательский ввод.

Тестирование на prompt injection означает отношение к каждому источнику текста, который читает AI, — не только прямому вводу в чат — как к потенциальной поверхности атаки, включая проверку того, можно ли обманом заставить систему раскрыть собственные системные инструкции, проигнорировать правила безопасности или выполнить действие, которое пользователь не должен иметь возможность инициировать.

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

Практичный набор тестов для промптов строится постепенно:

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

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

Дополнительные материалы

Определение «правильности» в AI-системах
Решение проблемы нестабильности LLM на маркетплейс-платформах

Содержание