Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Simula la limitación de velocidad basada en tokens para las API del modelo de lenguaje mediante el seguimiento del consumo de tokens de solicitud y finalización dentro de las ventanas de tiempo configurables.
Ejemplo de configuración
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json",
"plugins": [
{
"name": "LanguageModelRateLimitingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "languageModelRateLimitingPlugin"
}
],
"urlsToWatch": [
"https://api.openai.com/*",
"http://localhost:11434/*"
],
"languageModelRateLimitingPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 5000,
"completionTokenLimit": 5000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Throttle",
"headerRetryAfter": "retry-after"
}
}
Propiedades de configuración
| Property | Description | Default |
|---|---|---|
promptTokenLimit |
Número máximo de tokens de solicitud permitidos en el período de tiempo. | 5000 |
completionTokenLimit |
Número máximo de tokens de finalización permitidos en el período de tiempo. | 5000 |
resetTimeWindowSeconds |
Período de tiempo en segundos después del cual se restablecen los límites del token. | 60 |
whenLimitExceeded |
Comportamiento de respuesta cuando se superan los límites del token. Puede ser Throttle o Custom. |
Throttle |
headerRetryAfter |
Nombre del encabezado HTTP para incluir información de reintento posterior. | retry-after |
customResponseFile |
Ruta de acceso al archivo que contiene la respuesta personalizada cuando whenLimitExceeded se establece en Custom. |
token-limit-response.json |
Configuración de respuesta personalizada
Cuando whenLimitExceeded se establece Customen , puede definir una respuesta personalizada en un archivo JSON independiente:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/languagemodelratelimitingplugin.customresponsefile.schema.json",
"statusCode": 429,
"headers": [
{
"name": "retry-after",
"value": "@dynamic"
},
{
"name": "content-type",
"value": "application/json"
}
],
"body": {
"error": {
"message": "You have exceeded your token quota. Please wait before making additional requests.",
"type": "insufficient_quota",
"code": "token_quota_exceeded"
}
}
}
Propiedades de respuesta personalizadas
| Property | Description |
|---|---|
statusCode |
Código de estado HTTP que se va a devolver cuando se supera el límite de tokens. |
headers |
Matriz de encabezados HTTP que se van a incluir en la respuesta. Use @dynamic para reintentar después para calcular automáticamente los segundos hasta el restablecimiento. |
body |
Objeto de cuerpo de respuesta que se serializa en JSON. |
Cómo funciona
LanguageModelRateLimitingPlugin funciona por:
- Interceptar solicitudes de API de OpenAI: supervisa las solicitudes POST a direcciones URL configuradas que contienen cuerpos de solicitud compatibles con OpenAI.
-
Seguimiento del consumo de tokens: analiza las respuestas para extraer
prompt_tokensycompletion_tokensde la sección de uso - Aplicación de límites: mantiene los totales en ejecución de tokens consumidos dentro del período de tiempo configurado.
- Proporcionar respuestas de limitación: cuando se superan los límites, devuelve respuestas de limitación estándar o respuestas personalizadas.
Tipos de solicitud admitidos
El complemento admite solicitudes de finalización de OpenAI y de finalización de chat:
-
Solicitudes de finalización: solicitudes con una
promptpropiedad -
Solicitudes de finalización del chat: solicitudes con una
messagespropiedad
Seguimiento de tokens
El consumo de tokens se realiza un seguimiento por separado para:
- Tokens de solicitud: tokens de entrada consumidos por la solicitud
- Tokens de finalización: tokens de salida generados por la respuesta
Cuando se supera cualquiera de los límites, las solicitudes posteriores se limitan hasta que se restablece el período de tiempo.
Comportamiento de la ventana de tiempo
- Restablecimiento de límites de token después de la configuración
resetTimeWindowSeconds - El temporizador de restablecimiento se inicia cuando se procesa la primera solicitud.
- Cuando expira un período de tiempo, los contadores de token de solicitud y finalización se restablecen a sus límites configurados.
Respuesta de limitación predeterminada
Cuando whenLimitExceeded se establece Throttleen , el complemento devuelve una respuesta de error estándar compatible con OpenAI:
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_quota"
}
}
La respuesta incluye:
- Código de estado HTTP:
429 Too Many Requests -
retry-afterencabezado con segundos hasta que se restablezcan los límites del token - Encabezados CORS cuando la solicitud original incluye un
Originencabezado
Casos de uso
LanguageModelRateLimitingPlugin es útil para:
- Prueba de la limitación de velocidad basada en tokens: simulación del comportamiento de la aplicación cuando los proveedores de modelos de lenguaje aplican cuotas de token
- Simulación de costos de desarrollo: descripción de los patrones de consumo de tokens durante el desarrollo antes de alcanzar límites de API reales
- Pruebas de resistencia: compruebe que la aplicación controla correctamente los errores de límite de tokens e implementa la lógica de reintento adecuada.
- Pruebas de LLM locales: probar escenarios de limitación de tokens con modelos de lenguaje local (como Ollama) que no aplican sus propios límites
Escenarios de ejemplo
Escenario 1: Limitación básica de tokens
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 300
}
}
Esta configuración permite hasta 1000 tokens de aviso y 500 tokens de finalización en un período de 5 minutos.
Escenario 2: Respuestas de error personalizadas
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 2000,
"completionTokenLimit": 1000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Custom",
"customResponseFile": "custom-token-error.json"
}
}
Esta configuración usa un archivo de respuesta personalizado para proporcionar mensajes de error especializados cuando se superan los límites del token.