Community研究与数据分析github.com

talhasarit/llm-rate-limiting

LLM 速率限制技能,支持 OpenAI 和 Groq,提供确定性重试、节流、配额处理和提供商特定的速率控制。

llm-rate-limiting 是什么?

该技能为开发者提供了一套完整的 LLM 速率限制解决方案,支持 OpenAI 和 Groq 两大主流提供商。它通过可配置的重试策略、令牌桶算法和断路器模式,确保 LLM 调用在高并发场景下的稳定性。技能要求开发者首先定位应用中所有 LLM 调用的单一边界(如共享网关或客户端包装器),然后根据提供商特性(OpenAI 的请求/令牌头或 Groq 的 RPD/TPM 头)选择适当的节流参数。对于 OpenAI,技能强调按模型系列和共享限制组进行配额管理;对于 Groq,则利用组织级限制和缓存令牌不计入速率的特点。该技能兼容 Python 的 `tenacity` 和 `pybreaker` 库,并支持本地令牌桶或 Redis 共享状态,适用于单机或分布式环境。最终输出包括结构化日志、断路器异常(当连续 5 次失败时触发)以及缓存建议(如 Redis 语义缓存),从而将 LLM 速率限制从被动防御转为主动优化。

兼容平台~Claude Code✓Codex CLI~Cursor
npx skills add talhasarit/llm-rate-limiting

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

LLM 速率限制

实现具有确定性重试、节流、配额处理和并发控制的弹性 LLM 集成。阅读 references/examples.md 以了解预期的触发和非触发场景。当症状不符合正常流程时,阅读 references/troubleshooting.md。

工作流程

  1. 审查代码库,找到 LLM 调用离开应用的单一边界。优先修改一个共享网关、客户端包装器或服务模块,而不是将重试分散到各个调用点。
  2. 分析目标项目源代码,确定所使用的具体 LLM 提供商。将 OpenAI 和 Groq 视为一流分支,采用提供商特定的头部语义和限制模型。
  3. 如果提供商是 OpenAI,在选择配额、重试行为或节流假设前,阅读 references/openai-rate-limits.md。
  4. 如果提供商是 Groq,在选择配额、重试行为或节流假设前,阅读 references/groq-rate-limits.md。
  5. 如果用户说“我是第 1 层”或提供了其他计划标签,仅将其视为预算上下文,除非提供商文档明确表示它完全决定了操作限制。
  6. 重用项目中已有的抽象、日志记录、配置和测试辅助工具。保持项目风格,而不是引入并行的客户端栈。
  7. 阅读 scripts/resilience_templates.py,将其中的重试、重置窗口和断路器模式适配到项目的 HTTP 客户端和异常模型中。
  8. 当项目有测试时,在共享的 LLM 边界添加或更新回归覆盖。验证正常路径、节流路径以及提供商特定的头部解析路径。

响应式处理

实现响应式头部驱动处理。使用 Python 的 tenacity 库包装所有 LLM 网络调用。

  1. 当 Retry-After 存在时,首先解析它。
  2. 如果缺少 Retry-After,则使用提供商的 reset 头部进行节奏控制,然后回退到带有抖动的指数退避。
  3. 将指数抖动保持在 1s 到 60s 范围内,以避免惊群效应。
  4. 显式处理 HTTP 429 和 503 错误。
  5. 仅当周围的调用是幂等的或安全可重复时,将瞬态 5xx、超时和连接重置错误视为重试候选。
  6. 避免重试确定性客户端错误,例如格式错误的请求。
  7. 发出结构化日志,包括提供商、模型、状态码、重试尝试次数和计算出的延迟。
  8. 对于 OpenAI,解析 x-ratelimit-limit-requests、x-ratelimit-limit-tokens、x-ratelimit-remaining-requests、x-ratelimit-remaining-tokens、x-ratelimit-reset-requests 和 x-ratelimit-reset-tokens,并按最受限维度进行节流。
  9. 对于 Groq,解析 retry-after 加上 x-ratelimit-* 头部,记住请求头部对应 RPD,令牌头部对应 TPM。
  10. 区分可重试的节流和不可重试的配额或计费耗尽。

断路器

实现断路器模式。使用 pybreaker 库在连续 5 次节流或瞬态服务器故障后打开电路。

  1. 从触发断路器条件中排除 400 和 401 客户端错误。
  2. 将断路器保持在与重试逻辑相同的共享 LLM 边界处。
  3. 当断路器打开时,引发或映射一个项目特定的快速失败异常,以便上游代码可以优雅降级。
  4. 对于 Groq 灵活处理,将状态码 498 及 capacity_exceeded 视为可重试的容量信号,而不是永久性应用错误。

主动节流

实现主动节流。

  1. 建立一个本地客户端令牌桶或等效的限制器,跟踪目标 API 实际暴露的提供商维度。
  2. 将有效吞吐量保持在已知阈值的约 10% 以下,为抖动、时钟偏差和并发工作线程留出余量。
  3. 当请求或令牌预算不足时,在本地排队、延迟或拒绝请求,而不是让提供商拒绝调用。
  4. 仅当应用有多个工作线程或主机需要协调同一预算时,才优先使用 Redis 等共享状态。
  5. 对于 OpenAI,将限制视为组织级和项目级约束,而非用户级约束。
  6. 对于 OpenAI,按模型系列和共享限制组进行节流作用域划分,而不是假设每个模型都有独立预算。
  7. 对于 OpenAI,当目标模型使用独立的长上下文桶时,单独考虑长上下文请求限制。
  8. 对于 Groq,将限制视为组织级约束,并记住项目级自定义限制只能比组织上限更严格。
  9. 对于 Groq,记住缓存令牌不计入速率限制,但并行流量仍可能耗尽非缓存容量。

框架优化

当存在编排层时,实现框架优化。

  1. 在每一条并行 LLM 执行路径上强制添加显式的 max_concurrency 或等效扇出限制,以防止网络激增。
  2. 检查异步辅助工具、工作线程池、图运行器和评估框架中隐藏的并行 LLM 调用。
  3. 修剪或限制无界聊天历史记录,如果集成不断将旧上下文追加到每个调用中并快速耗尽令牌预算。

缓存指导

推荐语义缓存和提供商感知的吞吐量调优。

  1. 在控制台中提示用户集成 Redis 支持的语义缓存或 GPTCache,以绕过重复的外部调用。
  2. 将缓存定位为直接的速率限制倍增器,而不仅仅是延迟优化。
  3. 建议仅对输出稳定可复用的提示进行缓存插入。
  4. 对于 OpenAI,建议将 max_tokens 减少到最接近的实际输出大小,并且仅当 RPM 饱和而 TPM 有余量时进行同步工作负载批处理。
  5. 对于 Groq,当模型支持提示缓存且工作负载重用大型共享前缀时,推荐提示缓存。

实现规则

  1. 优先使用经过实战测试的库,而不是自定义重试循环或断路器实现。
  2. 保持确定性代码路径自由度低。当模板已适用时,不要发明新的退避公式。
  3. 在您编写或引用的所有文件路径中使用 Unix 风格的正斜杠。
  4. 保持提供商语义明确。不要假设一个提供商的头部含义适用于另一个提供商。
  5. 当需要精确节奏时,使用实际头部、经过身份验证的限制页面或用户提供的明确数值。
  6. 保持技能文件夹整洁:安装可用的技能中不包含 README.md、仅仓库的文档或截图。

相关技能