安全性、拒否とフォールバック
本番環境では、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)
望まない拒否を減らす
- 正当なコンテキストを加える。 意図が善意でも、リクエストが機微なものにパターンマッチすることがあります。実際の正当な目的を述べることが役立ちます。
- 具体的に。 曖昧または尖った言い回しは慎重さを招きます。
- 戦わない。 リクエストが本当に禁止されているなら、拒否は正しい — 優雅な道筋を設計してください。ジェイルブレイクしようとしないこと。
最初に正当なコンテキストを加える
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- 拒否はエラーではなく結果 — レンダリング前に必ず検出する。
- モデルの拒否と分類器のブロックは別物;どちらを受け取ったか識別する。
- 望まない拒否は通常、正当なコンテキストを加えて具体的にすると減る。
- リクエストが本当に禁止なら、拒否は正しい — 優雅な道筋を作り、ジェイルブレイクしないこと。
- フォールバックの順序:明確化の質問、安全な代替案、人間へのエスカレーション。