このページの内容は 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>の時間単位を定義します。有効な値は、minute、hour、day、monthです。<Allow>: この要素は、<Interval>で許可されるトークンの数を定義します。<LLMTokenUsageSource>: この要素は、LLM の回答からのトークン使用のソースを提供します。トークン使用量の単一の値を返すメッセージ テンプレートである必要があります。<LLMModelSource>: この要素は、LLM のレスポンスまたはリクエストからモデルのソースを提供します。モデル名の単一の値を返すメッセージ テンプレートにする必要があります。
次の内容については、LLMTokenQuota ポリシーのリファレンス ページをご覧ください。
次のセクションで説明するように、Apigee UI で LLMTokenQuota ポリシーを構成します。
制限事項
LLM トークン ポリシーには次の制限があります。
- LLMTokenQuota ポリシーの制限事項
- 現在、このポリシーはテキストベースのトークンのみをサポートしています。
- 最後に許可されたリクエストは、残りの割り当てよりも多くのトークンを消費する可能性があります。
- このポリシーでは、レスポンス ペイロードで使用される LLM トークンの正確な JSON パスが必要です。自動的に検出することはできません。
- 現在、すべての SSE イベントにメタデータが必要です。
- PromptTokenLimit ポリシーの制限事項
- 現在、このポリシーはテキストベースのトークンのみをサポートしています。
- このポリシーでは、トークンのカウントに標準ライブラリを使用します。これは、一部の LLM プロバイダがトークンをカウントする方法とは異なる場合があります。
- ポリシーでは、プロンプト テキストの正確な JSON パスが必要です。動的に検索することはできません。