Table of Contents
So beheben Sie OpenAI Rate Limits & Timeout-Fehler.
LLMs werden allmählich in einer Vielzahl von Anwendungsfällen eingesetzt. Dazu gehören Übersetzung, Stimmungsanalyse, Codegenerierung, Blogs, E-Mails usw. Die direkte Integration der OpenAI-API in Ihre Produktion ist jedoch mit einigen Problemen verbunden, da sie noch relativ neu ist. Ihre APIs bieten keine SLAs und keine Garantie für die Betriebszeiten oder gar die Leistung des Dienstes. Es gibt immer noch Ratenbeschränkungen für Token pro Sekunde und Anfragen pro Sekunde.
LLMs werden allmählich in einer Vielzahl von Anwendungsfällen eingesetzt. Dazu gehören Übersetzung, Stimmungsanalyse, Codegenerierung, Blogs, E-Mails usw. Die direkte Integration der OpenAI-API in Ihre Produktion ist jedoch mit einigen Problemen verbunden, da sie relativ neu ist. Ihre APIs bieten keine SLAs und keine Garantie für die Betriebszeiten oder gar die Leistung des Dienstes. Es gibt immer noch Ratenbeschränkungen für Token pro Sekunde und Anfragen pro Sekunde.
OpenAI empfiehlt die Verwendung verschiedener Techniken, um dies abzumildern. Lassen Sie uns ein paar davon kurz erkunden.
Exponentieller Backoff
Exponential Backoff ist eine Strategie zur Handhabung von Ratenbeschränkungen, bei der die Zeit zwischen aufeinanderfolgenden Wiederholungsversuchen im Falle eines ratenbeschränkenden Fehlers schrittweise erhöht wird. Nachfolgend ein Beispiel in Node.Js:
const axios = require('axios'); // Stellen Sie sicher, dass Sie axios mit npm oder yarn installieren. 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 ist der HTTP-Statuscode für Too Many Requests // Warte auf eine zufällige Verzögerung, die mit jedem Wiederholungsversuch exponentiell ansteigt 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 { // Wenn es sich nicht um einen Ratenbegrenzungsfehler handelt oder die Anzahl der Wiederholungsversuche abgelaufen ist, wird der Fehler geworfen 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));
Sie können die Logik sogar ändern, um den exponentiellen Backoff in einen linearen oder zufälligen zu ändern.
Batching
OpenAI erlaubt auch Batch-Anfragen am Endpunkt /completions. Dies kann funktionieren, wenn Sie auf Anfragen pro Sekunde stoßen, aber gut auf Token pro Sekunde sind. Aber denken Sie daran, dass diese API veraltet ist. Verwenden Sie das gleiche Beispiel wie oben:
const BASE_URL = "https://api.openai.com/v1/completions"; const params = { model: "curie", prompts: [ "Es war einmal ein Hund", "Es war einmal eine Katze", "Es war einmal ein Mensch" ] }; makeRequestWithBackoff(BASE_URL, params) .then(data => console.log(data)) .catch(error => console.error(error));
Es gibt noch weitere Techniken, die Sie zusätzlich zu diesen verwenden können.
Zwischenspeichern
Oftmals fragen Ihre Benutzer das Gleiche ab. Eine einfache
oder semantische
Caching-Schicht über Ihrer Anfrage kann Ihnen helfen, Kosten und Anfragezeit zu sparen. Aber in diesem Zusammenhang wird es die Aufrufe an OpenAI reduzieren.
Wechseln zwischen OpenAI und Azure.
Sie können sich für den OpenAI-Service von Azure bewerben und einen Lastausgleich zwischen beiden Anbietern einrichten. Auf diese Weise können Sie, selbst wenn einer der beiden Anbieter ausfällt oder langsam ist, zum anderen Anbieter wechseln.
Antworten immer streamen
Die OpenAI-API bietet eine Streaming-Funktion, die es uns ermöglicht, partielle Modellantworten in Echtzeit zu erhalten, während sie generiert werden. Dieser Ansatz bietet einen erheblichen Vorteil gegenüber herkömmlichen Aufrufen ohne Streaming, bei denen Sie möglicherweise nichts von möglichen Zeitüberschreitungen mitbekommen, bis die gesamte Antwortdauer verstrichen ist, die je nach Ihren Anfangsparametern wie der Komplexität der Anfrage und der Anzahl der angegebenen max_tokens variieren kann.
Streaming stellt sicher, dass das Modell unabhängig von der Größe der Anfrage oder der eingestellten max_tokens in der Regel innerhalb der ersten 5-6 Sekunden mit der Lieferung von Tokens beginnt. Sollte es zu einer Verzögerung über dieses kurze Zeitfenster hinaus kommen, so ist dies ein frühes Anzeichen dafür, dass die Anfrage möglicherweise eine Zeitüberschreitung aufweist oder nicht wie erwartet verarbeitet wurde. Wir können solche Anfragen abbrechen und sie erneut versuchen.
Einrichten von Fallbacks
Für bestimmte Anwendungsfälle, in denen es in Ordnung ist, Antworten von anderen Modellen zu erhalten, können Sie Fallbacks zu anderen Modellen einrichten. Die besten Alternativen könnten Llama-70b, Gemini oder andere kleinere Modelle wie MIXTRAL 8X7B, Claude Instant usw. sein, um nur einige zu nennen. Dies sind einige gängige Techniken, die zur Abmilderung von Fehlern in produktionsreifen Anwendungen eingesetzt werden können.
Das war's. Vielen Dank für die Lektüre, und folgen Sie uns auf Merlin @ Twitter Wir von Merlin API bieten all diese Funktionen und noch viel mehr mit mehr als 20 Modellen zur Auswahl an. Wir konzentrieren uns auf die Zuverlässigkeit der API und kümmern uns um alle Umschaltungen, Fallbacks, Caching und die Handhabung von Ratenbegrenzungen. Wir bieten eine einheitliche API und verwenden ein Antwortformat für alle Modelle.
Ein kleines Beispiel für die Verwendung der Merlin-API mit Node.js:
import { Merlin } from "merlin-node"; // npm install merlin-node // WARNUNG: Test-Api-Schlüssel // Ersetzen Sie ihn durch Ihren API-Schlüssel aus dem 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: "Du bist ein hilfreicher Assistent."
} async function createCompletion() { try { const completion = await Merlin.chat.completions.create({ messages: [initChat], model: "gpt-3.5-turbo", // 20+ Modelle nach Bedarf }); } catch (error) { console.error("Fehler beim Erstellen der Vervollständigung:", error); } } createCompletion();
Experience the full potential of ChatGPT with Merlin
Kalpna Thakur
Unser Marketing-Powerhouse entwickelt innovative Lösungen für jede Wachstumsherausforderung - und dabei bleibt der Spaß in unserem Team!