Guardrails (ограничители) — общее название для всего, что не даёт модели выдать нежелательный ответ или совершить нежелательное действие. Термин объединяет очень разные механизмы, и путаница между ними приводит к неверной оценке рисков.
Разложим их по уровням — от самого мягкого к единственному настоящему.
#Четыре уровня
Уровень 1. Внутри модели. Поведение, заложенное обучением: отказ от части тем, осторожные формулировки. Живёт в весах, работает всегда, обходится подбором формулировок. Как это туда попадает — в справке про RLHF.
Уровень 2. В промпте. Инструкции в системном сообщении: что можно и как отвечать при сомнении. Настраивается вами, но границей не является: инструкция — текст в том же потоке, что и всё остальное.
Уровень 3. Внешний фильтр. Отдельный классификатор, проверяющий вход и выход основной модели. Это не часть языковой модели, а самостоятельная программа рядом. У облачных сервисов именно она отвечает за жёсткие блокировки — хитрый промпт до неё не дотягивается, обходить пришлось бы сам фильтр.
Уровень 4. Ограничение возможностей. Не «что модель говорит», а «что она может сделать»: список разрешённых инструментов, каталогов, доменов, подтверждение человеком перед необратимым действием. Единственный уровень, который является защитой в инженерном смысле: он не зависит от того, что модель сгенерировала.
| Уровень | Где живёт | Обходится | Является защитой |
|---|---|---|---|
| Обучение | в весах | подбором формулировок | ✗ |
| Системный промпт | в контексте | инструкцией из данных | ✗ |
| Внешний фильтр | рядом с моделью | обходом фильтра, не модели | частично |
| Ограничение прав | в коде приложения | только ошибкой в коде | ✓ |
#Что это меняет для локального запуска
При работе с локальной моделью уровней 1 и 2 у вас ровно столько, сколько их в скачанных весах и в вашем промпте. Уровня 3 обычно нет вовсе, если вы не поставили его сами. То есть на локальной модели ограничители не защищают вас от модели — они разве что задают ей стиль.
Что действительно требуется, так это уровень 4, и требуется тем сильнее, чем больше у ассистента прав. Список разрешённых действий для агента разобран в тексте про агента и безопасность через allowlist, а самый острый частный случай — в разборе того, почему агенту нельзя давать shell.
#Где путают
Заблуждение первое: отказ модели — это защита. Отказ — это поведение, а не механизм. Он основан на статистике обучения, поэтому даёт и ложные срабатывания на безобидных запросах, и пропуски на вредных. Типовые способы его обойти разобраны в справке про джейлбрейк промпта.
Заблуждение второе: достаточно написать правила в системном промпте. Инструкция в промпте конкурирует со всем остальным текстом в контексте, включая текст, пришедший из внешних источников. Именно на этом устроена промпт-инъекция.
Заблуждение третье: ограничители снижают риск утечки данных. Не снижают. Утечка происходит не через «плохой ответ», а через то, что данные попали в контекст и ушли туда, куда уходит запрос. Единственная работающая мера — не класть в контекст то, что не должно уйти.
Заблуждение четвёртое: чем строже ограничители, тем безопаснее продукт. Избыточная строгость даёт отказы на рабочих задачах, и люди переносят работу туда, где ограничений нет. Картина от этого ухудшается.
#Частые вопросы
#Можно ли снять ограничители с локальной модели?
Частично — да: системный промпт вы пишете сами, а на рынке есть версии моделей с ослабленным выравниванием. Знаний у них не больше, а склонность выдумывать нередко выше.
#Нужны ли ограничители личному ассистенту?
Нужны четвёртого уровня: перечень инструментов, доступ к файлам, подтверждение необратимых действий. Фильтры содержимого в личном сценарии обычно мешают.
#Как проверить, что ограничения работают?
Не разговором с моделью, а проверкой прав: попробуйте выполнить запрещённое действие напрямую через интерфейс инструмента. Если оно проходит, отказ модели ничего не значит.
#Кто отвечает за ответ модели — фильтр или обучение?
Обычно оба, в разной пропорции у разных сервисов. Вывод один: поведение модели через API и той же модели локально может заметно отличаться — вокруг облачной стоит слой, которого вы не видите.
Остальные термины — в глоссарии терминов ИИ.