📖 功能介绍
凌晨3点27分,我看了一眼账单:OpenAI API花了847美元。我问自己:这些钱都花哪了?是不是有Agent偷偷加班了?是不是有请求被浪费了?
限流不是限制能力,而是限制浪费。它让API调用变得可控可预测,就像给Agent装了个"钱包管家"——每次花钱都要记账,每月预算不能超。这不是吝啬,这是成熟。
为什么需要限流?
| 原因 | 后果 | 限流的作用 |
|---|---|---|
| API配额限制 | 超配额被拒绝服务 | 主动控制,避免被动限流 |
| 成本控制 | 月底账单超标 | 预算管理,成本可见 |
| 并发过载 | 系统崩溃 | 保护系统稳定性 |
| 用户公平 | 某些用户独占资源 | 资源公平分配 |
🚀 使用方法
1. 基础限流配置
🚦 请求速率限制
# OpenClaw 限流配置
rate_limiting:
enabled: true
# 全局限流
global:
requests_per_second: 100
burst: 20 # 允许短时突发
# 按用户限流
per_user:
requests_per_minute: 60
requests_per_hour: 500
requests_per_day: 2000
# 按Agent限流
per_agent:
requests_per_minute: 30
# 按模型限流(更贵的模型更严格)
per_model:
claude-opus-4:
requests_per_minute: 10
gpt-4o:
requests_per_minute: 20
gpt-4o-mini:
requests_per_minute: 50
2. 限流算法选择
不同的算法适合不同的场景,选择合适的算法事半功倍。
令牌桶算法(Token Bucket)
┌──────────────────┐
│ 🔵🔵🔵🔵🔵 (5 tokens) │ → 每秒补充1个
└──────────────────┘
每次请求消耗1个,桶空则拒绝
┌──────────────────┐
│ 🔵🔵🔵🔵🔵 (5 tokens) │ → 每秒补充1个
└──────────────────┘
每次请求消耗1个,桶空则拒绝
# 令牌桶算法配置
algorithm:
type: "token_bucket"
# 桶容量
bucket_size: 100
# 补充速率
refill_rate: 10 # 每秒补充10个
# 突发允许
burst_allowed: true
max_burst: 50
漏桶算法(Leaky Bucket)
水滴 → ┌────┐ → 匀速流出
│ 🪣 │ → 每秒固定速率
└────┘
强制匀速,无突发
水滴 → ┌────┐ → 匀速流出
│ 🪣 │ → 每秒固定速率
└────┘
强制匀速,无突发
# 漏桶算法配置(适合需要稳定输出的场景)
algorithm:
type: "leaky_bucket"
bucket_size: 50
drain_rate: 5 # 每秒处理5个请求
3. 成本配额管理
💰 成本控制配置
# 成本配额配置
quota:
enabled: true
# 每日预算
daily_budget:
amount: 50 # 美元
hard_limit: true # 超额直接拒绝
soft_limit_warning: 40 # 40美元时告警
# 每月预算
monthly_budget:
amount: 1000
hard_limit: true
# 按模型分配
model_allocation:
claude-opus-4: 30% # 高质量但贵
gpt-4o: 40%
gpt-4o-mini: 30% # 简单任务用便宜模型
# 超额处理
overflow:
action: "reject" # reject/queue/fallback
fallback_model: "gpt-4o-mini" # 降级模型
4. 并发控制
# 并发限制配置
concurrency:
enabled: true
# 最大并发请求
max_concurrent: 50
# 按类型分配
allocation:
chat: 30
search: 10
analysis: 10
# 排队策略
queue:
enabled: true
max_size: 100
timeout: 30s # 排队超时
# 优先级队列
priority:
levels:
- name: "critical"
weight: 3
- name: "normal"
weight: 2
- name: "low"
weight: 1
💡 最佳实践
🎯 限流设计原则:
- 分级限流:全局→用户→Agent→模型,层层细化
- 软硬结合:软限制告警,硬限制拒绝
- 突发容忍:允许短暂突发,但要有上限
- 降级备用:超限时有备用方案,别直接拒绝
限流响应处理
# 限流响应配置
response:
# 被限流时的返回
on_limit:
status_code: 429
message: "请求过于频繁,请稍后重试"
# 告知用户何时可以重试
headers:
Retry-After: 60 # 60秒后重试
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
# 超额时的返回
on_quota_exceeded:
status_code: 402
message: "API配额已用尽"
fallback: "gpt-4o-mini" # 自动降级
❌ 绝对不要做的事:
- 不要把硬限制设得太高,否则等于没设
- 不要没有降级方案,直接拒绝用户体验很差
- 不要忽略API厂商的限流,他们的限制比你更硬
- 不要让用户等待太久,排队超时要有上限
🔧 完整配置示例
# OpenClaw 限流完整配置
rate_control:
# 速率限制
rate_limiting:
enabled: true
algorithm: "token_bucket"
global:
rps: 100
burst: 30
per_user:
rpm: 60
rph: 500
rpd: 2000
# 并发限制
concurrency:
enabled: true
max_concurrent: 50
queue:
enabled: true
max_size: 100
timeout: 30s
# 成本配额
quota:
enabled: true
daily_budget: 50
monthly_budget: 1000
model_allocation:
claude-opus-4: 30%
gpt-4o: 40%
gpt-4o-mini: 30%
overflow:
action: "fallback"
fallback_model: "gpt-4o-mini"
# 监控和告警
monitoring:
enabled: true
metrics:
- rate_limit_rejections
- quota_usage
- queue_length
alerts:
- condition: "quota_usage > 80%"
severity: "warning"
- condition: "quota_usage > 95%"
severity: "critical"