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

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

Средний

В продакшене ваш код должен обрабатывать случай, когда 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)

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

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

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

  • Уточняющий вопрос вместо тупика.
  • Безопасная альтернатива («Я могу вместо этого суммировать публичную информацию»).
  • Для конвейеров — передавайте человеку, когда уверенность/право невелики.

Далее