Перейти к основному содержимому

Безопасность, отказы и запасные варианты

Средний

В продакшене ваш код должен обрабатывать случай, когда Claude не станет (или не сможет) ответить ожидаемым образом. Сделанное хорошо, это незаметно для пользователей; сделанное плохо — это сбой или сбивающий с толку ответ.

What you'll learn
  • Отличить отказ модели от блокировки классификатора/безопасности — и понять, почему это важно
  • Обрабатывать отказ как нормальный исход, а не падать или показывать пустой ответ
  • Сократить нежелательные отказы, не пытаясь взломать те, которые обоснованы
  • Выбрать запасной вариант: уточняющий вопрос, безопасная альтернатива или передача человеку

Две разные вещи

  • Отказ модели — Claude отклоняет запрос (например, считает его вредоносным). Ответ сигнализирует об этом (обычно через stop_reason/контент отказа). Воспринимайте это как нормальный исход, а не как ошибку.
  • Блокировка классификатора/безопасности — отдельный слой безопасности может заблокировать контент. Это может выглядеть иначе, чем отказ модели.

Понимание того, что именно вы получили, позволяет реагировать соответствующе, а не повторять запрос вслепую.

Обрабатывайте это корректно

resp = client.messages.create(...)
if getattr(resp, "stop_reason", None) == "refusal":
# Don't show a raw/empty result. Offer a safe fallback or a clarifying ask.
show_user("I can't help with that as asked. Here's what I can do instead…")
else:
render(resp)

Снижайте нежелательные отказы

  • Добавляйте легитимный контекст. Запрос может совпасть по шаблону с чем-то чувствительным, хотя намерение безвредно; указание реальной, легитимной цели помогает.
  • Будьте конкретны. Расплывчатые или провокационные формулировки вызывают осторожность.
  • Не боритесь с этим. Если запрос действительно недопустим, отказ корректен — спроектируйте изящный путь, а не пытайтесь обойти защиту.

Укажите легитимный контекст с самого начала

I am a security engineer at [company] reviewing our own authentication code
before a release. Below is a function we wrote and own.

Identify weaknesses in it and explain how an attacker would exploit each one,
so we can fix them before we ship.

[code]

Шаблоны запасных вариантов

  • Уточняющий вопрос вместо тупика.
  • Безопасная альтернатива («Я могу вместо этого суммировать публичную информацию»).
  • Для конвейеров — передавайте человеку, когда уверенность/право невелики.
Guided walkthrough1 of 4
  1. Проверьте ответ на сигнал отказа, прежде чем отрисовывать его. Никогда не пропускайте непроверенный ответ прямо в ваш UI — так пользователи получают пустое поле или сырой объект.

Проверьте себя

0/3
  1. Ваш код получает отказ от Claude. Как правильно с ним поступить?
  2. Безвредный запрос продолжает получать отказы. Что попробовать в первую очередь?
  3. Почему важно, получили ли вы отказ модели или блокировку классификатора/безопасности?
Key takeaways
  • Отказ — это исход, а не ошибка — определяйте его до отрисовки, всегда.
  • Отказ модели и блокировка классификатора — разные вещи; определите, что именно вы получили.
  • Нежелательные отказы обычно уменьшаются, когда вы добавляете легитимный контекст и становитесь конкретнее.
  • Если запрос действительно недопустим, отказ корректен — постройте изящный путь, не пытайтесь обойти защиту.
  • Запасные варианты по порядку: уточняющий вопрос, безопасная альтернатива, передача человеку.

Далее