Table of Contents
Как исправить ошибки ограничения скорости и таймаута OpenAI.
LLM начинают использоваться в самых разных сферах. К ним относятся перевод, анализ настроений, генерация кода, блоги, электронные письма и т. д. Однако при интеграции API OpenAI непосредственно в производство возникают некоторые проблемы, поскольку они появились относительно недавно. API не предоставляет никаких SLA и гарантий работоспособности или даже производительности сервиса. До сих пор существуют ограничения по количеству токенов в секунду и запросов в секунду.
LLM начинают использоваться в самых разных сферах. К ним относятся перевод, анализ настроений, генерация кода, блогов, электронных писем и т. д. Однако при интеграции API OpenAI непосредственно в производство возникают некоторые проблемы, так как он является относительно новым. API не предоставляет никаких SLA и гарантий работоспособности или даже производительности сервиса. До сих пор существуют ограничения на количество токенов в секунду и запросов в секунду.
OpenAI рекомендует использовать различные техники для смягчения этой проблемы. Давайте вкратце рассмотрим некоторые из них.
Экспоненциальный откат
Экспоненциальный откат - это стратегия, используемая для борьбы с ограничениями скорости путем постепенного увеличения времени между последующими повторными попытками в случае ошибки, ограничивающей скорость. Ниже приведен пример на Node.Js:
const axios = require('axios'); // Обязательно установите axios с помощью npm или yarn. 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 для Too Many Requests // Ждем случайной задержки, которая экспоненциально увеличивается с каждой повторной попыткой 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 { // Если это не ошибка ограничения скорости или у нас закончились повторные попытки, бросаем ошибку 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.
Вы можете обратиться к сервису OpenAI в Azure и настроить балансировку нагрузки между обоими провайдерами. Таким образом, даже если один из них не работает или работает медленно, вы сможете переключиться на другого провайдера.
Всегда потоковые ответы
API OpenAI предоставляет возможность потоковой передачи данных, что позволяет нам получать частичные ответы модели в режиме реального времени, по мере их генерации. Такой подход дает значительное преимущество перед традиционными непотоковыми вызовами, при которых вы можете не знать о возможных таймаутах до тех пор, пока не истечет вся продолжительность ответа, которая может варьироваться в зависимости от ваших начальных параметров, таких как сложность запроса и количество заданных max_tokens.
Потоковая передача гарантирует, что, независимо от размера запроса или заданного max_tokens, модель начнет выдавать токены, как правило, в течение первых 5-6 секунд. Если задержка выходит за пределы этого короткого окна, это ранний признак того, что запрос может быть отложен или обработан не так, как ожидалось. Мы можем прервать такие запросы и повторить их снова.
Настройка обратных связей
Для специфических случаев, когда необходимо получать ответы от других моделей, можно настроить обратную связь с другими моделями. Лучшими альтернативами могут быть Llama-70b, Gemini или другие небольшие модели, такие как MIXTRAL 8X7B, Claude Instant и т. д. Это некоторые общие приемы, которые можно использовать для уменьшения ошибок в приложениях производственного класса.
На этом все, спасибо, что прочитали, и следите за нами в Merlin @ Twitter Мы в Merlin API предоставляем все эти функции и многое другое с 20+ моделями на выбор. Мы фокусируемся на надежности API и делаем все переключения, возвраты, кэширование и обработку ограничений скорости. Мы предоставляем единый унифицированный API и используем один формат ответа для всех моделей.
Небольшой пример использования Merlin API с Node.js:
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: "Вы - полезный помощник".
} async function createCompletion() { try { const completion = await Merlin.chat.completions.create({ messages: [initChat], model: "gpt-3.5-turbo", // 20+ моделей по мере необходимости }); } catch (error) { console.error("Ошибка при создании завершения:", error); } } createCompletion();
Experience the full potential of ChatGPT with Merlin
Kalpna Thakur
She is Marketing powerhouse of Merlin AI, Automation master & Growth extraordinaire, brings 10X growth with every initiative!