Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir bakışta
Hedef: OpenAI API'sinde hata işlemeyi test etme
Süre: 10 dakika
Eklentiler:GenericRandomErrorPlugin, RetryAfterPlugin
Önkoşullar:Geliştirme Ara Sunucusunu Ayarlama
Uygulamanızda OpenAI API'lerini kullandığınızda uygulamanızın API hatalarını nasıl işlediğini test etmelisiniz. Dev Proxy, GenericRandomErrorPluginkullanarak herhangi bir OpenAI API'sinde hataların benzetimini yapmanızı sağlar.
RetryAfterPlugin ile Geliştirme Proxy'si uygulamanızın API'yi yeniden çağırmadan önce Retry-After başlığındaki süreyi beklediğini de denetler.
Bahşiş
devproxy config get openai-throttlingkomut isteminde komutunu çalıştırarak bu ön ayarı indirin.
Proje klasörünüzde devproxyrc.json adlı yeni bir dosya oluşturun. Dosyayı bir kod düzenleyicisinde açın.
plugins'i referans eden GenericRandomErrorPlugin dizisinde yeni bir nesne oluşturun. Dev Proxy'nin izlemesi ve eklenti yapılandırmasına başvuru eklemek için OpenAI API URL'sini tanımlayın.
Dosya: 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 öğesini ekleyin ve GenericRandomErrorPlugin öğesine hata yanıtlarının konumunu ve başarısız olacak isteklerin yüzdesini sağlamak için eklenti yapılandırma nesnesini oluşturun.
Dosya: devproxyrc.json (tam yapılandırma)
{
"$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
Yapılandırma dosyanıza RetryAfterPlugin'ı GenericRandomErrorPlugin'in önüne ekleyin. Daha sonra eklerseniz, GenericRandomErrorPlugin, RetryAfterPlugin denetleyemeden önce isteği başarısız kılar.
Aynı klasörde openai-errors.json dosyasını oluşturun. Bu dosya, Dev Proxy bir isteği başarısız kıldığında seçtiği hata yanıtlarını içerir. OpenAI API'nin döndürdüğü hatalarla eşleşiyorlar:
| Statü | error.code |
Neyi simüle eder? |
|---|---|---|
| 429 | rate_limit_exceeded |
Uygulamanız dakika başına belirteç (TPM) veya dakika başına istek (RPM) sınırına ulaştı. |
| 429 | slow_down |
Uygulamanızın istek oranı çok hızlı arttı. |
| 429 | credit_balance_exhausted |
Kuruluşunuzun ön ödemeli kredisi kalmadı. Yeniden denemek işe yaramaz. |
| 503 | server_is_overloaded |
Model geçici olarak aşırı yüklenmiştir. |
Bu hatalar hakkında daha fazla bilgi için OpenAI belgelerindeki Hata kodları bölümüne bakın.
Dosya: 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"
}
}
}
]
}
]
}
@dynamic değeri, Retry-After üst bilgisini ayarlar ve RetryAfterPlugin'ye uygulamanızın ne kadar beklemesi gerektiğini izlemesini söyler.
credit_balance_exhausted Yanıtta Retry-After başlığı yok, çünkü beklemek sorunu çözmüyor.
Proje klasörünüzde Dev Proxy'yi başlatın:
devproxy
Uygulamanız OpenAI API'lerini çağırdığında, Dev Proxy isteklerin %90'ını openai-errors.json dosyasından gelen rastgele bir hatayla başarısız kılar. Uygulamanız, Retry-After üst bilgisindeki süreden önce API'yi yeniden çağırırsa, RetryAfterPlugin bunu bildirir ve isteği kısıtlar.
Uygulamanızın şu şekilde olup olmadığını denetleyin:
-
Retry-Afterveyarate_limit_exceededhatasından sonrakislow_downsüreyi bekler. - Api'yi yeniden denemek yerine bir
credit_balance_exhaustedhatadan sonra çağırmayı durdurur. -
server_is_overloadedhatasından sonra gecikmeyle yeniden dener ve yeniden denemeler bittiğinde net bir ileti gösterir.
GenericRandomErrorPlugin hakkında daha fazla bilgi edinin.