Limitar o uso de token de API de modelo de linguagem grande

APLICA-SE A: Developer | Básico | Básico v2 | Padrão | Padrão v2 | Prémio | Premium v2

A llm-token-limit política impede picos de uso de API de modelo de linguagem grande (LLM) por chave, limitando o consumo de tokens de modelo de idioma a uma taxa especificada (número por minuto), uma cota durante um período especificado ou ambos. Quando um limite de taxa de token especificado é excedido, o chamador recebe um código de status de 429 Too Many Requests resposta. Quando uma cota especificada é excedida, o chamador recebe um código de status de 403 Forbidden resposta.

Nota

Defina os elementos da política e os elementos filho na ordem fornecida na declaração de política. Saiba mais sobre como definir ou editar políticas de Gerenciamento de API.

APIs de modelos suportadas

Esta política funciona com APIs LLM adicionadas à Gestão de APIs que cumprem um dos seguintes esquemas de API:

  • API de Conclusão ou Respostas do Chat OpenAI
  • Anthropic Messages API (atualmente suportada nos níveis de API Management v2)

Declaração de política

<llm-token-limit counter-key="key value"
        tokens-per-minute="number"
        token-quota="number"
        token-quota-period="Hourly | Daily | Weekly | Monthly | Yearly"
        estimate-prompt-tokens="true | false"    
        retry-after-header-name="custom header name, replaces default 'Retry-After'" 
        retry-after-variable-name="policy expression variable name"
        remaining-quota-tokens-header-name="header name"  
        remaining-quota-tokens-variable-name="policy expression variable name"
        remaining-tokens-header-name="header name"  
        remaining-tokens-variable-name="policy expression variable name"
        tokens-consumed-header-name="header name"
        tokens-consumed-variable-name="policy expression variable name" />

Atributos

Atributo Descrição Necessário Predefinição
contra-chave A chave a ser usada para a política de limite de token. Para cada valor de chave, um único contador é usado para todos os escopos nos quais a política está configurada. São permitidas expressões de política. Sim N/A
tokens por minuto O número máximo de tokens consumidos por prompt e conclusão por minuto. Deve ser especificado um limite de taxa (tokens-per-minute), um contingente (token-quota sobre um token-quota-period), ou ambos. N/A
cota de token O número máximo de tokens permitido durante o intervalo de tempo especificado no token-quota-period. São permitidas expressões de política. Deve ser especificado um limite de taxa (tokens-per-minute), um contingente (token-quota sobre um token-quota-period), ou ambos. N/A
período de cota de token O comprimento da janela fixa após a qual as token-quota redefinições. O valor deve ser um dos seguintes: ,, , , HourlyDaily. WeeklyMonthlyYearly A hora de início de um período de cota é calculada como o carimbo de data/hora UTC truncado para a unidade (hora, dia, etc.) usada para o período. São permitidas expressões de política. Deve ser especificado um limite de taxa (tokens-per-minute), um contingente (token-quota sobre um token-quota-period), ou ambos. N/A
estimativa-prompt-tokens Valor booleano que determina se deve estimar o número de tokens necessários para um prompt:
- true: estimar os tokens de prompt antecipadamente com base no esquema de prompt na API.
- false: não estimar os tokens de prompt; Use o uso real de tokens da resposta do modelo.

Para o comportamento de contagem e estimação de tokens, veja Considerações sobre contagem e estimativa de tokens.
Sim N/A
retry-after-header-name O nome de um cabeçalho de resposta personalizado cujo valor é o intervalo de repetição recomendado em segundos após o especificado tokens-per-minute ou token-quota é excedido. Expressões de política não são permitidas. Não Retry-After
retry-after-variable-name O nome de uma variável que armazena o intervalo de repetição recomendado em segundos após o especificado tokens-per-minute ou token-quota é excedido. Expressões de política não são permitidas. Não N/A
remaining-quota-tokens-header-name O nome de um cabeçalho de resposta cujo valor após cada execução de política é o número estimado de tokens restantes correspondentes ao token-quota permitido para o token-quota-period. Expressões de política não são permitidas. Não N/A
remaining-quota-tokens-variable-name O nome de uma variável que, após cada execução de política, armazena o número estimado de tokens restantes correspondentes ao token-quota permitido para o token-quota-period. Expressões de política não são permitidas. Não N/A
remaining-tokens-header-name O nome de um cabeçalho de resposta cujo valor após cada execução de política é o número de tokens restantes correspondentes ao tokens-per-minute permitido para o intervalo de tempo. Expressões de política não são permitidas. Não N/A
remaining-tokens-variable-name O nome de uma variável que, após cada execução de política, armazena o número de tokens restantes correspondentes ao tokens-per-minute permitido para o intervalo de tempo. Expressões de política não são permitidas. Não N/A
tokens-consumed-header-name O nome de um cabeçalho de resposta cujo valor é o número de tokens consumidos pelo prompt e pela conclusão. O cabeçalho é adicionado à resposta somente depois que a resposta é recebida do back-end. Expressões de política não são permitidas. Não N/A
tokens-consumed-variable-name O nome de uma variável inicializado na contagem estimada de tokens de prompt na backend secção (ou zero se estimate-prompt-tokens for false), atualizado com a contagem real reportada na outbound secção. Não N/A

Utilização

Notas de utilização

  • Essa política pode ser usada várias vezes por definição de política.
  • Esta política pode ser configurada opcionalmente ao adicionar uma API LLM através do portal.
  • O valor de remaining-quota-tokens-variable-name ou remaining-quota-tokens-header-name é uma estimativa e pode ser maior do que o esperado com base no consumo real de tokens. Para mais informações, consulte Considerações sobre contagem de tokens e estimativa.
  • O Gerenciamento de API usa um único contador para cada counter-key valor especificado na política. O contador é atualizado em todos os escopos nos quais a política é configurada com esse valor de chave. Se desejar configurar contadores separados em escopos diferentes (por exemplo, uma API ou produto específico), especifique valores de chave diferentes nos escopos diferentes. Por exemplo, acrescente uma cadeia de caracteres que identifique o escopo ao valor de uma expressão.
  • Os níveis v2 utilizam um algoritmo de balde de token para limitação de taxa, que difere do algoritmo de janela deslizante nos níveis clássicos. Devido a esta diferença de implementação, quando configuras limites de tokens nos níveis v2 em múltiplos escopos usando o mesmo counter-key, certifica-te de que o tokens-per-minute valor é consistente em todas as instâncias de políticas. Valores inconsistentes podem causar comportamentos imprevisíveis. Para mais informações, veja Redução avançada de pedidos com API Management do Azure
  • Essa política rastreia o uso do token independentemente em cada gateway em que ele é aplicado, incluindo gateways de espaço de trabalho e gateways regionais em uma implantação de várias regiões. Ele não agrega contagens de token em toda a instância.

Considerações para a contagem de tokens e estimativa

A política monitoriza e aplica os limites dos tokens usando dados reais de utilização dos tokens devolvidos pelo endpoint do LLM. Pode, opcionalmente, ativar a estimativa de tokens de prompt para reduzir pedidos desnecessários no backend. Aplicam-se as seguintes considerações.

  • Tipos de tokens: Atualmente, a política conta apenas os tokens de prompt e de conclusão.
  • Sem estimação prompt do token (estimate-prompt-tokens="false"): A política utiliza valores reais de utilização do token da usage secção da resposta da API do LLM. Os prompts podem ser enviados para o backend mesmo quando o limite é ultrapassado; isto é detetado pela resposta, após o que os pedidos subsequentes são bloqueados até que o limite seja reiniciado.
  • Com estimativa de prompt token (estimate-prompt-tokens="true"): A política estima os prompt tokens do esquema de prompt na definição da API antes de enviar o pedido. Isto pode reduzir pedidos de backend desnecessários quando o limite já foi ultrapassado, mas pode reduzir o desempenho.
  • Streaming: Quando o streaming está ativado no pedido API (stream: true), os tokens de prompt são sempre estimados independentemente da estimate-prompt-tokens definição. Os tokens de conclusão também são estimados quando as respostas são transmitidas.
  • Entrada de imagem: Para modelos que aceitam entrada de imagem, os tokens de imagem são geralmente contabilizados pelo LLM backend e incluídos nos cálculos de limites e quotas. No entanto, quando o streaming está ativado ou estimate-prompt-tokens definido para true, a política superestima cada imagem como um máximo de 1200 tokens.
  • Concorrência: Como o número exato de tokens consumidos não pode ser determinado até que as respostas sejam recebidas do backend, pedidos simultâneos ou quase simultâneos podem temporariamente exceder o limite de tokens configurado. Uma vez processadas as respostas e ultrapassado o limite, os pedidos subsequentes são bloqueados até que o limite seja reiniciado.
  • Precisão da quota restante: A quota estimada restante de tokens devolvida ou remaining-quota-tokens-variable-nameremaining-quota-tokens-header-name pode ser maior do que o esperado com base no consumo real de tokens, tornando-se mais precisa à medida que a quota se aproxima.

Exemplos

Limite de taxa de token

No exemplo a seguir, o limite de taxa de token de 5000 por minuto é digitado pelo endereço IP do chamador. A política não estima o número de tokens necessários para um prompt. Após cada execução de política, os tokens restantes permitidos para esse endereço IP do chamador no período de tempo são armazenados na variável remainingTokens.

<policies>
    <inbound>
        <base />
        <llm-token-limit
            counter-key="@(context.Request.IpAddress)"
            tokens-per-minute="5000" estimate-prompt-tokens="false" remaining-tokens-variable-name="remainingTokens" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Cota de token

No exemplo a seguir, a cota de token de 10000 é inserida pela ID da assinatura e redefinida mensalmente. Após cada execução de política, o número de tokens restantes permitidos para essa ID de assinatura no período de tempo é armazenado na variável remainingQuotaTokens.

<policies>
    <inbound>
        <base />
        <llm-token-limit
            counter-key="@(context.Subscription.Id)"
            token-quota="100000" token-quota-period="Monthly" remaining-quota-tokens-variable-name="remainingQuotaTokens" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Para obter mais informações sobre como trabalhar com políticas, consulte: