Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Egy pillantással
Cél: Az OpenAI API hibakezelésének tesztelése
Idő: 10 perc
`Beépülő modulok:GenericRandomErrorPlugin, RetryAfterPlugin`
Előfeltételek:Fejlesztői proxy beállítása
Amikor OpenAI API-kat használ az alkalmazásban, tesztelnie kell, hogyan kezeli az alkalmazás az API-hibákat. A Dev Proxy segítségével bármilyen OpenAI API-n szimulálhat hibákat a GenericRandomErrorPluginhasználatával. A RetryAfterPlugin használatával a Dev Proxy azt is ellenőrzi, hogy az alkalmazás megvárja-e a Retry-After fejlécben megadott időtartamot, mielőtt újra meghívja az API-t.
Borravaló
Töltse le ezt az előre beállítást a devproxy config get openai-throttlingparancs futtatásával a parancssorban.
A projektmappában hozzon létre egy új, devproxyrc.json nevű fájlt. Nyissa meg a fájlt egy kódszerkesztőben.
Hozzon létre egy új objektumot a pluginshivatkozó GenericRandomErrorPlugin tömbben. Adja meg a Dev Proxy számára az OpenAI API URL-címét a figyeléshez, és adjon hozzá egy hivatkozást a beépülőmodul konfigurációjához.
Fájl: devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "openAIAPI"
}
],
"urlsToWatch": [
"https://api.openai.com/*"
]
}
Adja hozzá a RetryAfterPlugin elemet, és hozza létre a beépülő modul konfigurációs objektumát, hogy megadja a GenericRandomErrorPlugin számára a hibaválaszok helyét és a szándékosan meghiúsítandó kérelmek százalékos arányát.
Fájl: devproxyrc.json (teljes konfiguráció)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "RetryAfterPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
},
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "openAIAPI"
}
],
"urlsToWatch": [
"https://api.openai.com/*"
],
"openAIAPI": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.schema.json",
"errorsFile": "openai-errors.json",
"rate": 90
}
}
Caution
Adja hozzá az RetryAfterPlugin elemet a GenericRandomErrorPlugin elé a konfigurációs fájlban. Ha ezt követően adja hozzá, a GenericRandomErrorPlugin elutasítja a kérést, mielőtt az RetryAfterPlugin ellenőrizni tudja.
Ugyanabban a mappában hozza létre a openai-errors.json fájlt. Ez a fájl tartalmazza azokat a hibaválaszokat, amelyek közül a Dev Proxy választ, amikor egy kérés meghiúsul. Ezek megfelelnek az OpenAI API által visszaadott hibáknak:
| Állapot | error.code |
Amit szimulál |
|---|---|---|
| 429 | rate_limit_exceeded |
Az alkalmazás elérte a percenkénti tokenek (TPM) vagy a percenkénti kérelmek (RPM) korlátját. |
| 429 | slow_down |
Az alkalmazás kéréseinek aránya túl gyorsan nőtt. |
| 429 | credit_balance_exhausted |
A szervezet nem rendelkezik előre kifizetett jóváírásokkal. Az újrapróbálkozás nem segít. |
| 503 | server_is_overloaded |
A modell átmenetileg túlterhelt. |
Ezekről a hibákról további információt az OpenAI dokumentáció Hibakódok című részében talál.
Fájl: openai-errors.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.errorsfile.schema.json",
"errors": [
{
"request": {
"url": "https://api.openai.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"error": {
"message": "Rate limit reached for gpt-4.1 in organization org-K7hT684bLccDbBRnySOoK9f2 on tokens per min (TPM): Limit 30000, Used 30000, Requested 1200. Please try again in 2.4s. Visit https://platform.openai.com/settings/organization/limits to learn more.",
"type": "tokens",
"param": null,
"code": "rate_limit_exceeded"
}
}
},
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"error": {
"message": "Rate limit reached for gpt-4.1 in organization org-K7hT684bLccDbBRnySOoK9f2 on requests per min (RPM): Limit 500, Used 500, Requested 1. Please try again in 120ms. Visit https://platform.openai.com/settings/organization/limits to learn more.",
"type": "requests",
"param": null,
"code": "rate_limit_exceeded"
}
}
},
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"error": {
"message": "Your request rate increased too quickly. Reduce your request rate and increase it gradually.",
"type": "rate_limit_error",
"param": null,
"code": "slow_down"
}
}
},
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
}
],
"body": {
"error": {
"message": "Your organization has no prepaid credits remaining. Add credits to continue using the API. For more information on this error, read the docs: https://developers.openai.com/api/docs/guides/error-codes.",
"type": "insufficient_quota",
"param": null,
"code": "credit_balance_exhausted"
}
}
},
{
"statusCode": 503,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
}
],
"body": {
"error": {
"message": "The requested model is temporarily overloaded. Please try again later.",
"type": "service_unavailable_error",
"param": null,
"code": "server_is_overloaded"
}
}
}
]
}
]
}
Az @dynamic érték beállítja a Retry-After fejlécet, és jelzi a(z) RetryAfterPlugin számára, hogy kövesse, mennyi ideig kell várnia az alkalmazásnak. A credit_balance_exhausted válasz nem tartalmaz Retry-After fejlécet, mert a várakozás nem oldja meg.
Indítsa el a Dev Proxy-t a projektmappájában:
devproxy
Amikor az alkalmazás OpenAI API-kat hív meg, a Dev Proxy a kérések 90%-át meghiúsítja a openai-errors.json fájlból származó véletlenszerű hibával. Ha az alkalmazás a fejlécben lévő Retry-After időpont előtt ismét meghívja az API-t, a RetryAfterPlugin jelzi ezt, és korlátozza a kérést.
Ellenőrizze az alkalmazását:
- A
slow_downvagyrate_limit_exceededhiba utániRetry-Afterideig vár. - Ahelyett, hogy újrapróbálkozna, egy
credit_balance_exhaustedhiba után leállítja az API meghívását. - Egy
server_is_overloadedhiba után késleltetéssel újrapróbálkozik, és az újrapróbálkozási lehetőségek kimerülésekor egy egyértelmű üzenetet jelenít meg.
További információ a GenericRandomErrorPluginről.