Esta página aplica-se ao Apigee, mas não ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
Vista geral
A política LLMTokenQuota foi concebida para gerir e controlar o consumo de tokens para cargas de trabalho de IA/LLM. Uma vez que as interações com grandes modelos de linguagem (LLMs) se baseiam em tokens, a gestão eficaz é crucial para o controlo de custos, a otimização do desempenho e a estabilidade da plataforma.
Uma quota é uma atribuição de tokens de MDIs (entrada ou saída) que um proxy de API tem autorização para consumir durante um período, como um minuto, uma hora, um dia, uma semana ou um mês. A política LLMTokenQuota mantém contadores que registam o número de tokens consumidos pelo proxy da API. Esta capacidade permite que os fornecedores de APIs apliquem limites ao consumo de tokens por apps durante um intervalo de tempo.
Esta política usa os elementos <LLMTokenUsageSource> e <LLMModelSource> para extrair a contagem de tokens da resposta do MDG e o nome do modelo do pedido ou da resposta, o que permite uma aplicação precisa da quota em tempo real.
Esta política é uma política extensível e a utilização desta política pode ter implicações de custo ou utilização, consoante a sua licença do Apigee. Para ver informações sobre os tipos de políticas e as implicações de utilização, consulte Tipos de políticas.
Como funciona a aplicação da LLMTokenQuota
Segue-se uma descrição da funcionalidade da política LLMTokenQuota:
-
Contagem de tokens (
<CountOnly>): A política LLMTokenQuota mantém contadores que monitorizam o número de tokens consumidos pelas respostas do MDG que passam pelo proxy da API. -
Aplicação de limites (
<EnforceOnly>): esta capacidade permite aos fornecedores de APIs definir limites rigorosos para o número de tokens consumidos pelas aplicações durante um intervalo definido. Por exemplo, pode limitar as aplicações a 1000 tokens por minuto ou 10 000 000 de tokens por mês. - Exceder a quota: quando um proxy de API atinge o limite de quota de tokens definido, o Apigee rejeita os pedidos subsequentes que consomem tokens. É devolvida uma mensagem de erro até que o contador LLMTokenQuota seja reposto automaticamente no final do intervalo de tempo especificado. Por exemplo, se for definida uma quota de 10 000 tokens por mês, a limitação de tokens começa assim que o 10 000.º token for contabilizado, independentemente do momento do mês em que esse limite for atingido.
Como o LLMTokenQuota funciona com produtos de API
A descrição seguinte explica como a política LLMTokenQuota funciona com os produtos de API:
-
Aplique a política
VerifyAPIKeyouVerifyAccessTokenjuntamente com a política de aplicaçãoLLMTokenQuotano pedido do proxy de API (o proxy ou o destino não são importantes). -
Aplique a política de contagem
LLMTokenQuotaem resposta ao proxy da API (o proxy ou o destino não são importantes). - A política VerifyAPIKey ou VerifyAccessToken corresponde à chave ou ao token com o produto da API, o conjunto de operações, o programador e a app. Expõe as variáveis de fluxo para a quota de MDIs para todos os modelos dos conjuntos de operações de MDIs correspondentes.
- Na política de aplicação de quotas, extraímos o modelo de acordo com o modelo de mensagem fornecido.
- Em seguida, as variáveis de quota do MDG são associadas ao modelo. Se for encontrada uma correspondência, as referências são injetadas.
- Depois de as referências serem injetadas, esses valores são usados para realizar as operações de quota.
Como o LLMTokenQuota funciona com respostas SSE
Para fazer com que o LLMTokenQuota funcione com respostas SSE, adicione a política como parte do fluxo de eventos, conforme mostrado abaixo:
<EventFlow content-type="text/event-stream"> <Response> <Step> <Name>LLM_TOKEN_QUOTA_COUNT_POLICY_NAME</Name> </Step> </Response> </EventFlow>
Durante o processamento da stream de eventos, a contagem de tokens só é executada quando os metadados de utilização de tokens da resposta do MDG são encontrados no evento. Quando os metadados de utilização de tokens são descobertos, são extraídos e a política é executada. Para todos os outros eventos, a política resulta em NO-OP.
Tipos de políticas LLMTokenQuota
A política LLMTokenQuota suporta várias formas diferentes de iniciar e repor o contador de quotas. Pode definir qual usar com o atributo type no elemento <LLMTokenQuota>, como mostra o exemplo seguinte:
<LLMTokenQuota name="LLMTokenQuotaPolicy" type="calendar"> ... </LLMTokenQuota>
Os valores válidos de type incluem:
calendar: configura uma quota com base numa hora de início explícita. O contador LLMTokenQuota de cada app é atualizado com base nos valores<StartTime>,<Interval>e<TimeUnit>que definir.rollingwindow: configura uma quota que usa uma janela contínua para determinar a utilização da quota. Comrollingwindow, determina o tamanho da janela com os elementos<Interval>e<TimeUnit>; por exemplo, 1 dia. Quando chega um pedido, o Apigee analisa a hora exata do pedido (por exemplo, 17:01), conta o número de tokens consumidos entre esse momento e as 17:01 do dia anterior (1 dia) e determina se a quota foi excedida ou não durante esse período.flexi: configura uma quota que faz com que o contador comece quando a primeira mensagem de pedido é recebida de uma app e é reposta com base nos valores<Interval>e<TimeUnit>.
A tabela seguinte descreve quando a quota é reposta para cada tipo:
| Unidade de tempo | Tipo | ||
|---|---|---|---|
default (ou nulo) |
calendar |
flexi |
|
| minuto | Início do minuto seguinte | Um minuto depois de <StartTime> |
Um minuto após o primeiro pedido |
| hora | Início da próxima hora | Uma hora após <StartTime> |
Uma hora após o primeiro pedido |
| dia | Meia-noite GMT do dia atual | 24 horas após <StartTime> |
24 horas após o primeiro pedido |
| semana | Domingo à meia-noite GMT no final da semana | Uma semana após <StartTime> |
Uma semana após o primeiro pedido |
| mês | Meia-noite GMT do último dia do mês | Um mês (28 dias) após <StartTime> |
Um mês (28 dias) após o primeiro pedido |
Para type="calendar", tem de especificar o valor de
<StartTime>.
A tabela não descreve quando a contagem é reposta para o tipo rollingwindow.
Isto deve-se ao facto de as quotas de período contínuo funcionarem de forma ligeiramente diferente, com base num período de análise,
como uma hora ou um dia. Para o tipo rollingwindow, o contador nunca é reposto, mas é
recalculado em cada pedido. Quando chega um novo pedido, a política determina se a quota foi excedida no período anterior.
Por exemplo, define um período de duas horas que permite 1000 tokens. Um novo pedido é recebido às 16:45.A política calcula a contagem da quota para o período de duas horas anterior, o que significa o número de tokens consumidos desde as 14:45. Se o limite de quota não tiver sido excedido nesse período de duas horas, o pedido é permitido.
Um minuto depois, às 16:46, chega outro pedido. Agora, a política calcula a contagem de quotas desde as 14:46 para determinar se o limite foi excedido.
Compreender os contadores de quotas
Quando uma política LLMTokenQuota é executada num fluxo de proxy de API, um contador de quotas é incrementado. Quando o contador atinge o limite, não são permitidas mais chamadas API associadas a esse contador. Consoante a configuração que usa para o seu produto da API, a política LLMTokenQuota pode usar um único contador ou vários contadores independentes. É importante compreender os cenários em que são usados vários contadores e como se comportam.
Configurar definições de quota para produtos de API
Um produto de API pode especificar definições de quota ao
nível do produto
ou ao nível da operação individual,
ou ambos. Se o seu proxy de API estiver incluído num produto de API, pode configurar a política LLMTokenQuota para usar as definições de quota (contagem permitida, unidade de tempo e intervalo) definidas nesse produto. A forma mais fácil de o fazer
é através do elemento useQuotaConfigInAPIProduct.
Em alternativa, pode fazer referência a estas definições na política LLMTokenQuota através de referências de variáveis individuais.
Como são contabilizadas as quotas
Por predefinição, o Apigee mantém um contador de quota separado para cada operação definida num produto da API e são observadas as seguintes regras:
- Se uma operação tiver uma quota definida, as definições de quota da operação têm precedência sobre as definições de quota definidas ao nível do produto.
- Se uma operação não tiver uma quota definida, aplicam-se as definições de quota ao nível do produto.
- Se o produto API não incluir definições de quota, nem ao nível do produto nem da operação, aplicam-se as definições de quota para a contagem permitida, a unidade de tempo e o intervalo, conforme especificado na política LLMTokenQuota.
Em todos os casos, o Apigee mantém um contador de quotas separado para cada operação definida num produto de API. Todas as chamadas API que correspondam a uma operação incrementam o respetivo contador.
Configurar contadores ao nível do proxy da API
É possível configurar um produto de API para manter uma contagem de quotas ao nível do proxy de API. Neste caso, a configuração de quota especificada ao nível do produto API é partilhada por todas as operações que não têm a sua própria quota especificada. O efeito desta configuração é criar um contador ao nível do proxy de API para este produto de API.
Para alcançar esta configuração, tem de usar a
API Apigee/apiproducts
para criar ou atualizar o produto e definir o atributo
quotaCounterScope como PROXY no pedido de criação ou atualização.
Com a configuração PROXY, os pedidos que correspondam a qualquer uma das operações definidas para o produto da API
que estejam associados ao mesmo proxy e não tenham as suas próprias definições de quota, partilham
um contador de quota comum para esse proxy.
Na Figura 1, as operações 1 e 2 estão associadas ao Proxy1, e as operações 4 e 5 estão associadas ao Proxy3. Uma vez que quotaCounterScope=PROXY está definido no produto API, cada uma destas operações usa a definição de quota ao nível do produto API. As operações 1 e 2, associadas a Proxy1, usam um contador partilhado, e as operações 4 e 5, associadas a Proxy3, usam um contador partilhado separado.
A operação 3 tem a sua própria definição de configuração de quota e, por esse motivo, usa o seu próprio contador, independentemente do valor do atributo quotaCounterScope.
Figura 1: utilização da flag quotaCounterScope

Como são contabilizadas as quotas se não estiverem a ser usados produtos da API
Se não existir nenhum produto API associado a um proxy API, uma política LLMTokenQuota mantém um único contador, independentemente do número de vezes que o referencie num proxy API. O nome do contador de quotas baseia-se no atributo name da política.
Por exemplo, cria uma política LLMTokenQuota denominada MyLLMTokenQuotaPolicy com um limite de 5 tokens e coloca-a em vários fluxos (fluxo A, B e C) no proxy da API. Embora seja usada em vários fluxos, mantém um único contador que é atualizado por todas as instâncias da política. Partindo do princípio de que a resposta do GML usou 1 token de cada vez:
- O fluxo A é executado -> MyLLMTokenQuotaPolicy é executado e o respetivo contador = 1
- O fluxo B é executado -> MyLLMTokenQuotaPolicy é executado e o respetivo contador = 2
- O fluxo A é executado -> MyLLMTokenQuotaPolicy é executado e o respetivo contador = 3
- O fluxo C é executado -> MyLLMTokenQuotaPolicy é executado e o respetivo contador = 4
- O fluxo A é executado -> MyLLMTokenQuotaPolicy é executado e o respetivo contador = 5
O pedido seguinte a qualquer um dos três fluxos é rejeitado porque o contador de quotas atingiu o limite.
A utilização da mesma política LLMTokenQuota em mais do que um local num fluxo de proxy de API, que pode causar involuntariamente o esgotamento da LLMTokenQuota mais rapidamente do que o esperado, é um antipadrão descrito na Introdução aos antipadrões.
Em alternativa, pode definir várias políticas LLMTokenQuota no seu proxy de API e usar uma política diferente em cada fluxo. Cada política LLMTokenQuota mantém o seu próprio contador, com base no atributo name da política.
Criar vários contadores através da configuração de políticas
Pode usar os elementos
<Class> ou <Identifier> na política LLMTokenQuota para definir vários contadores únicos numa única política. Ao usar estes elementos, uma única política pode manter diferentes contadores com base na app que faz o pedido, no programador da app que faz o pedido, num ID de cliente ou noutro identificador de cliente, entre outros. Consulte os exemplos acima para ver mais informações sobre a utilização dos elementos <Class> ou <Identifier>.
Notação de tempo
Todas as horas de LLMTokenQuota estão definidas para o fuso horário do Tempo Universal Coordenado (UTC).
A notação de tempo LLMTokenQuota segue a notação de data padrão internacional definida na norma internacional ISO 8601.
As datas são definidas como ano, mês e dia, no seguinte formato: YYYY-MM-DD.
Por exemplo, 2025-02-04 representa 4 de fevereiro de 2025.
A hora do dia é definida como horas, minutos e segundos no seguinte formato:
hours:minutes:seconds. Por exemplo, 23:59:59 representa a hora um segundo antes da meia-noite.
Tenha em atenção que estão disponíveis duas notações, 00:00:00 e 24:00:00, para distinguir as duas meias-noites que podem ser associadas a uma data. Por conseguinte, 2025-02-04
24:00:00 é a mesma data e hora que 2025-02-05 00:00:00. Normalmente, a última é a notação preferida.
Obter definições de quota da configuração do produto API
Pode definir limites de quota nas configurações de produtos de API. Esses limites não aplicam automaticamente a quota. Em alternativa, pode fazer referência às definições de quota de produtos numa política LLMTokenQuota. Seguem-se algumas vantagens de definir uma quota no produto para que as políticas LLMTokenQuota possam ser usadas como referência:
- As políticas LLMTokenQuota podem usar uma definição uniforme em todos os proxies de API no produto API.
- Pode fazer alterações em tempo de execução à definição de quota num produto API e as políticas LLMTokenQuota que referenciam o valor têm automaticamente valores de quota atualizados.
Para mais informações sobre a utilização das definições de quota de um produto de API, consulte o exemplo de quota dinâmica.
Para informações sobre a configuração de produtos de API com limites de quota, consulte o artigo Gerir produtos de API.
Configurar contadores de quota partilhada
No caso simples, a política LLMTokenQuota incrementa o respetivo contador uma vez para cada token enviado para um proxy de API, durante o processamento do pedido inicial. Em alguns casos, pode querer verificar se a quota foi excedida no processamento inicial do pedido recebido, mas incrementar o contador apenas durante o processamento da resposta.
Os três elementos da política LLMTokenQuota (<SharedName>, <CountOnly> e <EnforceOnly>), quando usados em conjunto, permitem-lhe personalizar a política LLMTokenQuota para aplicar a quota aos pedidos recebidos, mas apenas incrementam o contador no fluxo de resposta.
Por exemplo, suponha que tem um proxy de API que usa um MDG como destino e quer aplicar uma quota de 100 000 tokens por hora. As respostas do MDG fornecem um valor totalTokenCount. Para o fazer, siga estes passos:
- Anexe uma política LLMTokenQuota ao fluxo de pedidos ProxyEndpoint com o elemento
<SharedName>definido com um valor de nome e o elemento<EnforceOnly>definido comotrue. - Use o elemento
<LLMTokenUsageSource>na política LLMTokenQuota para obter a contagem de tokens
Para ver um exemplo que mostra como usar contadores partilhados, consulte Contadores partilhados na secção Exemplos.
Amostras
Estes exemplos de código de políticas ilustram como iniciar e terminar períodos de quota:
Mais DynamicLLMTokenQuota
<LLMTokenQuota name="CheckLLMTokenQuota"> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.llmquota.interval">1</Interval> <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.llmquota.timeunit">hour</TimeUnit> <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.llmquota.limit"/> </LLMTokenQuota>
As quotas dinâmicas permitem-lhe configurar uma única política LLMTokenQuota que aplica diferentes definições de quota com base nas informações transmitidas à política LLMTokenQuota. Outro termo para as definições de LLMTokenQuota neste contexto é plano de serviço. O LLMTokenQuota dinâmico verifica o plano de serviço das apps e, em seguida, aplica essas definições.
Por exemplo, quando cria um produto API, pode definir opcionalmente o limite de quota permitido, a unidade de tempo e o intervalo. No entanto, a definição destes valores no produto API não impõe a respetiva utilização num proxy de API. Também tem de adicionar uma política LLMTokenQuota ao proxy da API que lê estes valores. Consulte o artigo Crie produtos da API para mais informações.
No exemplo acima, o proxy de API que contém a política LLMTokenQuota usa uma
política VerifyAPIKey, denominada verify-api-key, para validar a chave API transmitida
num pedido. A política LLMTokenQuota acede então às variáveis de fluxo da política VerifyAPIKey para ler os valores de quota definidos no produto API.
Outra opção é definir atributos personalizados em programadores ou apps individuais e, em seguida, ler esses valores na política LLMTokenQuota. Por exemplo, para definir valores de quota diferentes por programador, defina atributos personalizados no programador que contenham o limite, a unidade de tempo e o intervalo. Em seguida, faz referência a estes valores na política LLMTokenQuota, conforme mostrado abaixo:
<LLMTokenQuota name="DeveloperLLMTokenQuota"> <Identifier ref="verifyapikey.verify-api-key.client_id"/> <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> </LLMTokenQuota>
Este exemplo também usa as variáveis de fluxo VerifyAPIKey para fazer referência aos atributos personalizados definidos no programador.
Pode usar qualquer variável para definir os parâmetros da política LLMTokenQuota. Essas variáveis podem ser provenientes de:
- Variáveis de fluxo
- Propriedades no produto da API, na app ou no programador
- Um mapa de chaves-valores (KVM)
- Um cabeçalho, um parâmetro de consulta, um parâmetro de formulário e outros
Para cada proxy de API, pode adicionar uma política LLMTokenQuota que faça referência à mesma variável que todas as outras políticas LLMTokenQuota em todos os outros proxies, ou a política LLMTokenQuota pode fazer referência a variáveis únicas para essa política e proxy.
Hora de início
<LLMTokenQuota name="LLMTokenQuotaPolicy" type="calendar"> <StartTime>2025-02-18 10:30:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </LLMTokenQuota>
Para um LLMTokenQuota com type definido como calendar, tem de definir um valor <StartTime> explícito. O valor de tempo é a hora GMT e não a hora local. Se não fornecer um valor <StartTime> para uma política do tipo
calendar, o Apigee emite um erro.
O contador LLMTokenQuota para cada app é atualizado com base nos valores <StartTime>,
<Interval> e <TimeUnit>. Para este exemplo, a LLMTokenQuota começa a ser contabilizada às 10:30 GMT a 18 de fevereiro de 2025 e é atualizada a cada 5 horas. Por isso, a próxima atualização é às 15:30 GMT a 18 de fevereiro de 2025.
Contador de acesso
<LLMTokenQuota name="LLMTokenQuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </LLMTokenQuota>
Um proxy de API tem acesso às variáveis de fluxo definidas pela política LLMTokenQuota. Pode aceder a estas variáveis de fluxo no proxy da API para realizar o processamento condicional, monitorizar a política à medida que se aproxima do limite de quota, devolver o contador de quotas atual a uma app ou por outros motivos.
Uma vez que o acesso às variáveis de fluxo da política se baseia no atributo name, para a política acima denominada <LLMTokenQuota>, acede às respetivas variáveis de fluxo no formato:
ratelimit.LLMTokenQuotaPolicy.allowed.count: contagem permitida.ratelimit.LLMTokenQuotaPolicy.used.count: valor atual do contador.ratelimit.LLMTokenQuotaPolicy.expiry.time: hora UTC em que o contador é reposto.
Existem muitas outras variáveis de fluxo às quais pode aceder, conforme descrito abaixo.
Por exemplo, pode usar a seguinte política AssignMessage para devolver os valores das variáveis de fluxo LLMTokenQuota como cabeçalhos de resposta:
<AssignMessage continueOnError="false" enabled="true" name="ReturnQuotaVars"> <AssignTo createNew="false" type="response"/> <Set> <Headers> <Header name="LLMTokenQuotaLimit">{ratelimit.LLMTokenQuotaPolicy.allowed.count}</Header> <Header name="LLMTokenQuotaUsed">{ratelimit.LLMTokenQuotaPolicy.used.count}</Header> <Header name="LLMTokenQuotaResetUTC">{ratelimit.LLMTokenQuotaPolicy.expiry.time}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Contadores partilhados
O exemplo seguinte ilustra como configurar um contador partilhado para um proxy de API, em que o contador de quota também é incrementado quando a resposta de destino é o estado HTTP 200.
Uma vez que ambas as políticas LLMTokenQuota usam o mesmo valor <SharedName>, ambas as políticas LLMTokenQuota partilham o mesmo contador de quota. Para mais informações, consulte o artigo Configurar contadores de quota partilhada.
Exemplo de configuração de ProxyEndpoint:
<ProxyEndpoint name="default">
<PreFlow name="PreFlow">
<Request>
<Step>
<Name>LLMTokenQuota-Enforce-Only</Name>
</Step>
</Request>
<Response>
<Step>
<Name>LLMTokenQuota-Count-Only</Name>
</Step>
</Response>
<Response/>
</PreFlow>
<Flows/>
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
<HTTPProxyConnection>
<BasePath>/quota-shared-name</BasePath>
</HTTPProxyConnection>
<RouteRule name="noroute"/>
</ProxyEndpoint>Primeiro exemplo de política LLMTokenQuota:
<LLMTokenQuota name="LLMTokenQuota-Enforce-Only" type="rollingwindow"> <SharedName>common-counter</SharedName> <EnforceOnly>true</EnforceOnly> <Allow count="15000"/> <Interval>30</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> </LLMTokenQuota>
Segundo exemplo da política LLMTokenQuota:
<LLMTokenQuota name="LLMTokenQuota-Count-Only" type="rollingwindow"> <SharedName>common-counter</SharedName> <!-- Same name as the first LLMTokenQuota policy --> <CountOnly>true</CountOnly> <Allow count="15000"/> <Interval>30</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <LLMTokenUsageSource> {jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)} </LLMTokenUsageSource> <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource> </LLMTokenQuota>
Primeiro pedido
<LLMTokenQuota name="MyLLMTokenQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="10000"/> </LLMTokenQuota>
Use este exemplo de código para aplicar uma quota de 10 000 tokens por hora. A política repõe o contador de quotas no início de cada hora. Se o contador atingir a quota de 10 000 tokens antes do final da hora, as chamadas da API que consumam tokens além dos 10 000 são rejeitadas.
Por exemplo, se o contador começar em 2025-07-08 07:00:00, é reposto para 0 às 2025-07-08 08:00:00 (1 hora após a hora de início). Se o primeiro pedido for recebido às 2025-07-08 07:35:28 e a contagem de tokens atingir 10 000 antes das 2025-07-08 08:00:00, os pedidos que consumam tokens além dessa contagem são rejeitados até que a contagem seja reposta no início da hora.
A hora de reposição do contador baseia-se na combinação de <Interval> e
<TimeUnit>. Por exemplo, se definir <Interval> como 12 para um <TimeUnit> de horas, o contador é reposto a cada doze horas.
Pode definir <TimeUnit> para minuto, hora, dia, semana ou mês.
Pode fazer referência a esta política em vários locais no seu proxy de API. Por exemplo, pode colocá-la no Proxy PreFlow para que seja executada em todos os pedidos. Em alternativa, pode colocá-lo em vários fluxos no proxy de API. Se usar esta política em vários locais no proxy, mantém um único contador que é atualizado por todas as instâncias da política.
Em alternativa, pode definir várias políticas LLMTokenQuota no seu proxy de API. Cada política LLMTokenQuota
mantém o seu próprio contador, com base no atributo name da política.
Defina o identificador
<LLMTokenQuota name="LLMTokenQuotaPolicy" type="calendar"> <Identifier ref="request.header.clientId"/> <StartTime>2025-02-18 10:00:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </LLMTokenQuota>
Por predefinição, uma política LLMTokenQuota define um único contador para o proxy de API, independentemente da
origem de um pedido. Em alternativa, pode usar o atributo <Identifier>
com uma política LLMTokenQuota para manter contadores separados com base no valor do atributo
<Identifier>.
Por exemplo, use a etiqueta <Identifier> para definir contadores separados para
cada ID do cliente. Num pedido ao seu proxy, a app cliente passa então um cabeçalho que contém o clientID, conforme mostrado no exemplo acima.
Pode especificar qualquer variável de fluxo para o atributo <Identifier>. Por exemplo, pode especificar que um parâmetro de consulta denominado id contém o identificador exclusivo:
<Identifier ref="request.queryparam.id"/>
Se usar a política VerifyAPIKey para validar a chave da API ou as políticas OAuthV2
com tokens OAuth, pode usar informações na chave da API ou no token para definir contadores
individuais para a mesma política LLMTokenQuota. Por exemplo, o elemento
<Identifier> usa a variável de fluxo client_id de uma política
VerifyAPIKey denominada verify-api-key:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Cada valor client_id único define agora o seu próprio contador na política LLMTokenQuota.
Classe
<LLMTokenQuota name="LLMTokenQuotaPolicy">
<Interval>1</Interval>
<TimeUnit>day</TimeUnit>
<Allow>
<Class ref="request.header.developer_segment">
<Allow class="platinum" count="10000"/>
<Allow class="silver" count="1000" />
</Class>
</Allow>
</LLMTokenQuota>Pode definir limites de LLMTokenQuota dinamicamente através de uma contagem de LLMTokenQuota baseada em classes. Neste exemplo,
o limite da quota é determinado pelo valor do cabeçalho developer_segment
transmitido com cada pedido. Essa variável pode ter um valor de platinum
ou silver. Se o cabeçalho tiver um valor inválido, a política devolve um erro de violação de quota.
Os exemplos seguintes ilustram várias configurações da política de LLMTokenQuota.
Calcular tokens
Este exemplo mostra como calcular os tokens.
<LLMTokenQuota name="LTQ-Count-Only" type="rollingwindow"> <SharedName>common-counter</SharedName> <CountOnly>true</CountOnly> <Allow count="15000"/> <Interval>30</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <LLMTokenUsageSource> {jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)} </LLMTokenUsageSource> <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource> </LLMTokenQuota>
Contagem de variáveis dinâmicas de quota através do produto de API, do programador e da app
Este exemplo mostra como contabilizar variáveis dinâmicas de quota através do produto da API, do programador e da app.
<LLMTokenQuota name="LTQ-Count-Only" type="rollingwindow"> <SharedName>common-counter</SharedName> <CountOnly>true</CountOnly> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.interval">1</Interval> <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.timeunit">hour</TimeUnit> <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.limit"/> <Distributed>true</Distributed> <LLMTokenUsageSource> {jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)} </LLMTokenUsageSource> <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource> </LLMTokenQuota>
Aplique a quota sem o produto API
Este exemplo mostra como aplicar a quota sem um produto API.
<LLMTokenQuota name="Quota-Enforce-Only" type="rollingwindow"> <SharedName>common-counter</SharedName> <EnforceOnly>true</EnforceOnly> <Allow count="15000"/> <Interval>30</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> </LLMTokenQuota>
Aplique a quota com o produto de API, o programador e a app
Este exemplo mostra como aplicar a quota com o produto API, o programador e a app.
<LLMTokenQuota name="Quota-Enforce-Only" type="rollingwindow"> <SharedName>common-counter</SharedName> <EnforceOnly>true</EnforceOnly> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.interval">1</Interval> <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.timeunit">hour</TimeUnit> <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.limit"/> <Distributed>true</Distributed> </LLMTokenQuota>
Com stream SSE
Este exemplo mostra como usar LLMTokenQuota com um fluxo SSE.
Política de contagem de quotas de tokens:
<LLMTokenQuota name="LTQ-Count-Only" type="rollingwindow"> <SharedName>common-counter</SharedName> <CountOnly>true</CountOnly> <Allow count="15000"/> <Interval>30</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <LLMTokenUsageSource> {jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)} </LLMTokenUsageSource> <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource> </LLMTokenQuota>
Fluxo de eventos:
<EventFlow content-type="text/event-stream"> <Response> <Step> <Name>LTQ-Count-Only</Name> </Step> </Response> </EventFlow>
<LLMTokenQuota> elemento
Seguem-se os atributos e os elementos secundários de <LLMTokenQuota>. Tenha em atenção que algumas combinações de elementos são mutuamente exclusivas ou não são obrigatórias. Consulte os
exemplos para ver a utilização específica.
As variáveis verifyapikey.my-verify-key-policy.apiproduct.* abaixo estão disponíveis por predefinição quando é usada uma política VerifyAPIKey denominada my-verify-key-policy para verificar a chave da API da app no pedido. Os valores das variáveis provêm das definições de quota no produto da API
ao qual a chave está associada, conforme descrito em Obter
definições de quota da configuração do produto da API.
<LLMTokenQuota continueOnError="false" enabled="true" name="LTQ-TokenQuota-1" type="calendar"> <DisplayName>Quota 3</DisplayName> <LLMTokenUsageSource>{jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)}</LLMTokenUsageSource> <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource> <Allow count="UPPER_REQUEST_LIMIT" countRef="verifyapikey.my-verify-key-policy.apiproduct.developer.llmquota.limit"/> <Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="UPPER_LIMIT_DURING_PEAK"/> <Allow class="off_peak_time" count="UPPER_LIMIT_DURING_OFFPEAK"/> </Class> </Allow> <Interval ref="verifyapikey.my-verify-key-policy.apiproduct.developer.llmquota.interval"> 1 </Interval> <TimeUnit ref="verifyapikey.my-verify-key-policy.apiproduct.developer.llmquota.timeunit"> month </TimeUnit> <StartTime>2025-7-16 12:00:00</StartTime> <Distributed>false</Distributed> <Synchronous>false</Synchronous> <AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration> <Identifier/> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <UseQuotaConfigInAPIProduct> <DefaultConfig> <Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow> <Interval ref="verifyapikey.my-verify-key-policy.apiproduct.developer.llmquota.interval"> 1 </Interval> <TimeUnit ref="verifyapikey.my-verify-key-policy.apiproduct.developer.llmquota.timeunit"> month </TimeUnit> </DefaultConfig> </UseQuotaConfigInAPIProduct> <SharedName/> <EnforceOnly>true</EnforceOnly> </LLMTokenQuota>
Os seguintes atributos são específicos desta política:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
type |
Define o tipo de política LLMTokenQuota, que determina quando e como o contador de quotas verifica a utilização de quotas, bem como a forma como é reposto. Se não definir Os valores válidos incluem:
Para uma descrição completa de cada tipo, consulte os tipos de políticas LLMTokenQuota. |
N/A | Opcional |
A tabela seguinte descreve os atributos comuns a todos os elementos principais de políticas:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
name |
O nome interno da política. O valor do atributo Opcionalmente, use o elemento |
N/A | Obrigatória |
continueOnError |
Definido como Definido como |
falso | Opcional |
enabled |
Defina como Defina como |
verdadeiro | Opcional |
async |
Este atributo foi descontinuado. |
falso | Descontinuado |
Elemento <DisplayName>
Use em conjunto com o atributo name para etiquetar a política no editor de proxy da IU de gestão com um nome diferente em linguagem natural.
<DisplayName>Policy Display Name</DisplayName>
| Predefinição |
N/A Se omitir este elemento, é usado o valor do atributo |
|---|---|
| Presença | Opcional |
| Tipo | String |
<Allow>
Especifica o número total de tokens permitidos para o intervalo de tempo especificado. Se o contador da política atingir este valor limite, as chamadas API subsequentes são rejeitadas até o contador ser reposto.
Também pode conter um elemento <Class> que condicione o elemento <Allow>
com base numa variável de fluxo.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | Tipo inteiro ou complexo |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
<Class> |
Abaixo, são apresentadas três formas de definir o elemento <Allow>:
<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.limit"/>
Se especificar count e countRef, countRef
tem prioridade. Se countRef não for resolvido no tempo de execução, é usado o valor de
count.
Também pode especificar um elemento <Class> como filho de <Allow> para determinar a quantidade permitida da política com base numa variável de fluxo. O Apigee faz corresponder o valor da variável de fluxo ao atributo class do elemento <Allow>, conforme mostrado abaixo:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
A tabela seguinte indica os atributos de <Allow>:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
count |
Use para especificar uma contagem de tokens para a quota. Por exemplo, um valor do atributo |
2000 | Opcional |
countRef |
Use para especificar uma variável de fluxo que contenha a contagem de tokens para uma quota.
|
nenhum | Opcional |
<Class>
Permite condicionar o valor do elemento <Allow> com base no valor de uma variável de fluxo. Para
cada <Allow> etiqueta secundária diferente de <Class>,
a política mantém um contador diferente.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | Tipo complexo |
| Elemento principal |
<Allow>
|
| Elementos subordinados |
<Allow> (filho de <Class>) |
Para usar o elemento <Class>, especifique uma variável de fluxo através do atributo ref no elemento <Class>. Em seguida, o Apigee usa o valor da variável de fluxo <Allow> para selecionar um dos elementos secundários <Allow> para determinar a contagem permitida da política. O Apigee faz corresponder o valor da variável de fluxo ao atributo class
do elemento <Allow>, conforme mostrado abaixo:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
Neste exemplo, o contador de quota atual é determinado pelo valor do parâmetro de consulta time_variable transmitido com cada pedido. Essa variável pode ter um valor
de peak_time ou off_peak_time. Se o parâmetro de consulta contiver um valor inválido, a política devolve um erro de violação de quota.
A tabela seguinte indica os atributos de <Class>:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
ref |
Use para especificar uma variável de fluxo que contenha a classe de quota para uma quota. | nenhum | Obrigatória |
<Allow> (filho de <Class>)
Especifica o limite de um contador de quota
definido pelo elemento <Class>. Para cada
etiqueta de criança <Allow> diferente de <Class>, a política mantém um contador diferente.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | Tipo complexo |
| Elemento principal |
<Class>
|
| Elementos subordinados |
Nenhum |
Por exemplo:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
Neste exemplo, a política LLMTokenQuota mantém dois contadores de quotas denominados
peak_time e off_peak_time. A opção usada depende do parâmetro de consulta transmitido, conforme mostrado no exemplo <Class>.
A tabela seguinte indica os atributos de <Allow>:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
class |
Define o nome do contador de quota. | nenhum | Obrigatória |
count |
Especifica o limite da quota para o contador. | nenhum | Obrigatória |
<IgnoreUnresolvedVariables>
Determina se o processamento da política LLMTokenQuota é interrompido se o Apigee não conseguir resolver uma variável
referenciada pelo atributo ref na política.
| Valor predefinido | falso |
| Obrigatório? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Definido como true para ignorar as variáveis não resolvidas e continuar o processamento;
caso contrário, false. O valor predefinido é false.
Se <IgnoreUnresolvedVariables> estiver definido como true e a variável especificada num atributo ref não puder ser resolvida, o Apigee ignora o atributo ref. Se o elemento que contém o atributo ref
também contiver um valor, como <Allow count="2000"/>,
o Apigee usa esse valor. Se não existir nenhum valor, o Apigee trata o valor do elemento como nulo e substitui o valor predefinido, se existir, ou uma string vazia.
Se <IgnoreUnresolvedVariables> for false e a variável especificada num atributo ref não puder ser resolvida, o Apigee devolve um erro.
<Interval>
Especifica o número de períodos em que as quotas são calculadas.
| Valor predefinido | N/A |
| Obrigatório? | Obrigatória |
| Tipo | Número inteiro |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Use para especificar um número inteiro (por exemplo, 1, 2, 5, 60, etc.) que vai ser associado ao elemento <TimeUnit> que especificar (minuto, hora, dia, semana ou mês) para determinar um período durante o qual o Apigee calcula a utilização da quota.
Por exemplo, um intervalo de 24 com um <TimeUnit> de hour
significa que a quota vai ser calculada ao longo de 24 horas.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.interval">1</Interval>
A tabela seguinte indica os atributos de <Interval>:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
ref |
Use para especificar uma variável de fluxo que contenha o intervalo para uma quota. |
nenhum | Opcional |
<TimeUnit>
Especifica a unidade de tempo aplicável à quota.
| Valor predefinido | N/A |
| Obrigatório? | Obrigatória |
| Tipo | String |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Selecione entre minute, hour, day,
week, month ou year.
Por exemplo, um Interval de 24 com
um TimeUnit de hour significa que a quota vai ser
calculada ao longo de 24 horas.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.timeunit">month</TimeUnit>
A tabela seguinte indica os atributos de <TimeUnit>:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
ref |
Especifica uma variável de fluxo que contém a unidade de tempo para uma quota. ref
tem precedência sobre um valor de intervalo explícito. Se ref não for resolvido no momento da execução, é usado o valor do intervalo. |
nenhum | Opcional |
<StartTime>
Quando type está definido como calendar, especifica a data e a hora em que o contador de quota começa a contar, independentemente de terem sido recebidos pedidos de quaisquer apps.
| Valor predefinido | N/A |
| Obrigatório? | Opcional (obrigatório quando type está definido como calendar) |
| Tipo | String no formato de data e hora ISO 8601 |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Por exemplo:
<StartTime>2025-7-16 12:00:00</StartTime>
<Distributed>
Determina se o Apigee usa um ou mais nós para processar pedidos.
| Valor predefinido | falso |
| Obrigatório? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Defina como true para especificar que a política deve manter um contador central e sincronizá-lo continuamente em todos os nós. Os nós podem estar em várias zonas de disponibilidade e/ou regiões.
Se usar o valor predefinido de false, pode exceder a sua quota porque a contagem de cada nó não é partilhada:
<Distributed>false</Distributed>
Para garantir que os contadores são sincronizados e atualizados em cada pedido, defina <Distributed> e <Synchronous> como true:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
<Synchronous>
Determina se deve atualizar um contador de quotas distribuídas de forma síncrona.
| Valor predefinido | falso |
| Obrigatório? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Defina como true para atualizar um contador de quotas distribuídas de forma síncrona. Isto
significa que as atualizações dos contadores são feitas ao mesmo tempo que a quota é verificada num pedido
à API. Defina como true se for essencial que não permita chamadas API acima da quota.
Definido como false para atualizar o contador de quotas de forma assíncrona. Isto significa que é possível que algumas chamadas API que excedam a quota sejam processadas, consoante o momento em que o contador de quotas no repositório central é atualizado de forma assíncrona. No entanto, não vai enfrentar os potenciais impactos no desempenho associados às atualizações síncronas.
O intervalo de atualização assíncrono predefinido é de 10 segundos. Use o elemento
<AsynchronousConfiguration> para configurar este comportamento assíncrono.
<Synchronous>false</Synchronous>
<AsynchronousConfiguration>
Configura o intervalo de sincronização entre contadores de quotas distribuídos quando o elemento de configuração da política <Synchronous> não está presente ou está presente e definido como false. O Apigee ignora este elemento quando <Synchronous> está definido como
true.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | Tipo complexo |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
<SyncIntervalInSeconds><SyncMessageCount> |
Pode especificar o comportamento de sincronização através dos elementos secundários <SyncIntervalInSeconds> ou <SyncMessageCount>. Use um ou ambos os elementos. Por exemplo,
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
ou
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
- Quando apenas
<SyncIntervalInSeconds>está presente, a quota é sincronizada a cada N segundos, onde N é o valor especificado no elemento, independentemente do número de mensagens processadas. - Quando apenas
<SyncMessageCount>está presente, a quota é sincronizada a cada M mensagens, em que M é o valor especificado no elemento, ou a cada 10 segundos, consoante o que ocorrer primeiro. - Quando ambos os elementos estão presentes, a quota é sincronizada a cada M mensagens ou a cada N segundos, consoante o que ocorrer primeiro.
- Quando
<AsynchronousConfiguration>não está presente ou nenhum dos elementos secundários está presente, a quota é sincronizada a cada 10 segundos, independentemente do número de mensagens processadas.
<SyncIntervalInSeconds>
Substitui o comportamento predefinido em que as atualizações assíncronas são realizadas após um intervalo de 10 segundos.
| Valor predefinido | 10 segundos |
| Obrigatório? | Opcional |
| Tipo | Número inteiro |
| Elemento principal |
<AsynchronousConfiguration>
|
| Elementos subordinados |
Nenhum |
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
O intervalo de sincronização tem de ser >= 10 segundos, conforme descrito nos Limites.
<SyncMessageCount>
Especifica o número de pedidos a processar antes de sincronizar o contador de quota.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | Número inteiro |
| Elemento principal |
<AsynchronousConfiguration>
|
| Elementos subordinados |
Nenhum |
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Usando a configuração neste exemplo, em cada nó, a contagem de quotas é sincronizada após cada 5 pedidos ou a cada 10 segundos, consoante o que ocorrer primeiro.
<LLMTokenUsageSource>
Fornece a origem da utilização de tokens da resposta do GML. Tem de ser um modelo de mensagem que seja resolvido para um único valor de utilização de tokens. Se a política não fizer parte de um fluxo de eventos e não conseguir extrair a contagem de tokens da origem especificada, gera um erro de tempo de execução.policies.ratelimit.FailedToResolveTokenUsageCount
| Valor predefinido | {jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)} |
| Obrigatório? | Opcional |
| Tipo | String |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
O exemplo seguinte mostra como especificar a origem da utilização de tokens:
<LLMTokenUsageSource>{jsonPath('$.usageMetadata.candidatesTokenCount', response.content, true)}</LLMTokenUsageSource><LLMModelSource>
Indica a origem do nome do modelo a partir da resposta ou do pedido do MDI/CE. Tem de ser um modelo de mensagem que forneça um único valor de nome do modelo.
| Valor predefinido | |
| Obrigatório? | Opcional |
| Tipo | String |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
O exemplo seguinte mostra como especificar a origem do modelo a partir do pedido:
<LLMModelSource>{jsonPath('$.model', request.content, true)}</LLMModelSource><Identifier>
Configura a política para criar contadores únicos com base numa variável de fluxo.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | String |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Através do elemento Identifier, pode atribuir contagens de tokens a contentores distintos definidos pelo valor numa variável de fluxo. Por exemplo, pode usar a variável developer.id, que é preenchida após uma política VerifyAPIKey, para aplicar um limite de quota a todas as instâncias de todas as apps criadas por cada programador específico, ou pode usar a variável client_id para aplicar um limite de quota a cada app específica. A configuração para a última opção tem o seguinte aspeto:
<Identifier ref="client_id"/>
Pode referir-se a uma variável personalizada que pode definir com a política AssignMessage ou a política JavaScript, ou a uma variável que é definida implicitamente, como as definidas pela política VerifyAPIKey ou a política VerifyJWT. Para mais informações sobre as variáveis, consulte o artigo Usar variáveis de fluxo e, para ver uma lista de variáveis conhecidas definidas pelo Apigee, consulte a referência de variáveis de fluxo.
Se não usar este elemento, a política atribui todas as contagens de tokens a um único contador para a política LLMTokenQuota específica.
A tabela seguinte descreve os atributos de <Identifier>:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
ref |
Especifica uma variável de fluxo que identifica o contador a usar para o pedido. A variável pode referir-se a um cabeçalho HTTP, um parâmetro de consulta, um parâmetro de formulário ou um elemento do conteúdo da mensagem ou algum outro valor para identificar como atribuir contagens de tokens. O |
N/A | Opcional |
<UseQuotaConfigInAPIProduct>
Define as definições de quota para um produto API, como as unidades de tempo, o intervalo e o máximo permitido.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | Tipo complexo |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
<DefaultConfig> |
Se adicionar o elemento <UseQuotaConfigInAPIProduct> à política LLMTokenQuota, o Apigee ignora todos os elementos filhos <Allow>, <Interval> e <TimeUnit> de LLMTokenQuotaPolicy.
O elemento <UseQuotaConfigInAPIProduct> é simplesmente um contentor para as predefinições que
define através do elemento <DefaultConfig>, como mostra o exemplo seguinte:
<UseQuotaConfigInAPIProduct stepName="POLICY_NAME"> <DefaultConfig>...</DefaultConfig> </UseQuotaConfigInAPIProduct>
Pode usar o atributo stepName para fazer referência a uma política VerifyAPIKey
ou a uma operação de política ValidateToken da política OAuthv2 no fluxo.
A tabela seguinte descreve os atributos de <UseQuotaConfigInAPIProduct>:
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
stepName |
Identifica o nome da política de autenticação no fluxo. O destino pode ser uma política VerifyAPIKey ou uma política OAuthv2. | N/A | Obrigatória |
Para mais informações, consulte o seguinte:
<DefaultConfig>
Contém os valores predefinidos da quota de um produto API. Quando define um <DefaultConfig>,
todos os três elementos secundários são obrigatórios.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | Tipo complexo |
| Elemento principal |
<UseQuotaConfigInAPIProduct>
|
| Elementos subordinados |
<Allow><Interval><TimeUnit> |
É possível definir estes valores na operação do produto de API (com a IU ou a API Products API) e na política LLMTokenQuota. No entanto, se o fizer, as definições no produto API têm precedência e as definições na política LLMTokenQuota são ignoradas.
A sintaxe deste elemento é a seguinte:
<UseQuotaConfigInAPIProduct stepName="POLICY_NAME">
<DefaultConfig>
<Allow>allow_count</Allow>
<Interval>interval</Interval>
<TimeUnit>[minute|hour|day|week|month]</TimeUnit>
</DefaultConfig>
</UseQuotaConfigInAPIProduct>O exemplo seguinte especifica uma quota de 10 000 todas as semanas:
<DefaultConfig> <Allow>10000</Allow> <Interval>1</Interval> <TimeUnit>week</TimeUnit> </DefaultConfig>
Para mais informações, consulte o seguinte:
<SharedName>
Identifica esta política LLMTokenQuota como partilhada. Todas as políticas LLMTokenQuota num proxy de API com o mesmo valor <SharedName> partilham o mesmo contador de quota subjacente.
Para mais informações e exemplos, consulte o artigo Configurar contadores de quota partilhados.
| Valor predefinido | N/A |
| Obrigatório? | Opcional |
| Tipo | String |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
<CountOnly>
Coloque uma política LLMTokenQuota com este elemento definido como true num passo no fluxo de resposta do ProxyEndpoint para acompanhar o número de tokens sem enviar um erro de volta ao cliente quando o limite de quota de tokens for excedido. Se este elemento estiver presente, o elemento <SharedName>
também tem de estar presente e o elemento <EnforceOnly>
não pode estar presente.
Para mais informações e exemplos, consulte o artigo Configurar contadores de quota partilhados.
| Valor predefinido | falso |
| Obrigatório? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
<EnforceOnly>
Coloque uma política LLMTokenQuota com este elemento definido como true no fluxo de pedidos de um proxy de API para aplicar um limite de tokens sem incrementar o contador de quotas. Se este elemento estiver presente, o elemento
<SharedName> também tem de estar presente e o elemento
<CountOnly> não pode estar presente.
Para mais informações e exemplos, consulte o artigo Configurar contadores de quota partilhados.
| Valor predefinido | falso |
| Obrigatório? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos subordinados |
Nenhum |
Variáveis de fluxo
As seguintes variáveis de fluxo predefinidas são preenchidas automaticamente quando uma política LLMTokenQuota é executada. Para mais informações, consulte a Referência de variáveis de fluxo.
| Variáveis | Tipo | Autorizações | Descrição |
|---|---|---|---|
| ratelimit.{policy_name}.allowed.count | Longo | Só de leitura | Devolve a contagem da quota permitida. |
| ratelimit.{policy_name}.used.count | Longo | Só de leitura | Devolve a quota atual usada num intervalo de quota. |
| ratelimit.{policy_name}.available.count | Longo | Só de leitura | Devolve a contagem de quota disponível no intervalo de quota. |
| ratelimit.{policy_name}.exceed.count | Longo | Só de leitura | Devolve 1 após a quota ser excedida. |
| ratelimit.{policy_name}.total.exceed.count | Longo | Só de leitura | Devolve 1 após a quota ser excedida. |
| ratelimit.{policy_name}.expiry.time | Longo | Só de leitura |
Devolve a hora UTC (em milissegundos), que determina quando a quota expira e quando o novo intervalo de quota começa.
Quando o tipo da política LLMTokenQuota é |
| ratelimit.{policy_name}.identifier | String | Só de leitura | Devolve a referência do identificador (cliente) anexada à política |
| ratelimit.{policy_name}.class | String | Só de leitura | Devolve a classe associada ao identificador do cliente |
| ratelimit.{policy_name}.class.allowed.count | Longo | Só de leitura | Devolve a contagem da quota permitida definida na classe |
| ratelimit.{policy_name}.class.used.count | Longo | Só de leitura | Devolve a quota usada numa classe |
| ratelimit.{policy_name}.class.available.count | Longo | Só de leitura | Devolve a contagem de quota disponível na classe |
| ratelimit.{policy_name}.class.exceed.count | Longo | Só de leitura | Devolve a contagem de tokens que excede o limite na classe no intervalo de quota atual |
| ratelimit.{policy_name}.class.total.exceed.count | Longo | Só de leitura | Devolve a contagem total de tokens que excede o limite na classe em todos os
intervalos de quotas, pelo que é a soma de class.exceed.count para todos os
intervalos de quotas. |
| ratelimit.{policy_name}.failed | Booleano | Só de leitura |
Indica se a política falhou ou não (verdadeiro ou falso). |
| llmtokenquota.{policy_name}.model | String | Só de leitura | Devolve o modelo extraído. |
Referência de erro
Esta secção descreve os códigos de falhas e as mensagens de erro devolvidas, bem como as variáveis de falhas definidas pelo Apigee quando esta política aciona um erro. Estas informações são importantes se estiver a desenvolver regras de falhas para tratar falhas. Para saber mais, consulte o artigo O que precisa de saber acerca dos erros de políticas e Como processar falhas.
Erros de tempo de execução
Estes erros podem ocorrer quando a política é executada.
| Código de falha | Estado de HTTP | Causa | Corrigir |
|---|---|---|---|
policies.llmtokenquota.FailedToResolveModelName |
400 |
Não foi possível resolver o nome do modelo. | N/A |
policies.llmtokenquota.FailedToResolveTokenUsageCount |
500 |
Não foi possível resolver a contagem de utilização de tokens. | N/A |
policies.llmtokenquota.MessageTemplateExtractionFailed |
400 |
A extração do modelo de mensagem falhou. | N/A |
policies.llmtokenquota.LLMTokenQuotaViolation |
429 |
O limite da quota de tokens do MDG foi excedido. | N/A |
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 |
Ocorre se o elemento <Interval> não estiver definido
na política LLMTokenQuota. Este elemento é obrigatório e usado para especificar o intervalo de tempo aplicável à quota de tokens do LLM. O intervalo de tempo pode ser minutos, horas, dias, semanas ou meses, conforme definido com o elemento <TimeUnit>.
|
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 |
Ocorre se o elemento <TimeUnit> não estiver definido
na política LLMTokenQuota. Este elemento é obrigatório e usado para especificar a unidade de tempo aplicável à quota de tokens do MDG. O intervalo de tempo pode ser em minutos, horas, dias, semanas ou meses.
|
build |
Erros de implementação
| Nome do erro | Causa | Corrigir |
|---|---|---|
policies.llmtokenquota.MessageWeightNotSupported |
Erro quando o elemento "MessageWeight" é usado, uma vez que não é suportado. | N/A |
policies.llmtokenquota.InvalidConfiguration |
Tem de definir exatamente um dos elementos <CountOnly> ou <EnforceOnly> como verdadeiro. | N/A |
InvalidQuotaInterval |
Se o intervalo da quota de tokens do MDI/CE especificado no elemento <Interval> não for um número inteiro, a implementação do proxy da API falha. Por exemplo, se o intervalo de quota especificado for 0,1 no elemento <Interval>, a implementação do proxy de API falha.
|
build |
InvalidQuotaTimeUnit |
Se a unidade de tempo especificada no elemento <TimeUnit> não for suportada,
a implementação do proxy de API falha. As unidades de tempo suportadas são minute,
hour, day, week e month.
|
build |
InvalidQuotaType |
Se o tipo de quota de tokens do MDG especificado pelo atributo type no elemento <LLMTokenQuota>
for inválido, a implementação do proxy da API falha. Os tipos de quotas suportados são default, calendar, flexi e rollingwindow.
|
build |
InvalidStartTime |
Se o formato da hora especificada no elemento <StartTime> for inválido, a implementação do proxy da API falha. O formato válido é yyyy-MM-dd HH:mm:ss,
que é o formato de data e hora ISO 8601. Por exemplo, se a hora especificada no elemento <StartTime> for 7-16-2017 12:00:00, a implementação do proxy da API falha.
|
build |
StartTimeNotSupported |
Se for especificado o elemento <StartTime> cujo tipo de quota não seja do tipo calendar, a implementação do proxy de API falha. O elemento <StartTime> só é compatível com o tipo de quota calendar. Por exemplo, se o atributo type estiver definido
como flexi ou rolling window no elemento <LLMTokenQuota>, a
implementação do proxy da API falha.
|
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
Se o valor especificado para o elemento <SyncIntervalInSeconds> no elemento <AsynchronousConfiguration> numa política LLMTokenQuota for inferior a zero, a implementação do proxy de API falha. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
Se o valor do elemento <AsynchronousConfiguration> estiver definido como true numa política LLMTokenQuota, que também tenha uma configuração assíncrona definida através do elemento <AsynchronousConfiguration>, a implementação do proxy de API falha. |
build |
Variáveis de falha
Estas variáveis são definidas quando esta política aciona um erro. Para mais informações, consulte o artigo O que precisa de saber acerca dos erros de políticas.
| Variáveis | Onde | Exemplo |
|---|---|---|
fault.name="fault_name" |
fault_name é o nome da falha, conforme indicado na tabela Erros de tempo de execução acima. O nome da falha é a última parte do código de falha. | fault.name Matches "LLMTokenQuotaViolation" |
ratelimit.policy_name.failed |
policy_name é o nome especificado pelo utilizador da política que gerou a falha. | ratelimit.QT-LLMTokenQuotaPolicy.failed = true |
Exemplo de resposta de erro
{ "fault":{ "detail":{ "errorcode":"policies.llmtokenquota.LLMTokenQuotaViolation" }, "faultstring":"Rate limit LLM Token quota violation. Quota limit exceeded. Identifier : _default" } }
Exemplo de regra de falha
<FaultRules>
<FaultRule name="LLMTokenQuota Errors">
<Step>
<Name>JavaScript-1</Name>
<Condition>(fault.name Matches "LLMTokenQuotaViolation") </Condition>
</Step>
<Condition>ratelimit.LLMTokenQuota-1.failed=true</Condition>
</FaultRule>
</FaultRules>