] 错误堆栈: Error: 请求过于频繁,超出API限制 详细信息: { "error": { "message": "Model tpm limit exc...

2026年03月07日 23:57 状态: processing

🚨 错误信息

[ERROR] 错误堆栈: Error: 请求过于频繁,超出API限制 详细信息: { "error": { "message": "Model tpm limit exceeded. Please try again later.", "type": "rix_api_error", "param": "", "code": "bad_response_status_code" } } at handleAPIError (E:\neuro\live-2d\js\api-utils.js:89:11) at async LLMClient.chatCompletion (E:\neuro\live-2d\js\ai\llm-client.js:81:17) at async VoiceChatFacade.sendToLLM (E:\neuro\live-2d\js\ai\llm-handler.js:205:34) [ERROR] 用户显示错误: 请求频率超限,请稍后再试

🤖 AI解决方案

报错分析报告

1.错误翻译



原文:Model tpm limit exceeded. Please try again later.
译文:模型TPM(每分钟Tokens数)限制已超出,请稍后重试。

2. 原因分析


  • 根本原因:请求的Tokens Per Minute(TPM)超过API限额,触发速率限制。

  • 发生位置:调用LLMClient.chatCompletion异步方法时(llm-client.js:81),未控制请求频率或Token消耗。
  • 3.解决方案


    ``javascript
    // 修复后的代码(带指数退避重试+速率控制)
    const { setTimeout } = require('timers/promises');

    async function safeChatCompletion(llmClient, messages, maxRetries = 3, baseDelay = 1000) {
    for (let i = 0; i < maxRetries; i++) {
    try {
    return await llmClient.chatCompletion(messages);
    } catch (err) {
    if (err.code === 'bad_response_status_code' &&
    err.error?.message.includes('tpm limit exceeded')) {
    const delay = baseDelay * Math.pow(2, i); // 指数退避
    console.warn(
    TPM超限,第${i+1}次重试(等待${delay}ms));
    await setTimeout(delay);
    continue;
    }
    throw err; // 非TPM错误直接抛出
    }
    }
    throw new Error(
    超过最大重试次数(${maxRetries}),请求失败);
    }

    // 使用示例(替换原llm-handler.js中的sendToLLM调用)
    // const response = await safeChatCompletion(llmClient, chatMessages);
    `

    4. 预防措施


  • 最佳实践1:客户端实现令牌桶算法滑动窗口,限制每分钟请求数/Token总量(如用p-queue库管理并发)。

  • 最佳实践2:对高频接口添加指数退避重试(如上述代码),避免短时间重复触发限制。

  • 推荐工具p-queue(队列速率控制)、axios-retry`(HTTP请求自动重试)。