Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In één oogopslag
Doel: Foutafhandeling van OpenAI-API testen
Tijd: 10 minuten
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Vereisten:Dev Proxy instellen
Wanneer u OpenAI-API's in uw app gebruikt, moet u testen hoe uw app API-fouten verwerkt. Met dev Proxy kunt u fouten in elke OpenAI-API simuleren met behulp van de GenericRandomErrorPlugin. Met de RetryAfterPlugin controleert Dev Proxy ook of uw app gedurende de tijd die is opgegeven in de Retry-After-header wacht voordat uw app de API opnieuw aanroept.
Tip
Download deze voorinstelling door in de opdrachtprompt devproxy config get openai-throttlinguit te voeren.
Maak in de projectmap een nieuw bestand met de naam devproxyrc.json. Open het bestand in een code-editor.
Maak een nieuw object in de plugins matrix waarnaar de GenericRandomErrorPluginverwijst. Definieer de OPENAI API-URL voor Dev Proxy om een verwijzing naar de configuratie van de invoegtoepassing te bewaken en toe te voegen.
Bestand: 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/*"
]
}
Voeg de RetryAfterPlugin toe en maak het configuratieobject van de invoegtoepassing om de GenericRandomErrorPlugin te voorzien van de locatie van de foutreacties en het percentage aanvragen dat moet mislukken.
Bestand: devproxyrc.json (volledige configuratie)
{
"$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
Voeg de RetryAfterPlugin toe vóór de GenericRandomErrorPlugin in uw configuratiebestand. Als u deze later toevoegt, zorgt GenericRandomErrorPlugin ervoor dat de aanvraag mislukt voordat RetryAfterPlugin deze kan controleren.
Maak in dezelfde map het openai-errors.json-bestand. Dit bestand bevat de foutreacties waaruit Dev Proxy kiest wanneer Dev Proxy een aanvraag niet kan verwerken. Ze komen overeen met de fouten die de OpenAI-API retourneert:
| Status | error.code |
Wat het simuleert |
|---|---|---|
| 429 | rate_limit_exceeded |
Uw app heeft de limiet voor tokens per minuut (TPM) of aanvragen per minuut (RPM) bereikt. |
| 429 | slow_down |
De aanvraagsnelheid van uw app is te snel toegenomen. |
| 429 | credit_balance_exhausted |
Uw organisatie heeft geen vooruitbetaald tegoed meer. Opnieuw proberen helpt niet. |
| 503 | server_is_overloaded |
Het model is tijdelijk overbelast. |
Zie Foutcodes in de OpenAI-documentatie voor meer informatie over deze fouten.
Bestand: 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"
}
}
}
]
}
]
}
De waarde @dynamic stelt de Retry-After-koptekst in en geeft RetryAfterPlugin aan hoe lang uw app moet wachten. Het credit_balance_exhausted antwoord heeft geen Retry-After header, omdat wachten het niet oplost.
Start Dev Proxy in uw projectmap:
devproxy
Wanneer uw app OpenAI-API's aanroept, mislukt dev proxy 90% van de aanvragen met een willekeurige fout uit het openai-errors.json bestand. Als uw app de API opnieuw aanroept vóór de tijd in de Retry-After-header, meldt RetryAfterPlugin dit en beperkt het de aanvraag.
Controleer of uw app:
- Wacht op de
Retry-Aftertijd na eenrate_limit_exceeded- ofslow_down-fout. - Stopt met het aanroepen van de API na een
credit_balance_exhaustedfout, in plaats van het opnieuw te proberen. - Probeert opnieuw met een vertraging na een
server_is_overloadedfout en er wordt een duidelijk bericht weergegeven wanneer er geen nieuwe pogingen meer over zijn.
Meer informatie over genericRandomErrorPlugin.