Безопасность, отказы и запасные варианты
В продакшене ваш код должен обрабатывать случай, когда Claude не станет (или не сможет) ответить ожидаемым образом. Сделанное хорошо, это незаметно для пользователей; сделанное плохо — это сбой или сбивающий с толку ответ.
- Отличить отказ модели от блокировки классификатора/безопасности — и понять, почему это важно
- Обрабатывать отказ как нормальный исход, а не падать или показывать пустой ответ
- Сократить нежелательные отказы, не пытаясь взломать те, которые обоснованы
- Выбрать запасной вариант: уточняющий вопрос, безопасная альтернатива или передача человеку
Две разные вещи
- Отказ модели — 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
- Проверьте ответ на сигнал отказа, прежде чем отрисовывать его. Никогда не пропускайте непроверенный ответ прямо в ваш UI — так пользователи получают пустое поле или сырой объект.
- Отказ модели или блокировка классификатора/безопасности? Отказ — это суждение о запросе; блокировка — это отдельный слой безопасности. Повтор идентичного ввода не помогает ни в том, ни в другом случае, но они указывают на разные исправления.
- Замените тупик уточняющим вопросом или безопасной альтернативой, голосом вашего продукта. Пользователь должен получить следующий шаг, а не ошибку.
- В конвейере направляйте случаи с низкой уверенностью или неподходящие случаи в человеческую очередь, вместо того чтобы гадать или молча их отбрасывать.
Проверьте себя
0/3- Отказ — это исход, а не ошибка — определяйте его до отрисовки, всегда.
- Отказ модели и блокировка классификатора — разные вещи; определите, что именно вы получили.
- Нежелательные отказы обычно уменьшаются, когда вы добавляете легитимный контекст и становитесь конкретнее.
- Если запрос действительно недопустим, отказ корректен — постройте изящный путь, не пытайтесь обойти защиту.
- Запасные варианты по порядку: уточняющий вопрос, безопасная альтернатива, передача человеку.