Table of Contents
如何修复 OpenAI 速率限制和超时错误。
LLM 开始被广泛应用于各种不同的使用案例中。其中包括翻译、情感分析、生成代码、博客、电子邮件等。 然而,由于 OpenAI API 相对较新,将其直接集成到生产中会遇到一些问题。他们的 API 不提供服务水平协议(SLA),也不保证正常运行时间,甚至不保证服务性能。每秒令牌数和每秒请求数仍有速率限制。
LLM 开始被广泛应用于各种用例。然而,由于 OpenAI API 相对较新,将其直接集成到生产中存在一些问题。他们的 API 不提供服务水平协议(SLA),也不保证正常运行时间,甚至不保证服务性能。每秒令牌数和每秒请求数仍有速率限制。
OpenAI 建议使用各种技术来缓解这一问题。让我们简要探讨其中几种。
指数延迟
指数回退是一种用于处理速率限制的策略,在出现速率限制错误时,逐渐延长后续重试之间的时间。下面是 Node.Js 中的一个示例:
const axios = require('axios'); // 确保使用 npm 或 yarn 安装 axios。 const BASE_URL = 'https://api.openai.com/v1/chat/completions'; async function makeRequestWithBackoff(endpoint, params, retries = 3, backoffDelay = 500) { try { const response = await axios.post(endpoint, params, { headers:{ 'Content-Type': 'application/json', 'Authorization':Bearer YOUR_OPENAI_API_KEY`, }, }); return response.data; } catch (error) { if (error.response && error.response.status === 429 && retries > 0) { // 429 是 HTTP 状态代码,表示请求过多 // 等待随机延迟,每次重试都以指数形式增加 const delay = Math.random() * backoffDelay; console.log(`Rate limit hit, retrying in ${delay}ms`); await new Promise((resolve) => setTimeout(resolve, delay)); return makeRequestWithBackoff(endpoint, params, retries - 1, backoffDelay * 2); } else { // If it's not a rate limit error or we ran out of retries, throw the error throw error; } } const params = { messages:[ {role : "user", content: "Hi, Who are you?" } } max_tokens: 50, model:"gpt-3.5-turbo" }; makeRequestWithBackoff(BASE_URL, params) .then(data => console.log(data)) .catch(error => console.error(error));
您甚至可以修改逻辑,将指数回退改为线性或随机回退。
批处理
OpenAI 还允许在 /completions 端点上批量请求。如果您每秒处理的请求数较多,但每秒处理的令牌数较少,则可以采用这种方式。但请记住,这个 API 正在被淘汰。使用与上面相同的示例
const BASE_URL = "https://api.openai.com/v1/completions"; const params = { model:"curie", prompts:[ "很久很久以前有一只狗"、"很久很久以前有一只猫"、"很久很久以前有一个人" ] }; makeRequestWithBackoff(BASE_URL, params) .then(data => console.log(data)) .catch(error => console.error(error));
除上述技术外,您还可以使用其他技术。
缓存
很多时候,您的用户都在查询相同的内容,在您的请求之上建立某种类型的简单
或语义
缓存层可以帮助您节约成本和请求时间。但在这种情况下,它会减少对 OpenAI 的调用。
在 OpenAI 和 Azure 之间切换。
您可以申请 Azure 的 OpenAI 服务,并在两个提供商之间设置负载平衡。这样,即使其中一个出现故障或运行缓慢,也可以切换到另一个提供商。
始终流式响应
OpenAI API 提供流功能,允许我们在生成部分模型响应时实时接收这些响应。与传统的非流调用相比,这种方法具有很大的优势。在传统的非流调用中,在整个响应持续时间结束之前,您可能无法察觉到任何潜在的超时,而超时时间的长短则取决于您的初始参数,例如请求的复杂性和指定的 max_tokens 数量。
无论请求大小或设置的 max_tokens,流处理都能确保模型通常在最初的 5-6 秒内开始交付令牌。如果延迟超过了这个短暂的时间窗口,则表明请求可能超时或未按预期处理。我们可以终止此类请求并再次重试。
设置回退
对于可以从其他模型获取响应的特定用例,可以设置回退到其他模型。最好的选择是 Llama-70b、Gemini 或其他较小的型号,如 MIXTRAL 8X7B、Claude Instant 等。 以上是一些常用技术,可用于减少生产级应用中的错误。
就是这些了,感谢您的阅读,请在 Merlin @ Twitter 上关注我们 我们Merlin API提供所有这些功能以及更多,有 20 多种型号可供选择。我们专注于 API 的可靠性,并负责所有切换、回退、缓存和速率限制处理。我们提供统一的应用程序接口(API),并在所有模型中使用统一的响应格式。
如何在 Node.js 中使用 Merlin API 的一个小示例:
import { Merlin } from "merlin-node"; // npm install merlin-node // WARNING: test api key. // Replace with your API key from Merlin Dashboard // https://api.getmerlin.in const apiKey = "merlin-test-3b7d-4bad-9bdd-2b0d7b3dcb6d"; const Merlin = new Merlin({ merlinConfig: { apiKey } }); const initChat = { role: "system", content:"You are a helpful assistant."
} async function createCompletion() { try { const completion = await Merlin.chat.completions.create({ messages:[initChat], model:"gpt-3.5-turbo", // 20+ models as needed }); } catch (error) { console.error("Error creating completion:", error); } } createCompletion();
Experience the full potential of ChatGPT with Merlin
卡尔普娜-塔库尔
她是 Merlin AI 的营销能手、自动化大师和增长能手,每项举措都能带来 10 倍的增长!