LLM 토큰 정책 시작하기

이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.

Apigee Edge 문서 보기

개요

Apigee의 LLM 토큰 정책은 LLM 토큰 사용량과 사용자 프롬프트 토큰 측정항목을 활용하여 한도를 적용하고 실시간 모니터링을 제공하므로 비용 관리, 성능 최적화, 플랫폼 안정성에 매우 중요합니다.

이 문서에서는 다음 LLM 토큰 정책을 시작하는 방법을 설명합니다.

  • PromptTokenLimit 정책: 사용자 프롬프트 메시지를 기반으로 토큰을 제한하여 타겟을 토큰 악용으로부터 보호합니다. PromptTokenLimit 정책은 AI 프롬프트의 스파이크 방지와 같습니다. 이를 통해 사용자 프롬프트의 토큰 사용률을 제어하여 악용을 방지하고 백엔드 서비스가 과부하되지 않도록 할 수 있습니다.
  • LLMTokenQuota 정책: LLM 지출을 제어하고 API 제품을 기반으로 세분화된 할당량 관리를 적용합니다. LLMTokenQuota 정책을 사용하면 특정 기간 (예: 분, 시간, 일, 월) 동안 LLM API의 토큰 소비 한도를 적용할 수 있습니다. 이는 비용을 관리하고 AI 서비스의 공정한 사용을 보장하는 데 중요합니다.

PromptTokenLimit 정책

사용자 프롬프트로 인한 토큰 사용량의 급격한 증가로부터 백엔드 서비스를 보호하려면 PromptTokenLimit 정책을 사용하세요. 예를 들어 단일 사용자가 서비스를 압도하지 못하도록 분당 토큰 수를 적절한 수로 제한할 수 있습니다.

API 프록시의 요청 흐름에 이 정책을 추가합니다.

다음 PromptTokenLimit 정책 예시에서는 토큰 비율을 분당 1,000개로 제한합니다.

<PromptTokenLimit continueOnError="false" enabled="true" name="PTL-limitTokens-1">
  <DisplayName>Limit Prompt Tokens</DisplayName>
  <!-- The rate at which to limit tokens. Here, 1,000 per minute -->
  <Rate>1000pm</Rate>
  <!-- Specifies where to get the user's prompt from the request -->
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
</PromptTokenLimit>

각 항목의 의미는 다음과 같습니다.

  • <Rate>: 토큰을 제한할 비율입니다.
  • <UserPromptSource>: 요청에서 사용자의 프롬프트를 가져올 위치를 지정합니다.

다음을 확인하려면 PromptTokenLimit 정책 참조 페이지를 참고하세요.

다음 작업을 실행할 때 Apigee UI에서 PromptTokenLimit 정책을 구성합니다.

LLMTokenQuota 정책

다양한 API 제품, 개발자 또는 앱의 토큰 소비 할당량을 설정하고 적용하려면 LLMTokenQuota 정책을 사용하세요. 예를 들어 정기 결제 등급마다 다른 토큰 할당량을 제공할 수 있습니다.

정책은 두 가지 주요 방식으로 사용할 수 있습니다.

  • 토큰 수 계산: CountOnly 설정을 사용하여 엄격한 한도를 적용하지 않고 토큰 사용량을 추적합니다. 이는 모니터링 및 보고에 유용합니다.
  • 할당량 적용: 토큰 할당량이 초과되면 EnforceOnly 설정을 사용하여 API 호출을 거부합니다.

할당량이 초과되었는지 확인하기 위해 요청 흐름에 EnforceOnly 정책을 추가합니다. 응답 흐름에 CountOnly 정책을 추가하여 LLM 응답에 사용된 토큰 수를 계산합니다.

다음 LLMTokenQuota 정책 예에서는 API 제품에서 동적으로 가져온 설정으로 시간당 토큰 할당량을 10,000개로 적용합니다.

<LLMTokenQuota name="Quota-Enforce-Only" type="rollingwindow">
  <EnforceOnly>true</EnforceOnly>
  <!-- The interval and time unit for the quota -->
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.timeunit">hour</TimeUnit>
  <!-- The number of tokens allowed in the interval -->
  <Allow count="10000" countRef="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.limit"/>
  <!-- Specifies where to get the token usage from the LLM's response -->
  <LLMTokenUsageSource>{jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)}</LLMTokenUsageSource>
  <!-- Specifies where to get the model name from the LLM's response -->
  <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource>
</LLMTokenQuota>

각 항목의 의미는 다음과 같습니다.

  • <EnforceOnly>: true로 설정된 경우 이 요소는 토큰 할당량이 초과되면 API 호출을 거부하는 데 사용됩니다. 이를 통해 API 제공업체는 정의된 간격 동안 애플리케이션에서 소비하는 토큰 수를 엄격하게 제한할 수 있습니다.
  • <Interval>: 이 요소는 LLM 응답의 토큰 수가 계산되는 시간 간격을 지정합니다. 토큰 할당량을 정의하기 위해 <TimeUnit><Allow>와 함께 사용됩니다.
  • <TimeUnit>: 이 요소는 <Interval>의 시간 단위를 정의합니다. 유효한 값은 minute, hour, day 또는 month입니다.
  • <Allow>: 이 요소는 <Interval>에서 허용되는 토큰 수를 정의합니다.
  • <LLMTokenUsageSource>: 이 요소는 LLM 대답의 토큰 사용량 소스를 제공합니다. 토큰 사용량의 단일 값을 제공하는 메시지 템플릿이어야 합니다.
  • <LLMModelSource>: 이 요소는 LLM 응답 또는 요청의 모델 소스를 제공합니다. 모델 이름의 단일 값을 제공하는 메시지 템플릿이어야 합니다.

다음을 확인하려면 LLMTokenQuota 정책 참조 페이지를 참고하세요.

다음 섹션에 설명된 대로 Apigee UI에서 LLMTokenQuota 정책을 구성합니다.

제한사항

LLM 토큰 정책에는 다음과 같은 제한사항이 있습니다.

  • LLMTokenQuota 정책 제한사항
    • 이 정책은 현재 텍스트 기반 토큰만 지원합니다.
    • 마지막으로 허용된 요청이 남은 할당량보다 더 많은 토큰을 사용할 수 있습니다.
    • 정책에는 응답 페이로드에서 사용된 LLM 토큰의 정확한 JSON 경로가 필요하며 자동으로 감지할 수 없습니다.
    • 현재 모든 SSE 이벤트에는 메타데이터가 필요합니다.
  • PromptTokenLimit 정책 제한사항
    • 이 정책은 현재 텍스트 기반 토큰만 지원합니다.
    • 이 정책은 표준 라이브러리를 사용하여 토큰을 계산하며, 일부 LLM 제공업체가 토큰을 계산하는 방식과 다를 수 있습니다.
    • 정책에는 프롬프트 텍스트의 정확한 JSON 경로가 필요하며 동적으로 찾을 수 없습니다.

추가 정보