メインコンテンツまでスキップ

安全性、拒否 & フォールバック

中級

本番環境では、Claude が期待どおりに答えない(あるいは答えられない)ケースをコードで扱わなければなりません。うまく扱えばユーザーには見えませんが、まずく扱うとクラッシュや紛らわしい応答になります。

2 つの異なるもの

  • モデルの拒否 — 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)

望まない拒否を減らす

  • 正当なコンテキストを加える。 意図が無害でも、リクエストが何か機微なものにパターンマッチしてしまうことがあります。本当の正当な目的を明記すると役立ちます。
  • 具体的に書く。 あいまいだったり際どい言い回しは、慎重さを招きます。
  • 抗わない。 リクエストが本当に許可されないものなら、拒否が正解です。脱獄(jailbreak)を試みず、丁寧な代替経路を設計しましょう。

フォールバックのパターン

  • 行き止まりにする代わりの確認の質問
  • 安全な代替案(「代わりに公開情報を要約できます」)。
  • パイプラインでは、確信度/適格性が低いときに人間にルーティングする。

次へ