速率限制

SDK 内置的速率限制和冷却(cooldown)机制。

Cooldown 机制

SDK 不会自己实现令牌桶限流,但会解析 API 返回的速率限制响应头并进入冷却状态:

import { isInCooldown, getRateLimitState } from 'claude-code-sdk-ts'

// 检查是否在冷却中
if (isInCooldown()) {
  const state = getRateLimitState()
  console.log(`冷却中,原因: ${state.reason}, 重置时间: ${new Date(state.resetAt!).toISOString()}`)
}

冷却状态管理

import { triggerCooldown, clearCooldown, getRateLimitState } from 'claude-code-sdk-ts'

// 手动触发冷却
triggerCooldown(Date.now() + 60000, 'rate_limit')

// 获取当前状态
const state = getRateLimitState()
console.log(state.isCooldown) // true

// 手动清除冷却
clearCooldown()

// 冷却会自动过期(当 Date.now() >= resetAt)

Rate Limit Header 解析

import { parseRateLimitHeaders } from 'claude-code-sdk-ts'

const headers = {
  'anthropic-ratelimit-requests-remaining': '10',
  'anthropic-ratelimit-requests-reset': '2026-05-28T15:00:00Z',
  'anthropic-ratelimit-tokens-remaining': '50000',
  'anthropic-ratelimit-tokens-reset': '1716890400000',
}

const parsed = parseRateLimitHeaders(headers)
console.log(parsed.requestsRemaining) // 10
console.log(parsed.tokensReset)       // 1716890400000 (epoch ms)

集成到 LLM 请求

速率限制的冷却状态会自动与 LLM Client 的 withRetry 集成,在收到 429 响应时自动触发冷却。

配置

import { ClaudeCodeSDK } from 'claude-code-sdk-ts'

const sdk = new ClaudeCodeSDK({
  llm: { provider: 'anthropic', apiKey: process.env.ANTHROPIC_API_KEY! },
  rateLimit: {
    enabled: true,  // 启用速率限制跟踪
  },
})