Esta página se aplica a Apigee, pero no a Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Información general
La política LLMTokenQuota se ha diseñado para gestionar y controlar el consumo de tokens de las cargas de trabajo de IA y LLMs. Como las interacciones con los modelos de lenguaje extenso (LLMs) se basan en tokens, es fundamental gestionarlos de forma eficaz para controlar los costes, optimizar el rendimiento y mantener la estabilidad de la plataforma.
Una cuota es una asignación de tokens de LLM (de entrada o de salida) que un proxy de API puede consumir durante un periodo determinado, como un minuto, una hora, un día, una semana o un mes. La política LLMTokenQuota mantiene contadores que registran el número de tokens consumidos por el proxy de API. Esta función permite a los proveedores de APIs aplicar límites al consumo de tokens por parte de las aplicaciones durante un intervalo de tiempo.
Esta política usa los elementos <LLMTokenUsageSource> y <LLMModelSource> para extraer el recuento de tokens de la respuesta del LLM y el nombre del modelo de la solicitud o la respuesta, lo que permite aplicar las cuotas de forma precisa y en tiempo real.
Esta política es una política extensible y su uso puede tener implicaciones en cuanto a costes o utilización, en función de tu licencia de Apigee. Para obtener información sobre los tipos de políticas y las implicaciones de uso, consulta Tipos de políticas.
Cómo funciona la aplicación de LLMTokenQuota
A continuación se describe la función de la política LLMTokenQuota:
-
Recuento de tokens (
<CountOnly>): La política LLMTokenQuota mantiene contadores que registran el número de tokens consumidos por las respuestas de LLM que pasan por el proxy de la API. -
Aplicar límites (
<EnforceOnly>): Esta función permite a los proveedores de APIs establecer límites estrictos en el número de tokens que consumen las aplicaciones durante un intervalo definido. Por ejemplo, puedes limitar las aplicaciones a 1000 tokens por minuto o a 10.000.000 tokens al mes. - Superación de la cuota: cuando un proxy de API alcanza el límite de cuota de tokens definido, Apigee rechaza las solicitudes posteriores que consumen tokens. Se devuelve un mensaje de error hasta que el contador LLMTokenQuota se restablece automáticamente al final del intervalo de tiempo especificado. Por ejemplo, si se establece una cuota de 10.000 tokens al mes, el límite de tokens empieza a aplicarse cuando se cuenta el token número 10.000, independientemente del momento del mes en el que se alcance ese límite.
Cómo funciona LLMTokenQuota con los productos de API
A continuación, se describe cómo funciona la política LLMTokenQuota con los productos de API:
-
Aplica la política
VerifyAPIKeyoVerifyAccessTokenjunto con la política de cumplimientoLLMTokenQuotaen la solicitud del proxy de API (no importa si es Proxy o Target). -
Aplica la política de recuento
LLMTokenQuotaen respuesta al proxy de API (no importa si es un proxy o un destino). - La política VerifyAPIKey o VerifyAccessToken compara la clave o el token con el producto de la API, el conjunto de operaciones, el desarrollador y la aplicación. Expone las variables de flujo de la cuota de LLM de todos los modelos de los conjuntos de operaciones de LLM coincidentes.
- En la política de cumplimiento de la cuota, extraemos el modelo según la plantilla de mensaje proporcionada.
- A continuación, se comparan las variables de cuota de LLM del modelo. Si se encuentra una coincidencia, se insertan las referencias.
- Una vez que se insertan las referencias, esos valores se usan para llevar a cabo las operaciones de cuota.
Cómo funciona LLMTokenQuota con las respuestas de SSE
Para que LLMTokenQuota funcione con las respuestas de SSE, añade la política como parte del flujo de eventos, tal como se muestra a continuación:
<EventFlow content-type="text/event-stream"> <Response> <Step> <Name>LLM_TOKEN_QUOTA_COUNT_POLICY_NAME</Name> </Step> </Response> </EventFlow>
Durante el procesamiento del flujo de eventos, el recuento de tokens solo se ejecuta cuando se encuentran en el evento los metadatos de uso de tokens de la respuesta del LLM. Cuando se descubren los metadatos de uso del token, se extraen y se ejecuta la política. En el resto de los eventos, la política da como resultado NO-OP.
.Tipos de políticas de LLMTokenQuota
La política LLMTokenQuota admite varias formas de iniciar y restablecer el contador de cuota. Puede definir cuál usar con el atributo type del elemento <LLMTokenQuota>, como se muestra en el siguiente ejemplo:
<LLMTokenQuota name="LLMTokenQuotaPolicy" type="calendar"> ... </LLMTokenQuota>
Los valores válidos de type son los siguientes:
calendar: configura una cuota basada en una hora de inicio explícita. El contador LLMTokenQuota de cada aplicación se actualiza en función de los valores<StartTime>,<Interval>y<TimeUnit>que hayas definido.rollingwindow: configura una cuota que usa una ventana acumulativa para determinar el uso de la cuota. Conrollingwindow, puedes determinar el tamaño de la ventana con los elementos<Interval>y<TimeUnit>. Por ejemplo, 1 día. Cuando llega una solicitud, Apigee analiza la hora exacta de la solicitud (por ejemplo, las 17:01), cuenta el número de tokens consumidos entre ese momento y las 17:01 del día anterior (1 día) y determina si se ha superado la cuota durante ese periodo.flexi: configura una cuota que hace que el contador empiece cuando se recibe el primer mensaje de solicitud de una aplicación y se restablece en función de los valores<Interval>y<TimeUnit>.
En la siguiente tabla se describe cuándo se restablece la cuota de cada tipo:
| Unidad de tiempo | Tipo | ||
|---|---|---|---|
default (o null) |
calendar |
flexi |
|
| minuto | Inicio del minuto siguiente | Un minuto después de las <StartTime> |
Un minuto después de la primera solicitud |
| hora | Al principio de la hora siguiente | Una hora después de <StartTime> |
Una hora después de la primera solicitud |
| día | Medianoche GMT del día actual | 24 horas después de <StartTime> |
24 horas después de la primera solicitud |
| semana | Domingo a medianoche (GMT) al final de la semana | Una semana después de <StartTime> |
Una semana después de la primera solicitud |
| mes | Medianoche GMT del último día del mes | Un mes (28 días) después de <StartTime> |
Un mes (28 días) después de la primera solicitud |
En el caso de type="calendar", debe especificar el valor de <StartTime>.
En la tabla no se describe cuándo se restablece el recuento del tipo rollingwindow.
Esto se debe a que las cuotas de ventana de tiempo funcionan de forma diferente, ya que se basan en una ventana retrospectiva, como una hora o un día. En el caso del tipo rollingwindow, el contador nunca se reinicia, sino que se vuelve a calcular en cada solicitud. Cuando se recibe una nueva solicitud, la política determina si se ha superado la cuota en el periodo anterior.
Por ejemplo, defines un periodo de dos horas que permite 1000 tokens. A las 16:45, se recibe una nueva solicitud.La política calcula el número de tokens de cuota de las dos horas anteriores, es decir, el número de tokens consumidos desde las 14:45. Si no se ha superado el límite de cuota en ese periodo de dos horas, se permitirá la solicitud.
Un minuto después, a las 16:46, llega otra solicitud. Ahora, la política calcula el número de cuotas desde las 14:46 para determinar si se ha superado el límite.
Información sobre los contadores de cuotas
Cuando se ejecuta una política LLMTokenQuota en un flujo de proxy de API, se incrementa un contador de cuota. Cuando el contador alcanza su límite, no se permiten más llamadas a la API asociadas a ese contador. En función de la configuración que uses para tu producto de API, la política LLMTokenQuota puede usar un solo contador o varios contadores independientes. Es importante entender los casos en los que se usarán varios contadores y cómo se comportan.
Configurar los ajustes de cuota de los productos de API
En un producto de API se pueden especificar ajustes de cuota a nivel de producto o de operación individual, o en ambos. Si tu proxy de API está incluido en un producto de API, puedes configurar la política LLMTokenQuota para que use los ajustes de cuota (número permitido, unidad de tiempo e intervalo) definidos en ese producto. La forma más sencilla de hacerlo es mediante el elemento useQuotaConfigInAPIProduct.
También puedes hacer referencia a estos ajustes en la política LLMTokenQuota mediante referencias de variables individuales.
Cómo se contabilizan las cuotas
De forma predeterminada, Apigee mantiene un contador de cuota independiente para cada operación definida en un producto de API y se aplican las siguientes reglas:
- Si una operación tiene una cuota definida, los ajustes de cuota de la operación tienen prioridad sobre los ajustes de cuota definidos a nivel de producto.
- Si una operación no tiene una cuota definida, se aplican los ajustes de cuota a nivel de producto.
- Si el producto de la API no incluye ningún ajuste de cuota (ni a nivel de producto ni de operación), se aplicarán los ajustes de cuota de recuento permitido, unidad de tiempo e intervalo especificados en la política LLMTokenQuota.
En todos los casos, Apigee mantiene un contador de cuota independiente para cada operación definida en un producto de API. Las llamadas a la API que coincidan con una operación incrementarán su contador.
Configurar contadores a nivel de proxy de API
Es posible configurar un producto de API para que mantenga un recuento de cuotas en el ámbito del proxy de API. En este caso, la configuración de cuota especificada a nivel de producto de API se comparte entre todas las operaciones que no tienen su propia cuota especificada. El efecto de esta configuración es crear un contador a nivel del proxy de API para este producto de API.
Para conseguir esta configuración, debes usar la API/apiproducts de Apigee para crear o actualizar el producto y definir el atributo
quotaCounterScope en PROXY en la solicitud de creación o actualización.
Con la configuración PROXY, las solicitudes que coincidan con cualquiera de las operaciones definidas para el producto de la API que estén asociadas al mismo proxy y no tengan su propia configuración de cuota compartirán un contador de cuota común para ese proxy.
En la figura 1, las operaciones 1 y 2 están asociadas a Proxy1, y las operaciones 4 y 5 están asociadas a Proxy3. Como quotaCounterScope=PROXY se define en el producto de API, cada una de estas operaciones usa el ajuste de cuota a nivel de producto de API. Las operaciones 1 y 2, asociadas a Proxy1, usan un contador compartido, mientras que las operaciones 4 y 5, asociadas a Proxy3, usan otro contador compartido.
La operación 3 tiene su propio ajuste de configuración de cuota y, por lo tanto, usa su propio contador, independientemente del valor del atributo quotaCounterScope.
Figura 1: Uso de la marca quotaCounterScope

Cómo se contabilizan las cuotas si no se usan productos de API
Si no hay ningún producto de API asociado a un proxy de API, una política LLMTokenQuota mantiene un solo contador, independientemente del número de veces que se haga referencia a él en un proxy de API. El nombre del contador de cuota se basa en el atributo name de la política.
Por ejemplo, creas una política LLMTokenQuota llamada MyLLMTokenQuotaPolicy con un límite de 5 tokens y la colocas en varios flujos (A, B y C) del proxy de API. Aunque se usa en varios flujos, mantiene un solo contador que actualizan todas las instancias de la política. Si la respuesta del LLM ha usado 1 token cada vez:
- Se ejecuta el flujo A -> se ejecuta MyLLMTokenQuotaPolicy y su contador = 1
- Se ejecuta el flujo B -> se ejecuta MyLLMTokenQuotaPolicy y su contador = 2
- Se ejecuta el flujo A -> se ejecuta MyLLMTokenQuotaPolicy y su contador = 3
- Se ejecuta el flujo C -> se ejecuta MyLLMTokenQuotaPolicy y su contador es 4
- Se ejecuta el flujo A -> se ejecuta MyLLMTokenQuotaPolicy y su contador es 5
La siguiente solicitud a cualquiera de los tres flujos se rechaza porque el contador de cuotas ha alcanzado su límite.
Usar la misma política LLMTokenQuota en más de un lugar en un flujo de proxy de API, lo que puede provocar que LLMTokenQuota se agote más rápido de lo esperado, es un antipatrón que se describe en Introducción a los antipatrones.
También puedes definir varias políticas LLMTokenQuota en tu proxy de API y usar una política diferente en cada flujo. Cada política LLMTokenQuota mantiene su propio contador, basado en el atributo name de la política.
Crear varios contadores mediante la configuración de políticas
Puedes usar los elementos <Class> o <Identifier> en la política LLMTokenQuota para definir varios contadores únicos en una sola política. Al usar estos elementos, una sola política puede mantener diferentes contadores en función de la aplicación que haga la solicitud, el desarrollador de la aplicación que haga la solicitud, un ID de cliente u otro identificador de cliente, entre otros. Consulta los ejemplos anteriores para obtener más información sobre cómo usar los elementos <Class> o <Identifier>.
Notación de tiempo
Todas las horas de LLMTokenQuota se definen en la zona horaria del tiempo universal coordinado (UTC).
La notación de tiempo de LLMTokenQuota sigue la notación de fecha estándar internacional definida en el estándar internacional ISO 8601.
Las fechas se definen como año, mes y día, con el siguiente formato: YYYY-MM-DD.
Por ejemplo, 2025-02-04 representa el 4 de febrero del 2025.
La hora del día se define como horas, minutos y segundos en el siguiente formato:
hours:minutes:seconds. Por ejemplo, 23:59:59 representa la hora un segundo antes de medianoche.
Ten en cuenta que hay dos notaciones, 00:00:00 y 24:00:00, para distinguir las dos medianoches que se pueden asociar a una fecha. Por lo tanto, 2025-02-04
24:00:00 es la misma fecha y hora que 2025-02-05 00:00:00. Esta última suele ser la notación preferida.
Obtener la configuración de cuota de la configuración del producto de API
Puedes definir límites de cuota en las configuraciones de productos de API. Esos límites no aplican la cuota automáticamente. En su lugar, puedes hacer referencia a los ajustes de cuota de producto en una política LLMTokenQuota. Estas son algunas de las ventajas de definir una cuota en el producto para que las políticas de LLMTokenQuota puedan hacer referencia a ella:
- Las políticas LLMTokenQuota pueden usar un ajuste uniforme en todos los proxies de API del producto de API.
- Puedes hacer cambios en el tiempo de ejecución en la configuración de cuota de un producto de API y las políticas LLMTokenQuota que hagan referencia al valor tendrán automáticamente valores de cuota actualizados.
Para obtener más información sobre cómo usar los ajustes de cuota de un producto de API, consulta el ejemplo de cuota dinámica.
Para obtener información sobre cómo configurar productos de API con límites de cuota, consulta Gestionar productos de API.
Configurar contadores de cuota compartidos
En el caso más sencillo, la política LLMTokenQuota incrementa su contador una vez por cada token enviado a un proxy de API durante el procesamiento de la solicitud inicial. En algunos casos, puede que quieras comprobar si se ha superado la cuota en la gestión inicial de la solicitud entrante, pero incrementar el contador solo durante la gestión de la respuesta.
Los tres elementos de la política LLMTokenQuota (<SharedName>, <CountOnly> y <EnforceOnly>) te permiten personalizar la política LLMTokenQuota para aplicar la cuota a las solicitudes entrantes, pero solo incrementan el contador en el flujo de respuesta.
Por ejemplo, supongamos que tienes un proxy de API que usa un LLM como destino y quieres aplicar una cuota de 100.000 tokens por hora. Las respuestas del LLM proporcionan un valor totalTokenCount. Para ello, sigue estos pasos:
- Adjunta una política LLMTokenQuota al flujo Request de ProxyEndpoint con el elemento
<SharedName>definido con un valor de nombre y el elemento<EnforceOnly>definido comotrue. - Usa el elemento
<LLMTokenUsageSource>en la política LLMTokenQuota para obtener el recuento de tokens.
Para ver un ejemplo de cómo usar contadores compartidos, consulta Contadores compartidos en la sección Ejemplos.
Ejemplos
Estos ejemplos de código de la política muestran cómo iniciar y finalizar periodos de cuota:
Más información sobre Dynamic LLMTokenQuota
<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>
Las cuotas dinámicas te permiten configurar una sola política LLMTokenQuota que aplique diferentes ajustes de cuota en función de la información que se le proporcione. Otro término para los ajustes de LLMTokenQuota en este contexto es plan de servicio. LLMTokenQuota dinámico comprueba el plan de servicio de las aplicaciones y, a continuación, aplica esos ajustes.
Por ejemplo, cuando creas un producto de API, puedes definir de forma opcional el límite de cuota permitido, la unidad de tiempo y el intervalo. Sin embargo, si se definen estos valores en el producto de API, no se obliga a usarlos en un proxy de API. También debe añadir una política LLMTokenQuota al proxy de API que lea estos valores. Consulta más información sobre cómo crear productos de API.
En el ejemplo anterior, el proxy de API que contiene la política LLMTokenQuota usa una política VerifyAPIKey, llamada verify-api-key, para validar la clave de API transmitida en una solicitud. A continuación, la política LLMTokenQuota accede a las variables de flujo de la política VerifyAPIKey para leer los valores de cuota definidos en el producto de API.
Otra opción es definir atributos personalizados en desarrolladores o aplicaciones concretos y, a continuación, leer esos valores en la política LLMTokenQuota. Por ejemplo, para definir diferentes valores de cuota por desarrollador, debe definir atributos personalizados en el desarrollador que contengan el límite, la unidad de tiempo y el intervalo. A continuación, haga referencia a estos valores en la política LLMTokenQuota, tal como se muestra a continuación:
<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>
En este ejemplo también se usan las variables de flujo VerifyAPIKey para hacer referencia a los atributos personalizados definidos en el desarrollador.
Puedes usar cualquier variable para definir los parámetros de la política LLMTokenQuota. Esas variables pueden proceder de:
- Variables de flujo
- Propiedades del producto de API, la aplicación o el desarrollador
- Un mapa de clave-valor (KVM)
- Un encabezado, un parámetro de consulta, un parámetro de formulario, etc.
En cada proxy de API, puedes añadir una política LLMTokenQuota que haga referencia a la misma variable que todas las demás políticas LLMTokenQuota de los demás proxies. También puedes añadir una política LLMTokenQuota que haga referencia a variables únicas de esa política y proxy.
Hora de inicio
<LLMTokenQuota name="LLMTokenQuotaPolicy" type="calendar"> <StartTime>2025-02-18 10:30:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </LLMTokenQuota>
En el caso de un LLMTokenQuota con type definido como calendar, debes definir un valor <StartTime> explícito. El valor de la hora es la hora GMT, no la hora local. Si no proporciona un valor de <StartTime> para una política de tipo calendar, Apigee emitirá un error.
El contador LLMTokenQuota de cada aplicación se actualiza en función de los valores <StartTime>,
<Interval> y <TimeUnit>. En este ejemplo, el LLMTokenQuota empieza a contar a las 10:30 (GMT) del 18 de febrero del 2025 y se actualiza cada 5 horas. Por lo tanto, la próxima actualización se realizará el 18 de febrero del 2025 a las 15:30 (GMT).
Contador de accesos
<LLMTokenQuota name="LLMTokenQuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </LLMTokenQuota>
Un proxy de API tiene acceso a las variables de flujo definidas por la política LLMTokenQuota. Puedes acceder a estas variables de flujo en el proxy de API para realizar un procesamiento condicional, monitorizar la política a medida que se acerca al límite de cuota, devolver el contador de cuota actual a una aplicación o por otros motivos.
Como el acceso a las variables de flujo de la política se basa en el atributo name de las políticas, para la política anterior llamada <LLMTokenQuota>, puedes acceder a sus variables de flujo de la siguiente forma:
ratelimit.LLMTokenQuotaPolicy.allowed.count: recuento permitido.ratelimit.LLMTokenQuotaPolicy.used.count: valor actual del contador.ratelimit.LLMTokenQuotaPolicy.expiry.time: hora UTC en la que se restablece el contador.
Puedes acceder a muchas otras variables de flujo, como se describe a continuación.
Por ejemplo, puedes usar la siguiente política AssignMessage para devolver los valores de las variables de flujo LLMTokenQuota como encabezados de respuesta:
<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 compartidos
En el siguiente ejemplo se muestra cómo configurar un contador compartido para un proxy de API, donde el contador de cuota también se incrementa cuando la respuesta de destino es el estado HTTP 200.
Como ambas políticas de LLMTokenQuota usan el mismo valor de <SharedName>, compartirán el mismo contador de cuotas. Para obtener más información, consulta Configurar contadores de cuota compartidos.
Ejemplo de configuración 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>Primer ejemplo 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 ejemplo de 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>
Primera solicitud
<LLMTokenQuota name="MyLLMTokenQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="10000"/> </LLMTokenQuota>
Usa este código de ejemplo para aplicar una cuota de 10.000 tokens por hora. La política restablece el contador de cuota al principio de cada hora. Si el contador alcanza la cuota de 10.000 tokens antes de que termine la hora, se rechazarán las llamadas a la API que consuman más de 10.000 tokens.
Por ejemplo, si el contador empieza en 2025-07-08 07:00:00, se restablecerá a 0 a las 2025-07-08 08:00:00 (1 hora después de la hora de inicio). Si la primera solicitud se recibe a las 2025-07-08 07:35:28 y el recuento de tokens llega a 10.000 antes de las 2025-07-08 08:00:00, las solicitudes que consuman tokens por encima de ese recuento se rechazarán hasta que el recuento se restablezca al principio de la hora.
La hora de restablecimiento del contador se basa en la combinación de <Interval> y <TimeUnit>. Por ejemplo, si asignas el valor <Interval> a
12 para un <TimeUnit> de una hora, el contador se restablecerá cada doce horas.
Puedes definir <TimeUnit> en minutos, horas, días, semanas o meses.
Puedes hacer referencia a esta política en varios lugares de tu proxy de API. Por ejemplo, puede colocarla en Proxy PreFlow para que se ejecute en cada solicitud. También puedes colocarlo en varios flujos del proxy de API. Si usa esta política en varios lugares del proxy, se mantendrá un solo contador que se actualizará con todas las instancias de la política.
También puedes definir varias políticas LLMTokenQuota en tu proxy de API. Cada política LLMTokenQuota
mantiene su propio contador, basado en el atributo name de la política.
Definir 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>
De forma predeterminada, una política LLMTokenQuota define un único contador para el proxy de API, independientemente del origen de una solicitud. También puede usar el atributo <Identifier> con una política LLMTokenQuota para mantener contadores independientes en función del valor del atributo <Identifier>.
Por ejemplo, use la etiqueta <Identifier> para definir contadores independientes para cada ID de cliente. En una solicitud a tu proxy, la aplicación cliente envía un encabezado que contiene el clientID, como se muestra en el ejemplo anterior.
Puede especificar cualquier variable de flujo en el atributo <Identifier>. Por ejemplo, puede especificar que un parámetro de consulta llamado id contenga el identificador único:
<Identifier ref="request.queryparam.id"/>
Si usas la política VerifyAPIKey para validar la clave de API o las políticas OAuthV2 con tokens de OAuth, puedes usar la información de la clave de API o del token para definir contadores individuales de la misma política LLMTokenQuota. Por ejemplo, el siguiente elemento <Identifier> usa la variable de flujo client_id de una política VerifyAPIKey llamada verify-api-key:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Cada valor único de client_id define ahora su propio contador en la política LLMTokenQuota.
Clase
<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>Puedes definir límites de LLMTokenQuota de forma dinámica usando un recuento de LLMTokenQuota basado en clases. En este ejemplo, el límite de cuota se determina mediante el valor del encabezado developer_segment que se envía con cada solicitud. Esta variable puede tener el valor platinum
o silver. Si el encabezado tiene un valor no válido, la política devuelve un error de infracción de cuota.
En los siguientes ejemplos se ilustran varias configuraciones de la política de LLMTokenQuota.
Calcular tokens
En este ejemplo se muestra cómo calcular 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>
Contar variables dinámicas de cuota mediante API Product, Developer y App
En este ejemplo se muestra cómo contar variables dinámicas de cuota mediante API Product, Developer y 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>
Aplicar cuotas sin producto de API
En este ejemplo se muestra cómo aplicar la cuota sin usar un producto de 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>
Aplicar cuotas con productos de API, desarrolladores y aplicaciones
En este ejemplo se muestra cómo aplicar cuotas con productos de API, desarrolladores y aplicaciones.
<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>
Con flujo SSE
En este ejemplo se muestra cómo usar LLMTokenQuota con un flujo SSE.
Política de recuento de cuotas 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>
Flujo de eventos:
<EventFlow content-type="text/event-stream"> <Response> <Step> <Name>LTQ-Count-Only</Name> </Step> </Response> </EventFlow>
Elemento <LLMTokenQuota>
A continuación, se muestran los atributos y los elementos secundarios de <LLMTokenQuota>. Ten en cuenta que algunas combinaciones de elementos son mutuamente excluyentes o no son obligatorias. Consulta los
ejemplos para ver cómo se usa.
Las variables verifyapikey.my-verify-key-policy.apiproduct.* que se muestran a continuación están disponibles de forma predeterminada cuando se usa una política VerifyAPIKey llamada my-verify-key-policy para comprobar la clave de API de la aplicación en la solicitud. Los valores de las variables proceden de la configuración de cuota del producto de API al que está asociada la clave, tal como se describe en el artículo Obtener la configuración de cuota de la configuración del producto de 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>
Los siguientes atributos son específicos de esta política:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
type |
Define el tipo de política LLMTokenQuota, que determina cuándo y cómo comprueba el contador de cuotas el uso de cuotas, así como cómo se restablece. Si no defines A continuación se muestran los valores válidos.
Para ver una descripción completa de cada tipo, consulta los tipos de política LLMTokenQuota. |
N/A | Opcional |
En la siguiente tabla se describen los atributos que son comunes a todos los elementos superiores de la política:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
name |
El nombre interno de la política. El valor del atributo Opcionalmente, usa el elemento |
N/A | Obligatorio |
continueOnError |
Asigna el valor Asigna el valor |
falso | Opcional |
enabled |
Asigna el valor Selecciona |
true | Opcional |
async |
Este atributo está obsoleto. |
falso | Obsoleto |
Elemento <DisplayName>
Úsalo junto con el atributo name para etiquetar la política en el editor de proxy de la interfaz de gestión con un nombre diferente en lenguaje natural.
<DisplayName>Policy Display Name</DisplayName>
| Predeterminado |
N/A Si omite este elemento, se usará el valor del atributo |
|---|---|
| Presencia | Opcional |
| Tipo | Cadena |
<Allow>
Especifica el número total de tokens permitidos en el intervalo de tiempo especificado. Si el contador de la política alcanza este valor límite, se rechazarán las llamadas a la API posteriores hasta que se restablezca el contador.
También puede contener un elemento <Class> que condicione el elemento <Allow>
en función de una variable de flujo.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Tipo Entero o Complejo |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
<Class> |
A continuación, se muestran tres formas de definir el elemento <Allow>:
<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.limit"/>
Si especificas tanto count como countRef, countRef tiene prioridad. Si countRef no se resuelve en el tiempo de ejecución, se usa el valor de count.
También puede especificar un elemento <Class> como elemento secundario de <Allow> para determinar el número permitido de la política en función de una variable de flujo. Apigee compara el valor de la variable de flujo con el atributo class del elemento <Allow>, tal como se muestra a continuación:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
En la siguiente tabla se enumeran los atributos de <Allow>:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
count |
Se usa para especificar el número de tokens de la cuota. Por ejemplo, si el valor del atributo |
2000 | Opcional |
countRef |
Se usa para especificar una variable de flujo que contenga el número de tokens de una cuota.
|
ninguno | Opcional |
<Class>
Te permite condicionar el valor del elemento <Allow> en función del valor de una variable de flujo. Para cada etiqueta secundaria <Allow> diferente de <Class>,
la política mantiene un contador diferente.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Tipo complejo |
| Elemento principal |
<Allow>
|
| Elementos secundarios |
<Allow> (elemento secundario de <Class>) |
Para usar el elemento <Class>, especifica una variable de flujo mediante el atributo ref del elemento <Class>. A continuación, Apigee usa el valor de la variable de flujo para seleccionar uno de los elementos secundarios <Allow> y determinar el número permitido de la política. Apigee compara el valor de la variable de flujo con el atributo class del elemento <Allow>, tal como se muestra a continuación:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
En este ejemplo, el contador de cuota actual se determina mediante el valor del parámetro de consulta time_variable que se envía con cada solicitud. Esta variable puede tener el valor peak_time o off_peak_time. Si el parámetro de consulta contiene un valor no válido, la política devuelve un error de infracción de cuota.
En la siguiente tabla se enumeran los atributos de <Class>:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
ref |
Se usa para especificar una variable de flujo que contenga la clase de cuota de una cuota. | ninguno | Obligatorio |
<Allow> (hijo de <Class>)
Especifica el límite de un contador de cuota definido por el elemento <Class>. Para cada
etiqueta secundaria <Allow> diferente de <Class>, la
política mantiene un contador diferente.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Tipo complejo |
| Elemento principal |
<Class>
|
| Elementos secundarios |
Ninguno |
Por ejemplo:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
En este ejemplo, la política LLMTokenQuota mantiene dos contadores de cuota llamados peak_time y off_peak_time. El parámetro que se usa depende del parámetro de consulta que se haya enviado, como se muestra en el ejemplo de <Class>.
En la siguiente tabla se enumeran los atributos de <Allow>:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
class |
Define el nombre del contador de cuota. | ninguno | Obligatorio |
count |
Especifica el límite de cuota del contador. | ninguno | Obligatorio |
<IgnoreUnresolvedVariables>
Determina si se detiene el procesamiento de la política LLMTokenQuota si Apigee no puede resolver una variable
a la que hace referencia el atributo ref de la política.
| Valor predeterminado | falso |
| ¿Es obligatorio? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Se define como true para ignorar las variables sin resolver y continuar con el procesamiento;
de lo contrario, false. El valor predeterminado es false.
Si <IgnoreUnresolvedVariables> se define como true y no se puede resolver la variable especificada en un atributo ref, Apigee ignora el atributo ref. Si el elemento que contiene el atributo ref
también contiene un valor, como <Allow count="2000"/>,
Apigee usa ese valor. Si no hay ningún valor, Apigee trata el valor del elemento como nulo y sustituye el valor predeterminado, si lo hay, o una cadena vacía.
Si <IgnoreUnresolvedVariables> es false y no se puede resolver la variable especificada en un atributo ref, Apigee devuelve un error.
<Interval>
Especifica el número de periodos en los que se calculan las cuotas.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Obligatorio |
| Tipo | Entero |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Se usa para especificar un número entero (por ejemplo, 1, 2, 5, 60, etc.) que se emparejará con el elemento <TimeUnit> que especifiques (minuto, hora, día, semana o mes) para determinar un periodo durante el cual Apigee calcula el uso de la cuota.
Por ejemplo, un intervalo de 24 con un <TimeUnit> de hour
significa que la cuota se calculará a lo largo de 24 horas.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.interval">1</Interval>
En la siguiente tabla se enumeran los atributos de <Interval>:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
ref |
Se usa para especificar una variable de flujo que contiene el intervalo de una cuota. |
ninguno | Opcional |
<TimeUnit>
Especifica la unidad de tiempo aplicable a la cuota.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Obligatorio |
| Tipo | Cadena |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Elige entre minute, hour, day, week, month o year.
Por ejemplo, un Interval de 24 con un TimeUnit de hour significa que la cuota se calculará a lo largo de 24 horas.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.llmquota.timeunit">month</TimeUnit>
En la siguiente tabla se enumeran los atributos de <TimeUnit>:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
ref |
Especifica una variable de flujo que contiene la unidad de tiempo de una cuota. ref
tiene prioridad sobre un valor de intervalo explícito. Si ref no se resuelve en el tiempo de ejecución, se usa el valor del intervalo. |
ninguno | Opcional |
<StartTime>
Si type se define como calendar, se especifica la fecha y la hora en las que el contador de cuota empieza a contar, independientemente de si se han recibido solicitudes de alguna aplicación.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional (obligatorio cuando type está definido como calendar) |
| Tipo | Cadena en formato de fecha y hora ISO 8601 |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Por ejemplo:
<StartTime>2025-7-16 12:00:00</StartTime>
<Distributed>
Determina si Apigee usa uno o varios nodos para procesar solicitudes.
| Valor predeterminado | falso |
| ¿Es obligatorio? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Defina el valor true para especificar que la política debe mantener un contador central y sincronizarlo continuamente en todos los nodos. Los nodos
pueden estar en zonas de disponibilidad o regiones diferentes.
Si usas el valor predeterminado false, es posible que superes tu cuota, ya que el recuento de cada nodo no se comparte:
<Distributed>false</Distributed>
Para asegurarte de que los contadores se sincronicen y se actualicen en cada solicitud, define <Distributed> y <Synchronous> como true:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
<Synchronous>
Determina si se debe actualizar un contador de cuota distribuida de forma síncrona.
| Valor predeterminado | falso |
| ¿Es obligatorio? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Se define como true para actualizar un contador de cuota distribuida de forma síncrona. Esto significa que los contadores se actualizan al mismo tiempo que se comprueba la cuota de una solicitud a la API. Asigna el valor true si es fundamental que no permitas ninguna llamada a la API que supere la cuota.
Asigna el valor false para actualizar el contador de cuota de forma asíncrona. Esto significa que es posible que se completen algunas llamadas a la API que superen la cuota, en función de cuándo se actualice de forma asíncrona el contador de cuotas en el repositorio central. Sin embargo, no tendrás que hacer frente a los posibles problemas de rendimiento asociados a las actualizaciones síncronas.
El intervalo de actualización asíncrona predeterminado es de 10 segundos. Usa el elemento <AsynchronousConfiguration> para configurar este comportamiento asíncrono.
<Synchronous>false</Synchronous>
<AsynchronousConfiguration>
Configura el intervalo de sincronización entre los contadores de cuota distribuidos cuando el elemento de configuración de la política <Synchronous> no está presente o está presente y se ha definido como false. Apigee ignora este elemento cuando <Synchronous> tiene el valor true.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Tipo complejo |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
<SyncIntervalInSeconds><SyncMessageCount> |
Puedes especificar el comportamiento de la sincronización mediante los elementos secundarios <SyncIntervalInSeconds> o <SyncMessageCount>. Usa uno de los elementos o ambos. Por ejemplo,
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
o
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
- Si solo está presente
<SyncIntervalInSeconds>, la cuota se sincroniza cada N segundos, donde N es el valor especificado en el elemento, independientemente del número de mensajes que se hayan gestionado. - Si solo se incluye
<SyncMessageCount>, la cuota se sincroniza cada M mensajes, donde M es el valor especificado en el elemento, o cada 10 segundos, lo que ocurra primero. - Cuando ambos elementos están presentes, la cuota se sincroniza cada M mensajes o cada N segundos, lo que ocurra primero.
- Si
<AsynchronousConfiguration>no está presente o no hay ningún elemento secundario, la cuota se sincroniza cada 10 segundos, independientemente del número de mensajes que se hayan gestionado.
<SyncIntervalInSeconds>
Anula el comportamiento predeterminado en el que las actualizaciones asíncronas se realizan después de un intervalo de 10 segundos.
| Valor predeterminado | 10 segundos |
| ¿Es obligatorio? | Opcional |
| Tipo | Entero |
| Elemento principal |
<AsynchronousConfiguration>
|
| Elementos secundarios |
Ninguno |
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
El intervalo de sincronización debe ser igual o superior a 10 segundos, tal como se describe en la sección Límites.
<SyncMessageCount>
Especifica el número de solicitudes que se deben procesar antes de sincronizar el contador de cuota.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Entero |
| Elemento principal |
<AsynchronousConfiguration>
|
| Elementos secundarios |
Ninguno |
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Con la configuración de este ejemplo, en cada nodo, el recuento de cuota se sincronizará cada 5 solicitudes o cada 10 segundos, lo que ocurra primero.
<LLMTokenUsageSource>
Proporciona la fuente del uso del token de la respuesta del LLM. Debe ser una plantilla de mensaje que se resuelva en un único valor de uso de token. Si la política no forma parte de un flujo de eventos y no puede extraer el recuento de tokens de la fuente especificada, se produce un error de tiempo de ejecución policies.ratelimit.FailedToResolveTokenUsageCount.
| Valor predeterminado | {jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)} |
| ¿Es obligatorio? | Opcional |
| Tipo | Cadena |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
En el siguiente ejemplo se muestra cómo especificar la fuente de uso del token:
<LLMTokenUsageSource>{jsonPath('$.usageMetadata.candidatesTokenCount', response.content, true)}</LLMTokenUsageSource><LLMModelSource>
Proporciona la fuente del nombre del modelo a partir de la respuesta o la solicitud del LLM. Debe ser una plantilla de mensaje que proporcione un solo valor de nombre de modelo.
| Valor predeterminado | |
| ¿Es obligatorio? | Opcional |
| Tipo | Cadena |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
En el siguiente ejemplo se muestra cómo especificar la fuente del modelo en la solicitud:
<LLMModelSource>{jsonPath('$.model', request.content, true)}</LLMModelSource><Identifier>
Configura la política para crear contadores únicos basados en una variable de flujo.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Cadena |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Con el elemento Identifier, puede asignar recuentos de tokens a distintos contenedores definidos por el valor de una variable de flujo. Por ejemplo, puede usar la variable developer.id, que se rellena después de una política VerifyAPIKey, para aplicar un límite de cuota a todas las instancias de todas las aplicaciones creadas por cada desarrollador específico, o bien puede usar client_id para aplicar un límite de cuota a cada aplicación en concreto. La configuración de esta última opción es la siguiente:
<Identifier ref="client_id"/>
Puedes hacer referencia a una variable personalizada que hayas definido con la política AssignMessage o la política JavaScript, o bien a una variable que se haya definido implícitamente, como las que definen la política VerifyAPIKey o la política VerifyJWT. Para obtener más información sobre las variables, consulta el artículo Usar variables de flujo. Para ver una lista de las variables conocidas definidas por Apigee, consulta la referencia de variables de flujo.
Si no usas este elemento, la política asigna todos los recuentos de tokens a un solo contador de la política LLMTokenQuota concreta.
En la siguiente tabla se describen los atributos de <Identifier>:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
ref |
Especifica una variable de flujo que identifica el contador que se va a usar en la solicitud. La variable puede hacer referencia a un encabezado HTTP, un parámetro de consulta, un parámetro de formulario o un elemento del contenido del mensaje, o bien a otro valor para identificar cómo asignar los recuentos de tokens.
|
N/A | Opcional |
<UseQuotaConfigInAPIProduct>
Define los ajustes de cuota de un producto de API, como las unidades de tiempo, el intervalo y el máximo permitido.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Tipo complejo |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
<DefaultConfig> |
Si añade el elemento <UseQuotaConfigInAPIProduct> a la política LLMTokenQuota, Apigee ignorará los elementos secundarios <Allow>, <Interval> y <TimeUnit> de LLMTokenQuotaPolicy.
El elemento <UseQuotaConfigInAPIProduct> es simplemente un contenedor de los ajustes predeterminados que definas con el elemento <DefaultConfig>, como se muestra en el siguiente ejemplo:
<UseQuotaConfigInAPIProduct stepName="POLICY_NAME"> <DefaultConfig>...</DefaultConfig> </UseQuotaConfigInAPIProduct>
Puede usar el atributo stepName para hacer referencia a una política VerifyAPIKey
o a una operación de política ValidateToken de la política OAuthv2 en el flujo.
En la siguiente tabla se describen los atributos de <UseQuotaConfigInAPIProduct>:
| Atributo | Descripción | Predeterminado | Presencia |
|---|---|---|---|
stepName |
Identifica el nombre de la política de autenticación en el flujo. El destino puede ser una política VerifyAPIKey o una política OAuthv2. | N/A | Obligatorio |
Para obtener más información, consulta las siguientes secciones:
<DefaultConfig>
Contiene los valores predeterminados de la cuota de un producto de la API. Cuando defines un <DefaultConfig>, los tres elementos secundarios son obligatorios.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Tipo complejo |
| Elemento principal |
<UseQuotaConfigInAPIProduct>
|
| Elementos secundarios |
<Allow><Interval><TimeUnit> |
Estos valores se pueden definir tanto en la operación del producto de API (ya sea con la interfaz de usuario o con la API Products API) como en la política LLMTokenQuota. Sin embargo, si lo hace, los ajustes del producto de API tendrán prioridad y se ignorarán los ajustes de la política LLMTokenQuota.
La sintaxis de este elemento es la siguiente:
<UseQuotaConfigInAPIProduct stepName="POLICY_NAME">
<DefaultConfig>
<Allow>allow_count</Allow>
<Interval>interval</Interval>
<TimeUnit>[minute|hour|day|week|month]</TimeUnit>
</DefaultConfig>
</UseQuotaConfigInAPIProduct>En el siguiente ejemplo se especifica una cuota de 10.000 cada semana:
<DefaultConfig> <Allow>10000</Allow> <Interval>1</Interval> <TimeUnit>week</TimeUnit> </DefaultConfig>
Para obtener más información, consulta las siguientes secciones:
<SharedName>
Identifica esta política LLMTokenQuota como compartida. Todas las políticas de LLMTokenQuota de un proxy de API con el mismo valor de <SharedName> comparten el mismo contador de cuotas subyacente.
Para obtener más información y ejemplos, consulta Configurar contadores de cuota compartida.
| Valor predeterminado | N/A |
| ¿Es obligatorio? | Opcional |
| Tipo | Cadena |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
<CountOnly>
Coloca una política LLMTokenQuota con este elemento definido como true en un paso del flujo de respuesta de ProxyEndpoint para hacer un seguimiento del número de tokens sin enviar un error al cliente cuando se supere el límite de la cuota de tokens. Si este elemento está presente, también debe estarlo el elemento <SharedName>, pero no el elemento <EnforceOnly>.
Para obtener más información y ejemplos, consulta Configurar contadores de cuota compartidos.
| Valor predeterminado | falso |
| ¿Es obligatorio? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
<EnforceOnly>
Coloca una política LLMTokenQuota con este elemento definido como true en el flujo de solicitudes de un proxy de API para aplicar un límite de tokens sin aumentar el contador de cuota. Si este elemento está presente, también debe estarlo <SharedName>, y el elemento <CountOnly> no debe estar presente.
Para obtener más información y ejemplos, consulta Configurar contadores de cuota compartidos.
| Valor predeterminado | falso |
| ¿Es obligatorio? | Opcional |
| Tipo | Booleano |
| Elemento principal |
<LLMTokenQuota>
|
| Elementos secundarios |
Ninguno |
Variables de flujo
Las siguientes variables de flujo predefinidas se rellenan automáticamente cuando se ejecuta una política LLMTokenQuota. Para obtener más información, consulta la referencia de variables de flujo.
| Variables | Tipo | Permisos | Descripción |
|---|---|---|---|
| ratelimit.{policy_name}.allowed.count | Long | Solo lectura | Devuelve el recuento de cuota permitido. |
| ratelimit.{policy_name}.used.count | Long | Solo lectura | Devuelve la cuota actual utilizada en un intervalo de cuota. |
| ratelimit.{policy_name}.available.count | Long | Solo lectura | Devuelve el número de cuotas disponibles en el intervalo de cuota. |
| ratelimit.{policy_name}.exceed.count | Long | Solo lectura | Devuelve 1 cuando se supera la cuota. |
| ratelimit.{policy_name}.total.exceed.count | Long | Solo lectura | Devuelve 1 cuando se supera la cuota. |
| ratelimit.{policy_name}.expiry.time | Long | Solo lectura |
Devuelve la hora UTC (en milisegundos), que determina cuándo vence la cuota y cuándo empieza el nuevo intervalo de cuota.
Cuando el tipo de la política LLMTokenQuota es |
| ratelimit.{policy_name}.identifier | Cadena | Solo lectura | Devuelve la referencia del identificador (de cliente) adjunta a la política. |
| ratelimit.{policy_name}.class | Cadena | Solo lectura | Devuelve la clase asociada al identificador de cliente. |
| ratelimit.{policy_name}.class.allowed.count | Long | Solo lectura | Devuelve el recuento de cuota permitido definido en la clase. |
| ratelimit.{policy_name}.class.used.count | Long | Solo lectura | Devuelve la cuota utilizada en una clase. |
| ratelimit.{policy_name}.class.available.count | Long | Solo lectura | Devuelve el número de cuotas disponibles en la clase. |
| ratelimit.{policy_name}.class.exceed.count | Long | Solo lectura | Devuelve el recuento de tokens que supera el límite de la clase en el intervalo de cuota actual. |
| ratelimit.{policy_name}.class.total.exceed.count | Long | Solo lectura | Devuelve el recuento total de tokens que supera el límite de la clase en todos los intervalos de cuota, por lo que es la suma de class.exceed.count de todos los intervalos de cuota. |
| ratelimit.{policy_name}.failed | Booleano | Solo lectura |
Indica si la política ha fallado (true o false). |
| llmtokenquota.{policy_name}.model | Cadena | Solo lectura | Devuelve el modelo extraído. |
Referencia de errores
En esta sección se describen los códigos de error y los mensajes de error que devuelve Apigee, así como las variables de error que define, cuando esta política activa un error. Es importante conocer esta información si vas a desarrollar reglas de errores para gestionarlos. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo gestionar los fallos.
Errores de tiempo de ejecución
Estos errores pueden producirse cuando se ejecuta la política.
| Código de fallo | Estado de HTTP | Causa | Solucionar |
|---|---|---|---|
policies.llmtokenquota.FailedToResolveModelName |
400 |
No se ha podido resolver el nombre del modelo. | N/A |
policies.llmtokenquota.FailedToResolveTokenUsageCount |
500 |
No se ha podido resolver el recuento de uso de tokens. | N/A |
policies.llmtokenquota.MessageTemplateExtractionFailed |
400 |
No se ha podido extraer la plantilla de mensaje. | N/A |
policies.llmtokenquota.LLMTokenQuotaViolation |
429 |
Se ha superado el límite de cuota de tokens de LLM. | N/A |
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 |
Se produce si el elemento <Interval> no se define en la política LLMTokenQuota. Este elemento es obligatorio y se usa para especificar el intervalo de tiempo aplicable a la cuota de tokens de LLM. El intervalo de tiempo puede ser en minutos, horas, días, semanas o meses, tal como se define con el elemento <TimeUnit>.
|
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 |
Se produce si el elemento <TimeUnit> no se define en la política LLMTokenQuota. Este elemento es obligatorio y se usa para especificar la unidad de tiempo aplicable a la cuota de tokens de LLM. El intervalo de tiempo puede ser en minutos, horas, días, semanas o meses.
|
build |
Errores de implementación
| Nombre del error | Causa | Solucionar |
|---|---|---|
policies.llmtokenquota.MessageWeightNotSupported |
Error cuando se usa el elemento "MessageWeight", ya que no se admite. | N/A |
policies.llmtokenquota.InvalidConfiguration |
Solo uno de los elementos <CountOnly> o <EnforceOnly> debe tener el valor "true". | N/A |
InvalidQuotaInterval |
Si el intervalo de cuota de tokens de LLM especificado en el elemento <Interval> no es un número entero, la implementación del proxy de la API fallará. Por ejemplo, si el intervalo de cuota especificado es 0,1 en el elemento <Interval>, se producirá un error al desplegar el proxy de API.
|
build |
InvalidQuotaTimeUnit |
Si la unidad de tiempo especificada en el elemento <TimeUnit> no es compatible, se producirá un error en la implementación del proxy de API. Las unidades de tiempo admitidas son minute, hour, day, week y month.
|
build |
InvalidQuotaType |
Si el tipo de cuota de tokens de LLM especificado por el atributo type en el elemento <LLMTokenQuota> no es válido, no se podrá desplegar el proxy de API. Los tipos de cuota admitidos son default, calendar, flexi y rollingwindow.
|
build |
InvalidStartTime |
Si el formato de la hora especificada en el elemento <StartTime> no es válido, se producirá un error al implementar el proxy de API. El formato válido es yyyy-MM-dd HH:mm:ss,
que es el formato de fecha y hora ISO 8601. Por ejemplo, si la hora especificada en el elemento <StartTime> es 7-16-2017 12:00:00, se producirá un error al implementar el proxy de API.
|
build |
StartTimeNotSupported |
Si se especifica el elemento <StartTime> cuyo tipo de cuota no es calendar, el despliegue del proxy de API falla. El elemento <StartTime> solo se admite en el tipo de cuota calendar. Por ejemplo, si el atributo type se define como flexi o rolling window en el elemento <LLMTokenQuota>, se producirá un error al implementar el proxy de API.
|
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
Si el valor especificado para el elemento <SyncIntervalInSeconds> dentro del elemento <AsynchronousConfiguration> de una política LLMTokenQuota es inferior a cero, se produce un error en la implementación del proxy de API. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
Si el valor del elemento <AsynchronousConfiguration> es true en una política LLMTokenQuota, que también tiene una configuración asíncrona definida mediante el elemento <AsynchronousConfiguration>, se produce un error en la implementación del proxy de API. |
build |
Variables de error
Estas variables se definen cuando esta política activa un error. Para obtener más información, consulta el artículo Qué debes saber sobre los errores de las políticas.
| Variables | Dónde | Ejemplo |
|---|---|---|
fault.name="fault_name" |
fault_name es el nombre del fallo, tal como se indica en la tabla Errores de tiempo de ejecución de arriba. El nombre del error es la última parte del código de error. | fault.name Matches "LLMTokenQuotaViolation" |
ratelimit.policy_name.failed |
policy_name es el nombre de la política especificado por el usuario que ha provocado el error. | ratelimit.QT-LLMTokenQuotaPolicy.failed = true |
Ejemplo de respuesta de error
{ "fault":{ "detail":{ "errorcode":"policies.llmtokenquota.LLMTokenQuotaViolation" }, "faultstring":"Rate limit LLM Token quota violation. Quota limit exceeded. Identifier : _default" } }
Regla de fallo de ejemplo
<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>