Partilhar via


Testar limites de tokens do modelo de linguagem

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

Simular limites de token em APIs de modelo de linguagem

Para começar, habilite o LanguageModelRateLimitingPlugin no 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/*"
      ]
    }
  ]
}

Sugestão

O plugin funciona com qualquer API compatível com OpenAI, incluindo modelos de idioma local como Ollama. Inclua todos os pontos de extremidade da API do modelo de idioma que pretende testar na propriedade urlsToWatch.

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

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

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

Inicie o Dev Proxy com seu arquivo de configuração e use seu aplicativo para fazer solicitações de modelo de idioma. O plugin rastreia o consumo de token a partir de respostas reais da API e limita as solicitações quando os limites são excedidos.

Teste 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 @dynamic para cabeçalhos de retry-after calcula automaticamente quantos segundos faltam até que o limite de token seja redefinido.

Testar diferentes cenários

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

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

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

Cenário 2: Limites semelhantes aos da produção

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

Para testar padrões realistas de consumo de tokens, 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 dos custos.

Próximo passo

Saiba mais sobre o LanguageModelRateLimitingPlugin.