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

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

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

概要

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

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

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

PromptTokenLimit ポリシー

ユーザー プロンプトからのトークン使用量の急増からバックエンド サービスを保護する場合は、PromptTokenLimit ポリシーを使用します。たとえば、1 分あたりのトークン数を妥当な数に制限して、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 設定を使用して、 トークンの使用状況をハードリミットを適用せずにトラッキングします。これは、モニタリング とレポートに役立ちます。
  • 割り当ての適用: トークン割り当てを超えたら API 呼び出しを拒否するには、EnforceOnly 設定を使用します。

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

次の 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 パスが必要であり、自動的に検出することはできません。
  • PromptTokenLimit ポリシーの制限事項
    • 現在、このポリシーはテキストベースのトークンのみをサポートしています。
    • このポリシーでは、トークンをカウントするために標準ライブラリを使用します。これは、一部の LLM プロバイダがトークンをカウントする方法とは異なる場合があります。
    • このポリシーでは、プロンプト テキストの正確な JSON パスが必要です。動的に検索することはできません。 動的に検索することはできません。

関連情報