Claude 4モデル以降、ClaudeのAPIからのストリーミングレスポンスは、ストリーミング分類器が潜在的なポリシー違反を処理するために介入した場合に stop_reason: "refusal" を返します。この安全機能は、リアルタイムストリーミング中のコンテンツコンプライアンスの維持に役立ちます。
このページでは、ストリーミングレスポンスにおける拒否の表示方法について説明します。すべてのstop_reason値とその処理方法については、stop reasonとフォールバックを参照してください。拒否されたリクエストを別のClaudeモデルで再試行するには、拒否とフォールバックを参照してください。
ストリーミング分類器がAnthropicのポリシーに違反するコンテンツを検出すると、APIは次のレスポンスを返します。
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}追加の拒否メッセージは含まれません。レスポンスを処理し、適切なユーザー向けメッセージを提供する必要があります。
stop_reason: refusal を受け取った場合、続行する前に会話のコンテキストをリセットする必要があります。拒否をトリガーしたターンを削除または言い換えるか、会話履歴を完全にクリアすることができます。リセットせずに続行しようとすると、拒否が継続されます。
レスポンスが拒否された場合でも、使用量メトリクスはレスポンスに含まれます。
Claudeが出力を生成する前に拒否が到着した場合、Claude APIではそのリクエストに対して課金されず、そのレスポンス内の使用量カウントは情報提供のみを目的としています。Claudeが拒否の前に出力を生成した場合、そのリクエストに対して課金されます。
コンテキストのリセットだけが回復方法ではありません。拒否されたリクエストを別のClaudeモデルで再試行することもできます。拒否とフォールバックのページでは、サーバーサイドフォールバック、SDKミドルウェア、または手動での再試行を使用してこれを設定する方法を説明しています。
アプリケーションでストリーミングの拒否を検出して処理する方法は次のとおりです。
client = anthropic.Anthropic()
messages = []
def reset_conversation():
"""Reset conversation context after refusal"""
global messages
messages = []
print("Conversation reset due to refusal")
try:
with client.messages.stream(
max_tokens=1024,
messages=messages + [{"role": "user", "content": "Hello"}],
model="claude-opus-4-8",
) as stream:
for event in stream:
# メッセージデルタ内の拒否を確認
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")APIは現在、3つの異なる方法で拒否を処理します。
| 拒否タイプ | レスポンス形式 | 発生タイミング |
|---|---|---|
| ストリーミング分類器による拒否 | stop_reason: refusal | ストリーミング中にコンテンツがポリシーに違反した場合 |
| API入力および著作権の検証 | 400エラーコード | 入力が検証チェックに失敗した場合 |
| モデル生成による拒否 | 標準テキストレスポンス | モデル自体が拒否を判断した場合 |
将来のAPIバージョンでは、すべてのタイプで拒否処理を統一するために stop_reason: refusal パターンが拡張される予定です。
stop_reason: refusal のチェックを含めますこの機能が最初にリリースされたときに拒否処理を構築した場合、または既存の統合に追加する場合は、以下を確認してください。
stop_reason: "refusal"を含む成功したHTTP 200レスポンスとして到着するため、エラー率のみに基づいて構築された監視では検出されません。拒否を独自のシグナルとして追跡してください。stop_detailsオブジェクトも含まれます。完全なレスポンス形式については、拒否とフォールバックを参照してください。stop_reason: "refusal"を含む成功結果として返されます。stop_reasonで処理を一元化します。 APIは引き続きstop_reason: "refusal"を中心に拒否処理を統合していくため、モデル固有の動作ではなくstop reasonに基づいて分岐してください。拒否されたリクエストを、サーバーサイドまたはクライアントで別のClaudeモデルで再試行します。
すべてのstop_reason値とその処理方法。
レスポンスをストリーミングし、到着したmessage_deltaイベントからstop_reasonを読み取ります。
Claudeのクロスリンガル機能により、複数の言語でユーザーにサービスを提供します。
Was this page helpful?