OpenAI API'lerinden gelen hataların benzetimini yapın

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-After veya rate_limit_exceeded hatasından sonraki slow_down süreyi bekler.
  • Api'yi yeniden denemek yerine bir credit_balance_exhausted hatadan sonra çağırmayı durdurur.
  • server_is_overloaded hatasından sonra gecikmeyle yeniden dener ve yeniden denemeler bittiğinde net bir ileti gösterir.

GenericRandomErrorPlugin hakkında daha fazla bilgi edinin.

GenelRasgeleHataEklentisi

Ayrıca bakınız