SDK、CLI 和库客户端 SDK
SDK 中间件
拦截并修改 SDK 的请求和响应。
Claude SDK 提供了一个 middleware(中间件,也称 interceptor,即拦截器)钩子,让您可以在请求发送之前以及收到响应之后运行代码。可将中间件用于横切关注点,例如日志记录、自定义重试、请求注解以及拒绝回退处理。
每个中间件都可以在调用 next() 之前检查或替换请求,并在 next() 返回之后检查或替换响应。
注册中间件
每个中间件都是一个函数,它接收传出的请求和下一个处理程序。调用 call_next(request) 将请求转发到链中的其余部分(如果这是最后一个中间件,则直接转发到 SDK 核心),并返回其响应。该调用之前的任何代码在请求发出时运行;之后的任何代码在响应返回时运行。
Python
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?