Compartilhar via


Testar limites de token do modelo de linguagem

Ao criar aplicativos que usam modelos de linguagem, você deve testar como seu aplicativo lida com a limitação de taxa baseada em token. Dev Proxy permite simular limitações de token em APIs de modelo de linguagem usando o LanguageModelRateLimitingPlugin.

Simular limites de token em APIs de modelo de idioma

Para iniciar, habilite o LanguageModelRateLimitingPlugin no seu arquivo de configuração.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "LanguageModelRateLimitingPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "languageModelRateLimitingPlugin",
      "urlsToWatch": [
        "https://api.openai.com/*",
        "http://localhost:11434/*"
      ]
    }
  ]
}

Dica

O plug-in funciona com qualquer API compatível com OpenAI, incluindo modelos de linguagem local como o Ollama. Inclua todos os pontos de extremidade de API do modelo de linguagem que você quer testar na propriedade urlsToWatch.

Em seguida, configure o plug-in com os limites de token desejados e a janela de tempo.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "LanguageModelRateLimitingPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "languageModelRateLimitingPlugin",
      "urlsToWatch": [
        "https://api.openai.com/*",
        "http://localhost:11434/*"
      ]
    }
  ],
  "languageModelRateLimitingPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle"
  }
}

Essa configuração permite até 1.000 tokens de solicitação e 500 tokens de conclusão em uma janela de 60 segundos. Quando um dos limites é excedido, as solicitações subsequentes são limitadas com uma resposta padrão 429.

Inicie o Proxy de Desenvolvimento com o arquivo de configuração e use seu aplicativo para fazer solicitações de modelo de idioma. O plug-in controla o consumo de token de respostas reais da API e limita as solicitações quando os limites são excedidos.

Realizar testes com respostas de erro personalizadas

Você também pode configurar respostas personalizadas quando os limites de token são excedidos definindo whenLimitExceededCustom e criando um arquivo de resposta personalizado.

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 500,
    "completionTokenLimit": 300,
    "resetTimeWindowSeconds": 120,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "token-limit-response.json"
  }
}

Crie o arquivo de resposta personalizado com o formato de erro desejado:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugincustomresponse.schema.json",
  "statusCode": 429,
  "headers": [
    {
      "name": "retry-after",
      "value": "@dynamic"
    },
    {
      "name": "content-type",
      "value": "application/json"
    }
  ],
  "body": {
    "error": {
      "message": "Token quota exceeded. Your application has consumed all available tokens for this time period.",
      "type": "quota_exceeded",
      "code": "TOKENS_EXHAUSTED",
      "details": {
        "quota_type": "tokens",
        "retry_after_seconds": "@dynamic"
      }
    }
  }
}

O valor de @dynamic para os cabeçalhos retry-after calcula automaticamente os segundos restantes até a redefinição dos limites do token.

Testar cenários diferentes

Cenário 1: limites de token baixos para testes frequentes

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 100,
    "completionTokenLimit": 50,
    "resetTimeWindowSeconds": 30
  }
}

Utilize limites baixos com janelas de tempo curtas para acionar rapidamente a limitação durante o desenvolvimento e os testes.

Cenário 2: limites semelhante aos de produção

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 10000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 3600
  }
}

Para testar padrões de consumo de token realistas, configure limites semelhantes ao seu ambiente de produção.

Cenário 3: limites assimétricos

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 100,
    "resetTimeWindowSeconds": 300
  }
}

Cenários de teste em que os limites de token de conclusão são inferiores aos limites de prompt, simulando planos de API conscientes do custo.

Próxima etapa

Saiba mais sobre o LanguageModelRateLimitingPlugin.