Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Överblick
Mål: Testa OpenAI API-felhantering
Tid: 10 minuter
Plugin-program:GenericRandomErrorPlugin, RetryAfterPlugin
Krav:Konfigurera Dev Proxy
När du använder OpenAI-API:er i din app bör du testa hur appen hanterar API-fel. Med Dev Proxy kan du simulera fel på alla OpenAI-API:er med hjälp av GenericRandomErrorPlugin. Med RetryAfterPlugin kontrollerar Dev Proxy också att appen väntar den tid som anges i rubriken Retry-After innan den anropar API:et igen.
Tips
Ladda ned den här förinställningen genom att köra följande kommando i kommandotolken devproxy config get openai-throttling.
Skapa en ny fil med namnet devproxyrc.jsoni projektmappen. Öppna filen i en kodredigerare.
Skapa ett nytt objekt i matrisen plugins som refererar till GenericRandomErrorPlugin. Definiera URL:en för OpenAI API för Dev Proxy för att övervaka och lägga till en referens till plugin-konfigurationen.
Fil: 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/*"
]
}
RetryAfterPlugin Lägg till och skapa konfigurationsobjektet för plugin-programmet för att förse GenericRandomErrorPlugin med platsen för felsvaren och procentandelen begäranden som ska misslyckas.
Fil: devproxyrc.json (fullständig konfiguration)
{
"$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
}
}
Försiktighet
Lägg till RetryAfterPlugin före GenericRandomErrorPlugin i din konfigurationsfil. Om du lägger till den efter gör GenericRandomErrorPlugin att begäran misslyckas innan RetryAfterPlugin kan kontrollera den.
Skapa filen openai-errors.json i samma mapp. Den här filen innehåller de felsvar som Dev Proxy väljer mellan när Dev Proxy misslyckas med en begäran. De motsvarar de fel som OpenAI API returnerar:
| Status | error.code |
Vad den simulerar |
|---|---|---|
| 429 | rate_limit_exceeded |
Appen har nått sin gräns för token per minut (TPM) eller begäranden per minut (RPM). |
| 429 | slow_down |
Appens förfrågningsfrekvens ökade för snabbt. |
| 429 | credit_balance_exhausted |
Din organisation har inga förbetalda krediter kvar. Det hjälper inte att försöka igen. |
| 503 | server_is_overloaded |
Modellen är tillfälligt överbelastad. |
Mer information om dessa fel finns i Felkoder i OpenAI-dokumentationen.
Fil: 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"
}
}
}
]
}
]
}
Värdet @dynamic anger rubriken Retry-After och instruerar RetryAfterPlugin att spåra hur länge appen måste vänta. Svaret credit_balance_exhausted har ingen Retry-After-rubrik, eftersom det inte åtgärdas genom att vänta.
Starta Dev Proxy i projektmappen:
devproxy
När appen anropar OpenAI-API:er misslyckas Dev Proxy med 90 % av begärandena med ett slumpmässigt fel från filen openai-errors.json. Om din app anropar API:et igen före tiden i rubriken Retry-After, rapporterar RetryAfterPlugin detta och begränsar begäran.
Kontrollera att din app:
- Väntar på
Retry-Aftertiden efter ettrate_limit_exceededellerslow_downfel. - Slutar anropa API:et efter ett
credit_balance_exhaustedfel i stället för att försöka igen. - Försöker igen med en fördröjning efter ett
server_is_overloadedfel och visar ett tydligt meddelande när återförsöken tar slut.
Läs mer om GenericRandomErrorPlugin.