stop_reasonフィールドが含まれます。これらの値を理解することは、異なる応答タイプを適切に処理する堅牢なアプリケーションを構築するために重要です。
API応答におけるstop_reasonの詳細については、Messages APIリファレンスを参照してください。
stop_reasonとは?
stop_reasonフィールドは、すべての成功したMessages API応答の一部です。リクエストの処理における失敗を示すエラーとは異なり、stop_reasonは、Claudeが応答生成を正常に完了した理由を教えてくれます。
応答例
停止理由の値
end_turn
最も一般的な停止理由です。Claudeが応答を自然に完了したことを示します。end_turnでの空の応答
時々、Claudeはstop_reason: "end_turn"で空の応答(コンテンツなしで正確に2-3トークン)を返すことがあります。これは通常、特にツール結果の後で、Claudeがアシスタントターンが完了したと解釈した場合に発生します。
一般的な原因:
- ツール結果の直後にテキストブロックを追加する(Claudeはユーザーが常にツール結果の後にテキストを挿入することを期待するように学習するため、パターンに従うためにターンを終了します)
- Claudeの完了した応答を何も追加せずに送り返す(Claudeはすでに完了したと判断しているため、完了したままになります)
- ツール結果の直後にテキストブロックを追加しない - これはClaude にすべてのツール使用後にユーザー入力を期待するように教えます
- 修正なしで空の応答を再試行しない - 空の応答を単純に送り返しても役に立ちません
- 継続プロンプトは最後の手段として使用 - 上記の修正で問題が解決しない場合のみ
max_tokens
Claudeがリクエストで指定されたmax_tokens制限に達したため停止しました。
stop_sequence
Claudeがカスタム停止シーケンスの1つに遭遇しました。tool_use
Claudeがツールを呼び出しており、実行を期待しています。pause_turn
Claudeが長時間実行される操作を一時停止する必要がある場合に、ウェブ検索などのサーバーツールで使用されます。refusal
Claudeが安全上の懸念により応答の生成を拒否しました。Claude Sonnet 4.5またはOpus 4.1を使用中に
refusal停止理由に頻繁に遭遇する場合は、異なる使用制限を持つSonnet 4(claude-sonnet-4-20250514)を使用するようにAPI呼び出しを更新することを試してみてください。Sonnet 4.5のAPI安全フィルターの理解について詳しく学んでください。Claude Sonnet 4.5のAPI安全フィルターによってトリガーされる拒否について詳しく学ぶには、Sonnet 4.5のAPI安全フィルターの理解を参照してください。
model_context_window_exceeded
Claudeがモデルのコンテキストウィンドウ制限に達したため停止しました。これにより、正確な入力サイズを知らなくても、可能な限り最大のトークンをリクエストできます。この停止理由は、Sonnet 4.5以降のモデルでデフォルトで利用可能です。以前のモデルの場合は、この動作を有効にするためにベータヘッダー
model-context-window-exceeded-2025-08-26を使用してください。停止理由を処理するためのベストプラクティス
1. 常にstop_reasonをチェック
応答処理ロジックでstop_reasonをチェックすることを習慣にしてください:
2. 切り詰められた応答を適切に処理
トークン制限やコンテキストウィンドウにより応答が切り詰められた場合:3. pause_turnのための再試行ロジックを実装
一時停止する可能性のあるサーバーツールの場合:停止理由 vs. エラー
stop_reason値と実際のエラーを区別することが重要です:
停止理由(成功した応答)
- 応答本文の一部
- 生成が正常に停止した理由を示す
- 応答には有効なコンテンツが含まれる
エラー(失敗したリクエスト)
- HTTPステータスコード4xxまたは5xx
- リクエスト処理の失敗を示す
- 応答にはエラーの詳細が含まれる
ストリーミングの考慮事項
ストリーミングを使用する場合、stop_reasonは:
- 初期の
message_startイベントではnull message_deltaイベントで提供される- その他のイベントでは提供されない
一般的なパターン
ツール使用ワークフローの処理
完全な応答の確保
入力サイズを知らずに最大トークンを取得
model_context_window_exceeded停止理由により、入力サイズを計算せずに可能な限り最大のトークンをリクエストできます:
stop_reason値を適切に処理することで、異なる応答シナリオを適切に処理し、より良いユーザーエクスペリエンスを提供する、より堅牢なアプリケーションを構築できます。