Claude Platform Docs
SDK、CLI、ライブラリクライアント SDK

SDKミドルウェア

SDKのリクエストとレスポンスをインターセプトして変更します。

Claude SDKは、リクエストが送信される前とレスポンスを受信した後にコードを実行できる「middleware」(ミドルウェア)フック(「interceptor」(インターセプター)とも呼ばれます)を提供しています。ミドルウェアは、ロギング、カスタムリトライ、リクエストへの注釈付け、拒否時のフォールバック処理など、横断的な関心事に使用します。

各ミドルウェアは、next() を呼び出す前にリクエストを、next() が返った後にレスポンスを検査または置き換えることができます。

ミドルウェアの登録

各ミドルウェアは、送信されるリクエストと次のハンドラーを受け取る関数です。call_next(request)を呼び出してリクエストをチェーンの残りの部分(これが最後のミドルウェアの場合はSDKコアに直接)に転送し、そのレスポンスを返します。その呼び出しより前にあるものはすべて送信時に実行され、後にあるものはすべて戻り時に実行されます。

def logging_middleware(request: APIRequest, call_next: CallNext) -> APIResponse[Any]:
    # リクエストの前
    print(f"-> {request.method} {request.url}")

    # リクエストをチェーンの残りの部分に転送する
    response = call_next(request)

    # リクエストの後
    print(f"<- {response.status_code}")

    return response


client = Anthropic(middleware=[logging_middleware])

ミドルウェアの順序

複数のミドルウェアを登録すると、指定した順序で適用されます。最初のミドルウェアの「前」のコードが最初に実行され、その「後」のコードが最後に実行されます。クライアントに登録されたミドルウェアは、リクエストごとのオプションとして渡されたミドルウェアより前に実行されます。

Go SDKでは、option.WithMiddleware を繰り返し呼び出すと連結されます(クライアントが先、次にメソッド)。他のSDKでは配列を渡します。後のエントリほど内側をラップします。

HTTPクライアントの置き換え

SDKはカスタムHTTPクライアント(プロキシ設定、カスタムTLS、またはコネクションプーリング用)も受け付けます。SDKクライアントごとに使用されるHTTPクライアントは1つだけで、設定するとデフォルトが置き換えられます。カスタムHTTPクライアントは、すべてのミドルウェアが実行された後にリクエストを受け取ります。

組み込みミドルウェア

SDKには、Claudeが拒否したリクエスト(stop_reason: "refusal")をフォールバックモデルで自動的にリトライする拒否フォールバックミドルウェアが付属しています。拒否とフォールバックには安全性分類器がリクエストを拒否する可能性のあるモデルが記載されており、フォールバックモデルでの検出とリトライではセットアップと言語ごとの例を説明しています。

Was this page helpful?