Simulace chyb z rozhraní OpenAI API

Na první pohled
Cílem: Testování zpracování chyb rozhraní OpenAI API
Čas: 10 minut
Pluginy:GenericRandomErrorPlugin, RetryAfterPlugin
Požadavky:Nastavení dev proxy serveru

Když ve své aplikaci používáte rozhraní API OpenAI, měli byste otestovat, jak aplikace zpracovává chyby rozhraní API. Dev Proxy umožňuje simulovat chyby v libovolném rozhraní OpenAI API pomocí GenericRandomErrorPlugin. S RetryAfterPlugin Dev Proxy také zkontroluje, že aplikace čeká po dobu uvedenou v hlavičce Retry-After, než znovu zavolá rozhraní API.

Spropitné

Tuto předvolbu stáhněte spuštěním v příkazovém řádku devproxy config get openai-throttling.

Ve složce projektu vytvořte nový soubor s názvem devproxyrc.json. Otevřete soubor v editoru kódu.

Vytvořte nový objekt v poli plugins odkazující na GenericRandomErrorPlugin. Definujte adresu URL rozhraní OPENAI API, kterou má Dev Proxy monitorovat, a přidejte odkaz na konfiguraci modulu plug-in.

Soubor: 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 Přidejte a vytvořte objekt konfigurace modulu plug-in, který poskytne GenericRandomErrorPlugin umístění odpovědí na chyby a procento požadavků, které mají selhat.

Soubor: devproxyrc.json (úplná konfigurace)

{
  "$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

Přidejte RetryAfterPlugin před GenericRandomErrorPlugin ve vašem konfiguračním souboru. Pokud ji přidáte později, GenericRandomErrorPlugin žádost zamítne dříve, než ji RetryAfterPlugin bude moct zkontrolovat.

Ve stejné složce vytvořte soubor openai-errors.json. Tento soubor obsahuje chybové odpovědi, ze kterých Dev Proxy zvolí, když se mu nepodaří vyřídit požadavek. Odpovídají chybám, které vrací rozhraní OpenAI API:

Status error.code Co simuluje
429 rate_limit_exceeded Aplikace dosáhla limitu tokenů za minutu (TPM) nebo požadavků za minutu (RPM).
429 slow_down Míra požadavků vaší aplikace se příliš rychle zvýšila.
429 credit_balance_exhausted Vaší organizaci už nezbývají žádné předplacené kredity. Zkoušet to znovu nepomůže.
503 server_is_overloaded Model je dočasně přetížen.

Další informace o těchto chybách naleznete v části Kódy chyb v dokumentaci OpenAI.

Soubor: 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"
            }
          }
        }
      ]
    }
  ]
}

Hodnota @dynamic nastaví hlavičku Retry-After a řekne RetryAfterPlugin, aby sledoval, jak dlouho musí aplikace čekat. Odpověď credit_balance_exhausted nemá žádné Retry-After záhlaví, protože čekání ho neopraví.

Spusťte Dev Proxy ve složce svého projektu:

devproxy

Když vaše aplikace volá rozhraní OpenAI API, Dev Proxy selže u 90 % požadavků s náhodnou chybou ze souboru openai-errors.json. Pokud vaše aplikace znovu volá rozhraní API před časem v hlavičce Retry-After, RetryAfterPlugin to zaznamená a omezí požadavek.

Zkontrolujte, že vaše aplikace:

  • Počká po dobu Retry-After po chybě rate_limit_exceeded nebo slow_down.
  • Přestane volat rozhraní API po chybě credit_balance_exhausted místo opakování pokusu.
  • Po chybě opakuje pokus se zpožděním server_is_overloaded a zobrazí jasnou zprávu, když dojdou opakované pokusy.

Přečtěte si další informace o genericrandomErrorPlugin.

Viz také