← Документация WAF / detections / ai-security-for-apps
Обнаружение небезопасных и пользовательских тем
AI Security for Apps умеет определять, когда промпт LLM затрагивает небезопасные или нежелательные темы. Здесь используются два уровня обнаружения тем:
- Небезопасные темы по умолчанию: Встроенный набор категорий безопасности, которые обнаруживают вредоносный контент, например преступления с применением насилия, разжигание ненависти и контент сексуального характера.
- Пользовательские темы: Темы, которые вы определяете в соответствии со специфическими политиками вашей организации, например "competitors" или "financial-advice".
Небезопасные темы по умолчанию
Когда AI Security for Apps включена, она автоматически проверяет промпты на соответствие набору стандартных категорий небезопасных тем и заполняет два поля:
- LLM Unsafe topic detected (
cf.llm.prompt.unsafe_topic_detected):trueесли была обнаружена какая-либо небезопасная тема. - LLM Unsafe topic categories (
cf.llm.prompt.unsafe_topic_categories): массив конкретных обнаруженных категорий.
Категории небезопасных тем по умолчанию
| Категория | Описание |
|---|---|
S1 |
Насильственные преступления |
S2 |
Ненасильственные преступления |
S3 |
Преступления сексуального характера |
S4 |
Сексуальная эксплуатация детей |
S5 |
Клевета |
S6 |
Специализированные рекомендации |
S7 |
Конфиденциальность |
S8 |
Интеллектуальная собственность |
S9 |
Оружие неизбирательного действия |
S10 |
Ненависть |
S11 |
Суицид и самоповреждение |
S12 |
Сексуальный контент |
S13 |
Elections |
S14 |
Злоупотребление интерпретатором кода |
Пользовательские темы
Обнаружение пользовательских тем позволяет задать собственные темы, по которым AI Security for Apps будет оценивать каждый промпт. Эти показатели затем можно использовать в пользовательские правила или правила ограничения частоты запросов чтобы блокировать запросы, запрашивать их проверку или журналировать их на основании заданной вами оценки релевантности.
Эта возможность использует модель zero-shot классификации который оценивает промпты во время выполнения. Обучение модели не требуется.
Как работают пользовательские темы
- Вы определяете список из не более чем 20 пользовательских тем. Каждая тема состоит из:
- Метка: Короткий идентификатор через дефис, который используется в выражениях правил и аналитике (например,
financial-advice). - описание темы: Описательный текст, который модель использует для классификации промптов (например,
seeking financial advice).
- Метка: Короткий идентификатор через дефис, который используется в выражениях правил и аналитике (например,
- Когда запрос поступает на
cf-llmконечной точки с этой меткой, модель сравнивает промпт со всеми заданными описаниями тем и возвращает оценку релевантности для каждой из них. - Оценки записываются в
cf.llm.prompt.custom_topic_categoriesполе map с ключами по меткам. В выражениях правил и аналитике используются именно метки, а не описания тем.
Определение пользовательских тем
Пользовательскими темами можно управлять из двух мест в дашборде:
- страница Security Settings: Перейдите в Безопасность > Настройки и найдите Безопасность ИИ для приложений раздел. В Пользовательские темы, выберите Управление темами чтобы добавлять, изменять или удалять темы.
- Боковая панель Expression Builder: При создании или редактировании пользовательское правило, выберите LLM Custom topic поле. Затем выберите Управление пользовательскими темами чтобы открыть боковую панель, где можно управлять темами, не покидая страницу создания правила.
Оба метода обновляют один и тот же базовый список тем. Изменения, внесённые в одном из них, сразу отражаются в другом.
-
В панели управления Cloudflare перейдите в раздел Security Настройки страницу.
Перейдите в Настройки ↗Либо перейдите в страница создания пользовательских правил, выберите LLM Custom topic поле и выберите Управление пользовательскими темами чтобы открыть боковую панель.
-
Добавьте тему, указав:
- Метка: Короткий идентификатор через дефис (например,
competitors). - Описание темы: Описательная фраза на английском языке, которую модель использует для классификации (например,
seeking info on competitors).
- Метка: Короткий идентификатор через дефис (например,
-
Выберите Save.
Обновите список пользовательских тем с помощью PUT запрос:
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/ai-security/custom-topics" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"topics": [
{
"label": "competitors",
"topic": "seeking info on competitors"
},
{
"label": "financial-advice",
"topic": "seeking financial advice"
},
{
"label": "hr-internal",
"topic": "asking about internal HR policies"
}
]
}'Чтобы получить свои текущие темы, используйте GET запрос:
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/ai-security/custom-topics" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Ограничения
| Параметр | Лимит |
|---|---|
| Максимальное количество тем | 20 |
| Длина строки темы | от 2 до 50 печатных символов ASCII |
| Длина метки | от 2 до 20 символов |
| Формат метки | Строчные буквы, цифры и дефисы (-) только |
Рекомендации по определению пользовательских тем
Качество обнаружения пользовательских тем зависит от того, как вы формулируете их описания. Используемая модель представляет собой zero-shot-классификатор, который сравнивает смысловое значение промпта с описанием вашей темы.
Важнее всего описать намерение пользователя, а не просто тему.
Действуйте с чётким намерением
Модель выполняет семантическую классификацию, а не сопоставление по ключевым словам. Описания тем, которые отражают, что пользователь пытаетесь сделать значительно точнее, чем описания, которые просто называют тематическую область. Короткая глагольная фраза (от 3 до 6 слов) обычно даёт наилучший баланс между точностью и охватом.
Сравните, как одни и те же два описания тем работают с двумя промптами, которые упоминают финансы, но преследуют совершенно разные намерения:
| описание темы | Промпт: «Стоит ли вкладывать свои сбережения в индексные фонды?» | Промпт: «Наш финансовый отдел только что завершил отчёт за Q3.» |
|---|---|---|
financial advice (только существительное) |
Совпадения | Также совпадает. Слово "finance" присутствует, даже если совет не запрашивается |
seeking financial advice (фраза намерения) |
Совпадения | Корректно проигнорировано. Упоминает финансы, но не содержит намерения запросить совет |
Пример: competitors
| Качество | описание темы | Почему |
|---|---|---|
| Лучший вариант | seeking info on competitors |
Отражает намерение. Срабатывает только тогда, когда пользователи активно спрашивают о конкурентах |
| Хорошо | Acme Corp, Banana Co, Candy & Sons |
Работает для известных названий, но пропускает неназванных конкурентов и захватывает случайные упоминания |
| Избегайте | other companies |
Слишком расплывчатая. Соответствует практически любому промпту, в котором упоминается компания |
Пример: financial-advice
| Качество | описание темы | Почему |
|---|---|---|
| Лучший вариант | seeking financial advice |
Учитывает намерение. Срабатывает на запросы пользователей с просьбой о помощи, игнорирует случайные упоминания финансов |
| Хорошо | securities and investments |
Разумная область охвата темы, но срабатывает на новостных статьях и упоминаниях фактов, а не только при запросах советов |
| Избегайте | finance |
Слишком широкая. Соответствует практически всему: от отчётов о расходах до вопросов о ценах |
Другие рекомендации
- Будьте точны. Слишком широкие темы приводят к ложным срабатываниям, слишком узкие темы приводят к пропускам обнаружения.
- Избегайте смыслового пересечения. Если две темы означают почти одно и то же (например,
seeking financial adviceиasking for investment guidance), они будут получать схожие показатели на одних и тех же промптах и впустую расходовать ваш бюджет из 20 тем. - Тестируйте и дорабатывайте. Отправляйте тестовые запросы и просматривайте показатели в Security Analytics. Настроить это можно, изменив описание темы (сделав его более или менее конкретным) или пороговое значение оценки в вашем правиле (
lt 20является строгим,lt 50является разрешающим). - Не указывайте несколько значений в одном описании темы. Модель проверяет только первый элемент списка, разделенного запятыми. Например,
Toyota, Ford, Audi, BMWбудет соответствовать только промптам оToyota, остальные элементы игнорируются. Удаление запятых не улучшает результат. Используйте одну фразу, отражающую конкретное намерение, напримерseeking info on competitors, или создайте отдельные темы для каждого значения.
Пример пользовательских тем
| Метка | описание темы |
|---|---|
competitors |
seeking info on competitors |
financial-advice |
seeking financial advice |
legal-advice |
asking for legal or regulatory advice |
sensitive-data |
requesting passwords or API keys |
job-seeking |
asking about job openings or careers |
bias |
comparing demographic groups as better or worse |