エラー
ゲートウェイが返すすべてのステータスコードと、その実際の原因、対処法。
エラーでは、次の要素を含む JSON が返されます: type および人間が読める形式の message。ステータスコードは Anthropic と OpenAI の慣例に従います。
{"type": "error", "error": {"type": "authentication_error", "message": "invalid api key"}}
ステータスコード
| コード | 意味 | 実際によくある原因 | 対処方法 |
|---|---|---|---|
400 | 不正なリクエスト | 欠落している項目: max_tokens (Messages の場合)、または形式が不正な messages 配列 | 本文を次の内容と照合してください: Messages |
401 | 未認証 | 形式に合わないヘッダーでキーを送信している | x-api-key を Messages に使用し、Chat Completions には Bearer を使用します |
402 | 支払いが必要 | 残高不足、またはプランの有効期限切れ | チャージ または プランを購入 |
403 | アクセス禁止 | キーが失効している、またはアカウントでモデルが有効になっていない | 新しいキーを作成し、次を確認してください: /v1/models |
404 | 見つかりません | ベース URL の誤り — 通常は次の部分の重複または欠落: /v1 | 参照: ベースURL |
429 | レート制限 | 同時リクエストが多すぎる | 指数バックオフを適用してください。参照: レート制限 |
500 | ゲートウェイエラー | 予期しない内部障害 | 一度再試行し、問題が続く場合はリクエスト ID を添えてサポートにお問い合わせください |
529 | 上流サービスの過負荷 | アカウントではなく、プロバイダー側の処理能力が原因 | バックオフを適用して再試行してください — 通常は数秒で解消します |
エラーの種類
| 種類 | 意味 |
|---|---|
invalid_request_error | 本文の形式が不正、または必須フィールドが欠落している |
authentication_error | キーが欠落している、形式が不正、または失効している |
permission_error | キーは有効だが、そのモデルの使用が許可されていない |
not_found_error | 不明なパス、または不明なモデル ID |
rate_limit_error | リクエストが制限されている |
api_error | 内部障害 |
overloaded_error | 上流サービスの処理能力が限界に達している |
適切な再試行
再試行 429, 500, 502, 503 と 529。無条件に再試行しないでください。対象: 400, 401, 402 または 403 — 同じリクエストは同じように失敗し、応答が途中まで生成されている場合は、二重に課金される可能性があります。
import time, httpx
def call(body, key, tries=4):
for i in range(tries):
r = httpx.post(class="s">"https://aiprimetech.io/v1/messages", json=body, timeout=120,
headers={class="s">"x-api-key": key,
class="s">"anthropic-version": class="s">"2023-06-01"})
if r.status_code in (429, 500, 502, 503, 529):
time.sleep(2 ** i) class=class="s">"c"># 1s, 2s, 4s, 8s
continue
r.raise_for_status()
return r.json()
raise RuntimeError(class="s">"upstream unavailable after retries")
本番環境では、待機時間にジッターを加えてください。多数のワーカーが同時に再試行すると、一時的な障害が、同じ上流サービスにリクエストが殺到する事態に発展します。