Partilhar via


LanguageModelRateLimitingPlugin

Simula a limitação de taxa baseada em tokens para APIs de modelo de linguagem rastreando o consumo de token de prompt e conclusão dentro de janelas de tempo configuráveis.

Captura de tela de um prompt de comando com o Proxy de Desenvolvimento simulando uma taxa de modelo de linguagem limitando a resposta para uma solicitação de API LLM.

Exemplo de configuração

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.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/v2.0.0/languagemodelratelimitingplugin.schema.json",
    "promptTokenLimit": 5000,
    "completionTokenLimit": 5000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Throttle",
    "headerRetryAfter": "retry-after"
  }
}

Propriedades de configuração

Property Description Default
promptTokenLimit Número máximo de tokens de prompt permitido dentro da janela de tempo. 5000
completionTokenLimit Número máximo de tokens de conclusão permitidos dentro da janela de tempo. 5000
resetTimeWindowSeconds Janela de tempo em segundos após a qual os limites de token são redefinidos. 60
whenLimitExceeded Comportamento de resposta quando os limites de token são excedidos. Pode ser Throttle ou Custom. Throttle
headerRetryAfter Nome do cabeçalho HTTP para incluir informações de repetição posterior. retry-after
customResponseFile Caminho para o arquivo que contém a resposta personalizada quando whenLimitExceeded definido como Custom. token-limit-response.json

Configuração de resposta personalizada

Quando whenLimitExceeded estiver definido como Custom, você poderá definir uma resposta personalizada em um arquivo JSON separado:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/languagemodelratelimitingplugin.customresponsefile.schema.json",
  "statusCode": 429,
  "headers": [
    {
      "name": "retry-after",
      "value": "@dynamic"
    },
    {
      "name": "content-type",
      "value": "application/json"
    }
  ],
  "body": {
    "error": {
      "message": "You have exceeded your token quota. Please wait before making additional requests.",
      "type": "insufficient_quota",
      "code": "token_quota_exceeded"
    }
  }
}

Propriedades de resposta personalizadas

Property Description
statusCode Código de status HTTP para retornar quando o limite de token for excedido.
headers Matriz de cabeçalhos HTTP a serem incluídos na resposta. Use @dynamic para repetir depois para calcular automaticamente os segundos até a redefinição.
body Objeto de corpo de resposta serializado para JSON.

Como funciona

O LanguageModelRateLimitingPlugin funciona por:

  1. Intercetando solicitações de API OpenAI: monitora solicitações POST para URLs configuradas que contêm corpos de solicitação compatíveis com OpenAI
  2. Rastreando o consumo de tokens: analisa respostas para extrair prompt_tokens e completion_tokens da seção de uso
  3. Aplicação de limites: Mantém os totais em funcionamento dos tokens consumidos dentro da janela temporal configurada
  4. Fornecendo respostas de limitação: quando os limites são excedidos, retorna respostas de limitação padrão ou respostas personalizadas

Tipos de solicitação suportados

O plugin suporta tanto a conclusão do OpenAI quanto as solicitações de conclusão do bate-papo:

  • Pedidos de conclusão: Pedidos com uma prompt propriedade
  • Pedidos de conclusão de chat: pedidos com uma messages propriedade

Rastreamento de tokens

O consumo de tokens é rastreado separadamente para:

  • Tokens de prompt: Tokens de entrada consumidos pelo pedido
  • Tokens de completão: Tokens de saída gerados pela resposta

Quando qualquer um dos limites é excedido, as solicitações subsequentes são limitadas até que a janela de tempo seja redefinida.

Comportamento da janela de tempo

  • Redefinição dos limites de token após a configuração resetTimeWindowSeconds
  • O temporizador de redefinição começa quando a primeira solicitação é processada
  • Quando uma janela de tempo expira, os contadores de token de prompt e conclusão são redefinidos para seus limites configurados

Resposta de limitação padrão

Quando whenLimitExceeded está definido como Throttle, o plugin retorna uma resposta de erro padrão compatível com OpenAI:

{
  "error": {
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "type": "insufficient_quota",
    "param": null,
    "code": "insufficient_quota"
  }
}

A resposta inclui:

  • Código de status HTTP: 429 Too Many Requests
  • retry-after cabeçalho com segundos até que os limites de token sejam redefinidos
  • Cabeçalhos CORS quando a solicitação original inclui um Origin cabeçalho

Casos de uso

O LanguageModelRateLimitingPlugin é útil para:

  • Testando a limitação de taxa baseada em token: simule como seu aplicativo se comporta quando os provedores de modelos de linguagem impõem cotas de token
  • Simulação de custos de desenvolvimento: entenda os padrões de consumo de tokens durante o desenvolvimento antes de atingir os limites reais da API
  • Testes de resiliência: Verifique se a sua aplicação lida corretamente com erros de limite de tokens e implementa a lógica de retentativa adequada
  • Teste de LLM local: teste cenários de limitação de token com modelos de idioma local (como Ollama) que não impõem seus próprios limites

Cenários de exemplo

Cenário 1: Limitação básica de token

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 300
  }
}

Essa configuração permite até 1.000 tokens de prompt e 500 tokens de conclusão em uma janela de 5 minutos.

Cenário 2: Respostas de erro personalizadas

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 1000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "custom-token-error.json"
  }
}

Essa configuração usa um arquivo de resposta personalizado para fornecer mensagens de erro especializadas quando os limites de token são excedidos.

Próximo passo