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 客户端;设置它会替换默认客户端。自定义 HTTP 客户端会在所有中间件运行完毕后接收请求。

内置中间件

SDK 附带一个拒绝回退中间件,当 Claude 拒绝某个请求(stop_reason: "refusal")时,它会自动在回退模型上重试该请求。拒绝与回退列出了其安全分类器可能拒绝请求的模型,检测并在回退模型上重试介绍了设置方法以及各语言的示例。

Was this page helpful?