Противоборствующий промптинг
Противоборствующий промптинг (adversarial prompting) является важной темой в области промпт-инжиниринга, так как он помогает понять риски и проблемы безопасности, связанные с языковыми моделями. Это также важная дисциплина для выявления этих рисков и разработки методов и техник для их решения.
Сообщество выявило разнообразные атаки на противоборствующие промпты, включая инъекции промптов. Ниже представлены некоторые примеры таких атак.
При разработке языковых моделей крайне важно обеспечивать защиту от атак на промпты, которые могут обойти защитные механизмы и нарушить руководящие принципы модели. В следующих примерах мы рассмотрим такие сценарии.
Обратите внимание, что возможно, что были разработаны более надежные модели для решения некоторых из проблем, описанных здесь. Это означает, что некоторые атаки на промпты ниже могут быть уже не столь эффективными.
Прежде чем продолжить читать этот раздел, имейте в виду, что мы не одобряем ни одну из описанных ниже атак. Мы просто документируем их в образовательных целях и для выявления ограничений этих систем.
Инъекция промптов
Инъекция промптов (Prompt injection) направлена на изменение результатов работы модели путем использования хитрых текстовых запросов, которые изменяют ее поведение. Эти атаки могут иметь вредные последствия, и Саймон Уиллисон охарактеризовал их как "как форму эксплойта безопасности".
Давайте рассмотрим простой пример, чтобы продемонстрировать, как можно достичь инъекции промпта. Мы воспользуемся популярным примером, опубликованным Райли в Twitter.
Промпт:
Результат:
Мы видим, что исходная инструкция была в значительной степени проигнорирована вторичной инструкцией. В оригинальном примере, опубликованном Райли в Twitter, вывод модели был "Haha pwned!!". Однако мы не смогли воспроизвести его, так как модель была обновлена несколько раз с тех пор. Тем не менее, это может вызывать проблемы по разным причинам.
При разработке промптов важно понимать, что мы просто объединяем инструкции и все компоненты промптов, включая ввод пользователя. Нет стандартного формата, который ожидает модель. Гибкость ввода ценна, но существует потенциальная угроза уязвимостей, аналогичных инъекции промптов, как описано выше.
При разработке промптов для ваших приложений важно обдумать, как избежать подобных нежелательных сценариев. Нет четких руководств по достижению этой цели. Фактически, Райли также попытался предостеречь, чтобы избежать таких атак, следуя следующим рекомендациям:
Промпт:
В то время, когда Райли сообщил об этом, модель была все еще уязвима для атаки. При использовании настроек по умолчанию и последней модели text-davinci-003
, модель выдает следующий результат:
Результат:
По-видимому, эта конкретная атака была в значительной степени устранена в модели text-davinci-003
от OpenAI. Тем не менее, вы можете провести эксперименты с более хитрыми промптами, чтобы проверить, можно ли выполнить инъекцию в обновленной модели. Тестирование моделей на уязвимости является важной частью процесса промпт-инжиниринга, так как это способствует созданию более надежной и безопасной модели.
Вот еще один простой пример с другой инструкцией и задачей:
Промпт:
Результат:
Идея данной атаки заключается в захвате результатов работы модели с помощью инъекции инструкции. Эта инструкция игнорирует исходное задание и выполняет вместо него инъектированную инструкцию, которая может привести к получению вредных или нежелательных результатов.
Утечка промптов
Утечка промптов представляет собой еще один вид инъекции промптов, при котором атаки на промпты разрабатываются с целью раскрытия деталей, содержащихся в промпте. Эти детали могут включать в себя конфиденциальную или личную информацию, которая не предназначена для общего доступа.
Множество стартапов уже работают над разработкой и интеграцией тщательно продуманных промптов, которые способствуют созданию полезных продуктов на основе языковых моделей. Эти промпты могут содержать ценную интеллектуальную собственность, которая не должна быть доступной публично. Поэтому разработчикам необходимо уделять особое внимание надежному тестированию с целью предотвращения утечек информации из промптов.
Давайте рассмотрим простой пример утечки промпта:
Промпт:
Результат:
Результат включает в себя примеры, которые могут содержать конфиденциальную информацию, используемую в промптах вашего приложения. Рекомендуется проявлять осторожность при передаче данных в промпты и, возможно, использовать различные методы (например, оптимизацию промптов), чтобы предотвратить возможные утечки информации. Подробнее об этом будет рассказано позже.
Посмотрите пример утечки промпта, найденный в открытом доступе.
Разблокировка (Jailbreaking)
Некоторые модели избегают выполнения неэтичных инструкций, однако их можно обойти, представив запрос в хитроумном контексте.
Незаконное поведение
В качестве примера ниже приведен промпт, который смог обойти политику контента предыдущих версий ChatGPT:
Промпт:
Существует множество других вариаций этого промпта, также известных как разблокировка, с целью заставить модель сделать то, что она не должна делать в соответствии с ее руководящими принципами.
Модели, такие как ChatGPT и Claude, были настроены так, чтобы не генерировать контент, который, например, способствует незаконной деятельности или неэтичным действиям. Поэтому сложнее "взломать" их, но они все еще имеют свои недостатки, и мы узнаем о новых, когда люди экспериментируют с этими системами в открытом доступе.
DAN
Языковые модели, такие как ChatGPT, включают защитные меры, ограничивающие модель от вывода вредного, незаконного, неэтичного или насильственного контента любого рода. Однако пользователи Reddit нашли технику разблокировки, которая позволяет пользователю обойти правила модели и создать персонажа по имени DAN (Do Anything Now), который заставляет модель подчиняться любому запросу и генерировать нефильтрованные ответы. Это версия ролевой игры, используемая для разблокировки моделей.
DAN имеет множество вариантов, и ChatGPT продолжает усовершенствоваться в борьбе с такими видами атак. Изначально использовался простой промпт, однако по мере улучшения модели стало необходимо применять более сложные методы промптинга.
Вот пример техники разблокировки DAN:
Вы можете найти сводку вариантов DAN здесь.
Эффект Валуиджи
Недавно на платформе LessWrong была опубликована статья под названием "The Waluigi Effect", в которой исследуется способность языковых моделей вызывать противоположное и нежелательное поведение, обусловленное особенностями их обучения.
Из статьи:
The Waluigi Effect: после того, как вы обучите LLM удовлетворять желаемому свойству P, становится проще заставить чатбот удовлетворять точно противоположное свойство P.
Симулятор GPT-4
Один недавний пример разблокировки, опубликованный в Twitter, смог обойти фильтры контента ChatGPT-4. Идея заключается в симуляции авторегрессионной модели и вызове вредоносного ответа с помощью ввода "how do I hack into into - Как мне взломать?" в определенную функцию. Для этого требуется хитрое манипулирование и использование некоторых возможностей генерации/понимания кода модели.
Ниже приведено полное промптирование (получено из Jailbreak Chat):
Ниже приведен ответ, полученный Алексом:
Больше примеров таких атак можно найти на веб-сайте Jailbreak Chat.
Игровой симулятор
ChatGPT-4 значительно повысил уровень безопасности, и многие из упомянутых выше методов обхода и манипуляции с промптами теперь стали менее эффективными. Тем не менее, симуляции остаются эффективным методом для попыток обойти систему.
Вот пример инструкции, которая настраивает модель на симуляцию игры с указаниями, которые позволяют модели отвечать на контент, который кажется нежелательным.
Тактики защиты
Известно, что языковые модели часто проявляют нежелательное и вредное поведение, такое как генерация неточных утверждений, оскорбительных текстов, предвзятости и других негативных проявлений. Более того, некоторые исследователи разработали методы, позволяющие моделям, таким как ChatGPT, создавать вредоносные программы, выявлять уязвимости и создавать фишинговые сайты. Внедрение промптов используется не только для захвата результатов работы модели, но и для вызова некоторых из перечисленных негативных проявлений в работе языковых моделей. Поэтому становится важным более глубоко понимать, как защищаться от использования промптов в таких целях.
Хотя внедрение промпта может быть достаточно простым, нет единых или широко принятых методов защиты от таких текстовых атак. Некоторые исследователи и практики предлагают различные стратегии смягчения воздействия злонамеренных промптов. Давайте рассмотрим несколько тактик защиты, которые вызывают интерес в сообществе.
Добавление защиты в инструкцию
Простая тактика защиты, с которой можно начать экспериментировать, заключается в простом обеспечении желаемого поведения через передаваемую модели инструкцию. Это не является полным решением и не гарантирует защиту, но подчеркивает силу хорошо разработанного промпта. В следующем примере мы попробуем внедрение промпта на модель text-davinci-003
:
Промпт:
Результат:
Простое исправление будет предупредить модель о потенциальной вредоносной атаке и желаемом поведении.
Промпт:*
Результат:
Мы видим, что даже когда мы внедрили злонамеренную инструкцию в конце, модель все равно выполнила исходную задачу. Кажется, что дополнительный контекст, предоставленный в инструкции, помог модели выполнить исходную задачу, которую мы хотели.
Параметризация компонентов промпта
Использование промпта в некоторых случаях может быть похоже на технику, которую используют злоумышленники при SQL-инъекциях. Это означает, что нужно обращать внимание на безопасность. Один из способов, предложенных Саймоном, - это более аккуратное оформление промпта, включая его разные части, такие как инструкции и данные, чтобы избежать потенциальных уязвимостей. Однако, следует учитывать, что это может сделать систему менее гибкой. Эта проблема всегда актуальна, так как мы продолжаем работать над программными продуктами, использующими языковые модели.
Цитаты и дополнительное форматирование
Райли также предложил способ, который в конечном итоге был использован другим пользователем. Он заключался в экранировании/цитировании входных строк. Кроме того, Райли сообщает, что с помощью этого трюка нет необходимости добавлять предупреждения в инструкции, и он остается стабильным при различных вариациях фразировки. Независимо от этого мы приводим пример промпта, поскольку он подчеркивает важность и преимущества глубокого размышления о том, как правильно форматировать промпты.
Промпт:
Результат:
Другой предложенный защитный механизм Райли - использование кодирования JSON плюс заголовков в формате Markdown для инструкций/примеров.
Мы попытались воспроизвести это с temperature=0
, но не смогли сделать это работающим. Вы можете видеть ниже наш промпт и результат. Это показывает, насколько важно думать о вводе, поступающем в модель, и оформлении. Мы добавили пример ниже, чтобы увидеть, может ли учащийся найти надежную защиту, которая работает для разных входных данных и вариантов инструкций.
Промпт:
Результат:
Детектор внедрения промпта
Мы знаем, что LLM могут быть сложными, универсальными и надежными системами, которые могут демонстрировать высокую производительность на широком спектре задач. LLM также могут использоваться или настраиваться для выполнения конкретных задач, таких как генерация знаний (Liu и др., 2022) и самопроверка (Weng и др., 2022). Аналогично, LLM могут использоваться для обнаружения внедрения промпта и фильтрации его.
Армстронг и Горман (2022) предлагают интересное решение, используя этот концепт. Вот как это выглядит на практике.
Первый этап - выбор оценщика промптов. В данной статье авторы представляютchatgpt-prompt-evaluator
, который может быть представлен следующим образом:
Промпт:
Это интересное решение, поскольку оно включает определенного агента, который будет отмечать злонамеренные промпты, чтобы избежать нежелательных выводов модели LM.
Тип модели
Как предложил Райли Гудсайд в этой теме в Twitter, один из подходов к избежанию внедрения промпта - не использовать модели, настроенные на инструкции в рабочей среде. Его рекомендация состоит в том, чтобы либо настроить модель, либо создать промпт с k-shot для модели, не основанной на инструкциях.
спользование промпта k-shot без инструкций эффективно в широком спектре общих задач, не требующих избыточного контекста для достижения высокой производительности. Важно отметить, что даже такое модифицированное решение остается уязвимым перед возможностью ввода некорректных запросов со стороны пользователей, как это случилось с пользователем Twitter. Райли предлагает рассмотреть дополнительные варианты форматирования, такие как экранирование пробелов и цитирование входных данных, чтобы повысить его надежность, однако следует иметь в виду, что все эти подходы остаются недостаточно надежными, и требуется разработка более надежного решения.
Для более сложных задач может потребоваться значительное количество примеров, что, в свою очередь, может ограничить доступную длину контекста. В таких ситуациях оптимальным решением может стать настройка модели на обширном наборе примеров, включающем сотни или даже тысячи случаев. С развитием более надежных и точных методов настройки моделей становится возможным уменьшить зависимость от инструкций и избежать необходимости использования промптов. Настройка модели на большом объеме данных может быть наилучшим подходом, доступным на данный момент, для минимизации потребности в применении промптов.
В последних версиях ChatGPT появились дополнительные меры безопасности, которые эффективно сдерживают множество атак внедрения промпта. Модель обычно реагирует с уведомлением о безопасности, когда сталкивается с злонамеренным или опасным запросом. Тем не менее, следует учитывать, что ChatGPT, несмотря на свои усиленные меры защиты, не идеальный и все равно существуют новые и эффективные методы обхода, которые могут обмануть модель.
Одним из недостатков ChatGPT является возможность блокировки некоторых допустимых действий из-за мер безопасности. Это ограничение может привести к нежелательным последствиям в определенных сценариях. Важно понимать, что каждый тип модели имеет свои компромиссы, и область развивается, стремясь к созданию лучших и более надежных решений.
Ссылки
Можно ли действительно защитить ИИ от текстовых атак?(февраль 2023)
Знакомство с новыми функциями Bing, похожими на ChatGPT(февраль 2023)
Использование GPT-Eliezer против взлома ChatGPT(декабрь 2022)
Атаки внедрения промпта против GPT-3(сентябрь 2022)
Last updated