LLM トークン ポリシーを使ってみる

このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。

Apigee Edge のドキュメントを表示する。

概要

Apigee の LLM トークン ポリシーは、コスト管理、パフォーマンスの最適化、プラットフォームの安定性に不可欠です。LLM トークンの使用量とユーザー プロンプト トークンの指標を活用して、上限を適用し、リアルタイム モニタリングを提供します。

このドキュメントでは、次の LLM トークン ポリシーの使用を開始する方法について説明します。

  • PromptTokenLimit ポリシー: ユーザー プロンプト メッセージに基づいてトークンをスロットリングすることで、トークンの不正使用からターゲットを保護します。PromptTokenLimit ポリシーは、AI プロンプトのスパイク アレストのようなものです。これにより、ユーザー プロンプトからのトークン使用率を制御して、不正使用を防ぎ、バックエンド サービスが過負荷にならないようにすることができます。
  • LLMTokenQuota ポリシー: LLM の費用を制御し、API プロダクトに基づいてきめ細かい割り当て管理を適用します。LLMTokenQuota ポリシーを使用すると、特定の期間(分、時間、日、月など)に LLM API のトークン消費量の上限を適用できます。これは、費用を管理し、AI サービスの公平な使用を確保するために重要です。

PromptTokenLimit ポリシー

PromptTokenLimit ポリシーは、ユーザー プロンプトからのトークン使用量の急増からバックエンド サービスを保護する場合に使用します。たとえば、1 分あたりのトークン数を妥当な数に制限して、単一のユーザーがサービスを過負荷にすることを防ぐことができます。

このポリシーを API プロキシのリクエスト フローに追加します。

次の PromptTokenLimit ポリシーの例では、トークンレートを 1 分あたり 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 ポリシーを使用します。たとえば、定期購入の階層ごとに異なるトークン割り当てを提供できます。

このポリシーは、主に次の 2 つの方法で使用できます。

  • トークンのカウント: CountOnly 設定を使用して、ハードリミットを適用せずにトークンの使用状況を追跡します。これはモニタリングとレポート作成に役立ちます。
  • 割り当ての適用: EnforceOnly 設定を使用して、トークン割り当てを超えた場合に API 呼び出しを拒否します。

リクエスト フローに EnforceOnly ポリシーを追加して、割り当てを超過しているかどうかを確認します。レスポンス フローに CountOnly ポリシーを追加して、LLM レスポンスで使用されたトークン数をカウントします。

次の LLMTokenQuota ポリシーの例では、1 時間あたり 10,000 トークンの割り当てを適用します。設定は API プロダクトから動的に取得されます。

<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> の時間単位を定義します。有効な値は、minutehourdaymonth です。
  • <Allow>: この要素は、<Interval> で許可されるトークンの数を定義します。
  • <LLMTokenUsageSource>: この要素は、LLM の回答からのトークン使用のソースを提供します。トークン使用量の単一の値を返すメッセージ テンプレートである必要があります。
  • <LLMModelSource>: この要素は、LLM のレスポンスまたはリクエストからモデルのソースを提供します。モデル名の単一の値を返すメッセージ テンプレートにする必要があります。

次の内容については、LLMTokenQuota ポリシーのリファレンス ページをご覧ください。

次のセクションで説明するように、Apigee UI で LLMTokenQuota ポリシーを構成します。

制限事項

LLM トークン ポリシーには次の制限があります。

  • LLMTokenQuota ポリシーの制限事項
    • 現在、このポリシーはテキストベースのトークンのみをサポートしています。
    • 最後に許可されたリクエストは、残りの割り当てよりも多くのトークンを消費する可能性があります。
    • このポリシーでは、レスポンス ペイロードで使用される LLM トークンの正確な JSON パスが必要です。自動的に検出することはできません。
    • 現在、すべての SSE イベントにメタデータが必要です。
  • PromptTokenLimit ポリシーの制限事項
    • 現在、このポリシーはテキストベースのトークンのみをサポートしています。
    • このポリシーでは、トークンのカウントに標準ライブラリを使用します。これは、一部の LLM プロバイダがトークンをカウントする方法とは異なる場合があります。
    • ポリシーでは、プロンプト テキストの正確な JSON パスが必要です。動的に検索することはできません。

関連情報