Skip to content

原文(日本語に翻訳)

拒否エラーメッセージを改善しました:利用可能な場合、API提供の説明を含めるようになりました。

原文(英語)

Improved refusal error messages to include the API-provided explanation when available

概要

Claude APIがリクエストを拒否する際、APIは拒否の理由を説明する情報を提供することがあります。このアップデートにより、Claude Codeはその説明をエラーメッセージに含めるようになりました。これにより、ユーザーはなぜリクエストが拒否されたのかをより明確に理解でき、適切な対処が取りやすくなります。

基本的な使い方

bash
# 改善前のエラーメッセージ
# Error: Request refused

# 改善後のエラーメッセージ(APIが説明を提供した場合)
# Error: Request refused
# API explanation: This content violates usage policies regarding [specific policy].
# For more information, see: https://anthropic.com/policies

# APIが説明を提供しない場合は従来どおりのメッセージが表示される

実践例

コンテンツポリシーによる拒否の確認

bash
# ポリシーに抵触する可能性があるリクエストの場合
claude "..."

# 改善されたエラーメッセージ:
# Request refused: The requested content cannot be generated.
# API explanation: This request involves content that conflicts with
#                  Anthropic's usage policies on [category].
# Learn more: https://anthropic.com/policies/usage

# ユーザーはこの説明を基に、リクエストを適切に調整できる

組織レベルのポリシー制限

bash
# 組織の管理者がカスタムポリシーを設定している場合
# 管理者から提供されたカスタム説明が表示される

# 例:
# Request refused: This action is not permitted.
# API explanation: Your organization has restricted the use of external
#                  code execution tools. Contact your admin for exceptions.

# 組織の設定を確認
claude /config

レート制限やクォータによる拒否

bash
# レート制限に達した場合(APIが詳細情報を提供)
# 改善されたエラーメッセージ:
# Request refused: Rate limit exceeded.
# API explanation: You have exceeded your hourly request quota.
#                  Current limit: 1000 requests/hour.
#                  Reset time: 14:00 UTC

# エラーメッセージの情報を活用したリトライロジック
#!/bin/bash
max_retries=3
retry_count=0

while [ $retry_count -lt $max_retries ]; do
  output=$(claude "タスクを実行して" 2>&1)
  exit_code=$?
  
  if [ $exit_code -eq 0 ]; then
    echo "$output"
    break
  elif echo "$output" | grep -q "Rate limit exceeded"; then
    # エラーメッセージからリセット時間を取得して待機
    echo "レート制限に達しました。1分後にリトライします..."
    sleep 60
    retry_count=$((retry_count + 1))
  else
    echo "エラー: $output"
    break
  fi
done

デバッグ時のエラー情報活用

bash
# スクリプトでのエラーハンドリング
#!/bin/bash

handle_claude_error() {
  local error_output="$1"
  
  # APIの説明が含まれているか確認
  if echo "$error_output" | grep -q "API explanation:"; then
    api_explanation=$(echo "$error_output" | grep "API explanation:" | cut -d: -f2-)
    echo "詳細な拒否理由: $api_explanation"
    
    # ログファイルに記録
    echo "$(date): Refusal - $api_explanation" >> claude_errors.log
  else
    echo "リクエストが拒否されました(理由不明)"
  fi
}

result=$(claude "タスクを実行して" 2>&1) || handle_claude_error "$result"

注意点

  • APIが説明を提供しない場合は、従来のエラーメッセージが表示されます
  • 説明の内容はAPIが提供するものであり、Claude Codeが生成するものではありません
  • 組織の管理者はカスタムの拒否メッセージを設定できる場合があります
  • プライバシーやセキュリティ上の理由から、説明が省略される場合もあります
  • エラーメッセージの情報をログに記録することで、パターンの分析が可能になります

関連情報