Ограничение использования маркера API для крупной языковой модели

ОБЛАСТЬ ПРИМЕНЕНИЯ: Разработчик | Базовый | Базовая версия 2 | Стандартный | Standard v2 | Премиум | Премиум версии 2

Политика llm-token-limit предотвращает пики использования API больших языковых моделей (LLM) на основе каждого ключа путем ограничения потребления маркеров языковой модели на указанную скорость (число в минуту), квоту за указанный период или оба. При превышении указанного ограничения скорости маркера вызывающий объект получает 429 Too Many Requests код состояния ответа. При превышении указанной квоты вызывающий получает 403 Forbidden код состояния ответа.

Примечание.

Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте, как устанавливать или изменять политики службы управления API.

Поддерживаемые API модели

Эта политика работает с API LLM, добавленными в управление API, которые соответствуют одной из следующих схем API:

  • Api завершения чата OpenAI или API ответов
  • API сообщений Anthropic (в настоящее время поддерживается на уровнях управления API версии 2)
  • Google Vertex AI API

Правило политики

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

Атрибуты

Атрибут Описание Обязательное поле По умолчанию.
counter-key Ключ, используемый для политики ограничения маркеров. Для каждого значения ключа используется один счетчик для всех областей, для которых настроена политика. Допустимы выражения политики. Да Н/П
токены в минуту Максимальное количество маркеров, потребляемых запросом и завершением в минуту. Необходимо указать ограничение скорости (), квоту (tokens-per-minutetoken-quotaпо сравнению с) token-quota-periodили оба. Н/П
квота токена Максимальное количество маркеров, разрешенных в течение интервала времени, указанного в параметре token-quota-period. Допустимы выражения политики. Необходимо указать ограничение скорости (), квоту (tokens-per-minutetoken-quotaпо сравнению с) token-quota-periodили оба. Н/П
период квоты токена Длина фиксированного окна, после которого token-quota сбрасывается. Значение должно быть одним из следующих значений: Hourly,Daily, Weekly, Monthly, Yearly. Время начала периода квоты вычисляется как метка времени UTC, усеченная на единицу (час, день и т. д.), используемая в течение периода. Допустимы выражения политики. Необходимо указать ограничение скорости (), квоту (tokens-per-minutetoken-quotaпо сравнению с) token-quota-periodили оба. Н/П
estimate-prompt-token Логическое значение, определяющее, следует ли оценить количество маркеров, необходимых для запроса:
- true: заранее оцените маркеры запроса на основе схемы запроса в API.
- false: не оценивая маркеры запроса; используйте фактическое использование маркеров из ответа модели.

Сведения о поведении подсчета и оценки маркеров см. в разделе "Рекомендации по подсчету и оценке маркеров".
Да Н/П
retry-after-header-name Имя пользовательского заголовка ответа, значение которого является рекомендуемой интервалом повтора в секундах после указанного tokens-per-minute или token-quota превышения. Выражения политики не допускаются. нет Retry-After
retry-after-variable-name Имя переменной, которая сохраняет рекомендуемый интервал повторных попыток в секундах после указанного tokens-per-minute или token-quota превышения. Выражения политики не допускаются. нет Н/П
оставшаяся квота-token-header-name Имя заголовка ответа, значение которого после каждого выполнения политики — это предполагаемое количество оставшихся маркеров, token-quota соответствующих разрешенным token-quota-period. Выражения политики не допускаются. нет Н/П
оставшаяся квота-token-variable-name Имя переменной, которая после каждого выполнения политики сохраняет предполагаемое количество оставшихся token-quota маркеров, соответствующих разрешенным token-quota-period. Выражения политики не допускаются. нет Н/П
остальные токены-заголовок-name Имя заголовка ответа, значение которого после каждого выполнения политики — это количество оставшихся маркеров, tokens-per-minute соответствующих допустимому интервалу времени. Выражения политики не допускаются. нет Н/П
остальные токены-переменные-name Имя переменной, которая после каждого выполнения политики сохраняет количество оставшихся маркеров, соответствующих tokens-per-minute допустимому интервалу времени. Выражения политики не допускаются. нет Н/П
token-consumed-header-name Имя заголовка ответа, значение которого — количество маркеров, потребляемых как запросом, так и завершением. Заголовок добавляется в ответ только после получения ответа от серверной части. Выражения политики не допускаются. нет Н/П
token-consumed-variable-name Имя переменной, инициализированной предполагаемому количеству маркеров запроса в backend разделе (или ноль, если estimate-prompt-tokens ) falseобновлено с фактическим числом сообщаемых данных в outbound разделе. нет Н/П

Использование

Примечания об использовании

  • Эту политику можно использовать несколько раз для определения политики.
  • Эту политику можно настроить при добавлении LLM API через портал.
  • Значение remaining-quota-tokens-variable-name или remaining-quota-tokens-header-name является оценкой и может быть больше, чем ожидалось, на основе фактического потребления маркеров. Дополнительные сведения см. в разделе "Рекомендации по подсчетам и оценке маркеров".
  • Управление API использует один счетчик для каждого counter-key значения, указанного в политике. Счетчик обновляется во всех областях, в которых политика настроена с этим значением ключа. Если вы хотите настроить отдельные счетчики в разных областях (например, определенный API или продукт), укажите разные значения ключей в разных областях. Например, добавьте строку, которая определяет область к значению выражения.
  • Уровни версии 2 используют алгоритм контейнера маркеров для ограничения скорости, который отличается от алгоритма скользящего окна в классических уровнях. Из-за этой разницы в реализации, когда вы настраиваете лимиты токенов в уровнях v2 на нескольких областях с использованием одного и того counter-keyже , убедитесь, что значение tokens-per-minute одинаковое для всех экземпляров политик. Несогласованные значения могут привести к непредсказуемому поведению. Дополнительные сведения см. в разделе Регулирование запросов с помощью Azure API Management
  • Эта политика отслеживает использование маркеров независимо от каждого шлюза, в котором она применяется, включая шлюзы рабочей области и региональные шлюзы в развертывании с несколькими регионами. Он не агрегирует количество маркеров во всем экземпляре.

Рекомендации по подсчетам маркеров и оценке

Политика отслеживает и применяет ограничения маркеров с использованием фактических данных об использовании маркеров, возвращаемых из конечной точки LLM. При необходимости можно включить оценку маркеров запроса, чтобы уменьшить ненужные внутренние запросы. Примените следующие рекомендации.

  • Типы токенов: политика в настоящее время подсчитывает только маркеры запроса и завершения.
  • Без оценки маркеров запроса (estimate-prompt-tokens="false"): политика использует фактические значения использования маркеров из usage раздела ответа API LLM. Запросы могут отправляться в серверную часть, даже если ограничение превышено; это обнаруживается из ответа, после чего последующие запросы блокируются до сброса предела.
  • При оценке маркеров запроса (estimate-prompt-tokens="true"): перед отправкой запроса политика оценивает маркеры запроса из схемы запроса в определении API. Это может уменьшить ненужные внутренние запросы, если ограничение уже превышено, но может снизить производительность.
  • Потоковая передача: если потоковая передача включена в запросе API (stream: true), маркеры запроса всегда оцениваются независимо от estimate-prompt-tokens параметра. Маркеры завершения также оцениваются при потоковой передаче ответов.
  • Входные данные изображения: для моделей, которые принимают входные изображения, маркеры изображений обычно учитываются серверной частью LLM и включаются в вычисления ограничения и квоты. Однако если потоковая передача включена или estimate-prompt-tokens задана true, политика переначисливает каждый образ как не более 1200 маркеров.
  • Параллелизм. Так как точное количество используемых маркеров невозможно определить, пока ответы не будут получены от серверной части, одновременных или почти одновременных запросов могут временно превышать настроенное ограничение маркера. После обработки ответов и превышения предела последующие запросы блокируются до сброса предела.
  • Оставшаяся точность квоты: предполагаемый оставшийся квота маркера, возвращенная remaining-quota-tokens-variable-name или remaining-quota-tokens-header-name может быть больше, чем ожидалось на основе фактического потребления маркеров, и становится более точной по мере приближения квоты.

Примеры

Ограничение скорости токенов

В следующем примере ограничение скорости токена составляет 5000 в минуту, задается IP-адресом вызывающего абонента. Политика не оценивает количество маркеров, необходимых для запроса. После каждого выполнения политики остальные маркеры, разрешенные для этого ВЫЗЫВАющего IP-адреса в период времени, хранятся в переменной remainingTokens.

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

Квота маркера

В следующем примере квота маркера 10000 определяется идентификатором подписки и сбрасывается ежемесячно. После каждого выполнения политики количество оставшихся маркеров, разрешенных для этого идентификатора подписки в период времени, хранится в переменной remainingQuotaTokens.

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

Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.