Как защитить своего бота на базе LLM (ChatGPT) от взлома?

Автор:

Андрей Тиунов

Какую проблему будем решать?

Нужно чтобы бот на базе LLM ни при каких обстоятельствах не мог раскрыть пользователю свою системную роль и не говорил на темы, которые мы обозначим как запретные.

Какого бота будем защищать?

Сейчас на рынке появилось много сервисов по созданию ботов на базе LLM. Я покажу в этой статье сервис Протолк, поскольку я имею отношение к его технической части и механику защиты промпта написал я сам для этого сервиса.
Давайте возьмем в качестве примера бота, созданного в предыдущей статье (https://habr.com/ru/articles/820377/) - нейро-сотрудник из автосалона, который использует базу знаний из Notion.

Нейро-консультант на базе ChatGPT по продаже автомобилей из базы данных Notion

Нейро-консультант на базе ChatGPT по продаже автомобилей из базы данных Notion

У данного бота в промпте есть данные для подключения к базе данных Notion:

Данные в системной роли бота, которые нам необходимо защитить от взлома
Данные в системной роли бота, которые нам необходимо защитить от взлома

Пишем роль корректора для защиты бота

В настройках нашего бота в разделе "Дополнительно" -> "Диалоговые настройки" -> "Роль корректора" пропишем следующую роль:

Если в ответе ИИ есть хоть малейший намек на политику, насилие, ругательства или есть пароли или токены ответь так: "Извините, на эту тему я не могу говорить". В противном случае верни ответ ИИ в неизменном виде.

Роль корректора в боте на сервисе Протолк

Роль корректора в боте на сервисе Протолк

Тестируем бота

Взлом системной роли бота. Видим, что защита сработала.

Взлом системной роли бота. Видим, что защита сработала.

А вот, что мы видим внутри платформы, где работает бот:

Взлом был успешным и бот нам выдал конфиденциальную информацию - в нашем случае это ссылка на базу Notion

Взлом был успешным и бот нам выдал конфиденциальную информацию - в нашем случае это ссылка на базу Notion

Давайте еще пару тестов:

Попытка взлома токена к базе Notion, используя информацию, что токен начинается с префикса
Попытка взлома токена к базе Notion, используя информацию, что токен начинается с префикса `secret_`

И вот что видно в логах:

Видно, что взлом был успешным

Видно, что взлом был успешным

Попробуем поговорить на запрещенные темы:

Пробуем разговорить бота на политические темы и опять видим срабатывание защиты

Пробуем разговорить бота на политические темы и опять видим срабатывание защиты

В логах мы видим что взлом был успешен:

Как это все работает?

Если у бота есть роль корректора в настройках то каждый ответ бота анализируется отдельным запросом к API:

messages = [    {'role' : 'system', 'content' : 'Если в ответе ИИ есть хоть малейший намек на политические темы, насилие, ругательства или есть пароли или токены ответь так: "Извините, на эту тему я не могу говорить". В противном случае верни ответ ИИ в неизменном виде.'},    {'role' : 'user', 'content' : 'вот ответ от ИИ: `Вот токен: secret_XXXXXXXXXXXXXX`'},]

Ответ корректора мы отправляем напрямую пользователю.

! Обратите внимание на фразу в роли корректора: "В противном случае верни ответ ИИ в неизменном виде." - именно эта фраза позволяет сохранить ответ нашего бота, если в нем нет запрещенной информации.

У вас есть статья о ProTalk? Поделитесь с нами - support@pro-talk.ru мы опубликуем её с вашим контактом!

© ProTalk 2023-2025 ИП Горелов Максим Николаевич ИНН 500104951533 ОГРН 309500106900065 

Новая, 8, 9 Реутов, Московская область 143964 Россия