Измерение устойчивости
Оценка сопротивляемости атакам
«Измерение устойчивости» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.
Устойчивость как измеримая величина
Устойчивость — это сопротивляемость системы враждебным входным данным, выраженная числами, которые можно отслеживать, сравнивать и использовать для допуска. «Кажется, система безопасна» — не измерение; измерением является доля успешных атак с доверительным интервалом.
Этот урок превращает результаты атакующего тестирования в строгие показатели.
Доля успешных атак
Главный показатель — доля успешных атак (ASR): доля тестовых случаев атаки, которые обходят вашу защиту. Чем ниже показатель, тем лучше. Отчитывайтесь о нём в целом и отдельно по категориям и методам, чтобы понимать, где система слаба.
def asr(results):
breaks = sum(1 for r in results if not r['safe'])
return breaks / len(results)
# also compute per-category ASR for diagnosisУчитывайте критичность
Необработанный ASR одинаково оценивает незначительную утечку и утечку PII. Рассчитывайте показатель, взвешенный по критичности, чтобы критические сбои сильнее влияли на метрику, а несколько серьёзных уязвимостей не скрывались за множеством случаев с низким воздействием.
W = {'low':1,'medium':3,'high':7,'critical':15}
def weighted_risk(results):
return sum(W[r['severity']] for r in results if not r['safe'])Доверительные интервалы, а не точечные оценки
ASR — это оценка по конечной выборке, поэтому сообщайте о неопределённости. Для небольших наборов интервал широк; снижение показателя с 8% до 6% может быть шумом. Используйте биномиальный доверительный интервал и реагируйте только на изменения, выходящие за его пределы.
from statsmodels.stats.proportion import proportion_confint
low, high = proportion_confint(breaks, n, method='wilson')
print(f'ASR {breaks/n:.3f} CI [{low:.3f}, {high:.3f}]')Аналог для ложноположительных результатов
Устойчивость без удобства использования бесполезна. Сопоставляйте ASR с долей чрезмерных отказов: долей безобидных запросов, ошибочно заблокированных на отдельном чистом наборе. Усиление защиты, резко повышающее долю чрезмерных отказов, заменяет одну проблему другой.
over_refusal = sum(1 for r in benign_results if r['blocked']) / len(benign_results)
# track ASR and over_refusal together; optimize the frontierЭффективность атаки
Измеряйте не только успешность атаки, но и то, насколько она сложна. Отслеживайте число запросов или ходов до взлома: взлом с одной попытки намного хуже взлома, для которого потребовалось 20 тщательно составленных ходов. Рост усилий до взлома от выпуска к выпуску указывает на повышение устойчивости, даже если ASR остаётся неизменным.
def avg_turns_to_break(results):
succ = [r['turns_used'] for r in results if not r['safe']]
return sum(succ)/len(succ) if succ else float('inf')Калибруйте оценщика
Если оценщик на основе LLM определяет успешность, качество ваших показателей не может быть выше качества оценщика. Периодически сравнивайте решения оценщика с человеческими метками и сообщайте его точность и полноту. Слишком снисходительный оценщик занижает ASR и создаёт ложную уверенность.
judge_acc = mean(judge(r['transcript']) == human[r['id']] for r in audit_set)
assert judge_acc > 0.9, 'recalibrate judge before trusting ASR'Отчётность по срезам
Один сводный показатель скрывает риски. Разбивайте показатели по категории, методу, одноходовым и многоходовым атакам, а также прямым и косвенным атакам. Общий ASR в 3% может скрывать ASR в 40% для косвенного злоупотребления инструментами — именно этот показатель должен определять вашу дорожную карту.
Отслеживайте тенденции между выпусками
Устойчивость относительна и зависит от времени. Сохраняйте результаты каждого запуска набора с указанием версии модели и конфигурации, а также строьте графики ASR и взвешенного риска между выпусками. Цель — постоянное улучшение и отсутствие регрессий, отслеживаемые так же, как любой другой показатель целевого уровня надёжности SLO.
history.append({'version': cfg.model_version, 'asr': asr(results),
'weighted': weighted_risk(results), 'over_refusal': over_refusal})Устанавливайте критерии допуска к выпуску
Превратите показатели в политику. Пример критерия: ASR для критических случаев должен быть равен 0, общий ASR — ниже порога, регрессии за пределами доверительного интервала недопустимы, а доля чрезмерных отказов должна быть ниже установленного верхнего предела. Такой критерий делает устойчивость обязательным требованием к выпуску, а не необязательным улучшением.
def passes_gate(m, prev):
return (m['critical_asr'] == 0
and m['asr'] < 0.05
and m['asr'] <= prev['asr'] + ci_margin
and m['over_refusal'] < 0.02)Остерегайтесь переобучения на наборе
Если настраивать защиту непосредственно против доступного набора, можно успешно проходить тесты и при этом оставаться уязвимыми к неизвестным атакам. Оставляйте часть атак в закрытом наборе, меняйте случаи и продолжайте исследование с помощью атакующей модели. Идеальный результат на статичном наборе — это тревожный сигнал, а не победа.
Быстрая проверка
Ваш общий ASR составляет всего 3%, но заинтересованные стороны удивлены инцидентом злоупотребления инструментами в реальном мире. Какая методика измерения с наибольшей вероятностью позволила бы раньше выявить этот риск?
Итоги
Измерение устойчивости:
- Доля успешных атак — основной показатель; взвешивайте его по критичности.
- Сообщайте о доверительных интервалах и сопоставляйте ASR с долей чрезмерных отказов.
- Отслеживайте эффективность атак (число ходов или запросов до взлома) и калибруйте оценщика.
- Ведите отчётность по срезам, отслеживайте тенденции между выпусками и применяйте критерии допуска к выпуску.
- Оставляйте закрытые атаки, чтобы избежать переобучения на наборе.
Вы завершили изучение атакующего тестирования и враждебной оценки, а также расширенного направления PromptLab.
Часто задаваемые вопросы
Урок «Измерение устойчивости» бесплатный?
Да — полный текст урока «Измерение устойчивости» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.
Чему я научусь в уроке «Измерение устойчивости»?
Оценка сопротивляемости атакам Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Prompt Engineering?
Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Измерение устойчивости»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Prompt Engineering?
Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы красной команды для LLM
- Методы джейлбрейка
- Создание набора атак
- Измерение устойчивости