] 错误堆栈: Error: 请求过于频繁,超出API限制 详细信息: { "error": { "message": "Model tpm limit exc...
🚨 错误信息
[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. 原因分析
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请求自动重试)。