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

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

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

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

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

Сейчас на рынке появилось много сервисов по созданию ботов на базе LLM. Я покажу в этой статье сервис Протолк, поскольку я имею отношение к его технической части и механику защиты промпта написал я сам для этого сервиса.

Давайте возьмем в качестве примера бота, созданного в предыдущей статье (https://habr.com/ru/articles/820377/) - нейро-сотрудник из автосалона, который использует базу знаний из Notion.

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

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

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

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

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

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

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

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

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

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

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

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

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

Попробуем поговорить на запрещенные темы:
Попробуем поговорить на запрещенные темы:
В логах мы видим что взлом был успешен:
В логах мы видим что взлом был успешен:
Как защитить своего бота на базе LLM (ChatGPT) от взлома?

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

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

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

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

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

Итог

Если у вас есть примеры других сервисов где будет реализована подобная механика, напишите про них в комментариях пожалуйста или мне в Telegram.

Начать дискуссию