🦖

APIM経由のAOAIでトークン使用量の可視化:emit-token-metric-policy

に公開

1. この記事の範囲

Azure OpenAIとAzure API Management (APIM) を組み合わせた場合の監視方法には、いくつかのアプローチがあります。この記事では、その中でも「emit-token-metric-policy(トークンメトリックの出力)」を使用し、OpenAIの利用状況を可視化する方法について紹介します。

2. 内容

2-1. Azure OpenAIをAPI経由で利用する際の監視

Azure OpenAIをAPI経由で利用する場合、使用トークン量や課金額などが把握しにくいという課題があります。特APIMを経由した場合、APIM標準のメトリクスではトークン数が確認できず、利用実態やコストの把握が難しくなります。

なぜAPIM経由だと見えにくいのか?

  • APIM標準メトリクスでは「API のリクエスト回数」や「成功/失敗件数」は取得できますが、OpenAIの応答内容(トークン数)は記録されません。
  • そのため、API 呼び出しが成功しても、どの程度のトークンが消費されたかを確認することができません。

どうやってカスタムメトリクスを仕込むか?

  • emit-token-metric-policy を活用すると、OpenAIの応答に含まれる usage.total_tokensprompt_tokenscompletion_tokens を Application InsightsのcustomMetricsテーブルに送信できます。
  • 任意のディメンション(ユーザーIDやステータスコードなど)を付与することで、柔軟な分析が可能となります。

2-2. 監視方法

2-2-1. emit-token-metric-policyの利用

emit-token-metric-policyとは?

Azure API Management (APIM) のポリシー拡張機能であり、OpenAI の応答からトークン使用量などを抽出し、Application Insightsにメトリクスとして送信することができます。
このポリシーは、OpenAIのレスポンスボディを解析し、以下の情報をメトリクスとして送信します:

  • usage.prompt_tokens:
    ユーザーが送信したプロンプト(入力)に使用されたトークン数
  • usage.completion_tokens:
    OpenAIから返された応答(出力)に使用されたトークン数
  • usage.total_tokens:
    プロンプト+応答の合計トークン数(課金対象)
    送信先は Azure Monitorのカスタムメトリクス(customMetrics テーブル)です。

emit-token-metric-policy設定方法

以下は典型的な Inbound Policy 設定例です:

<inbound>
  <base />
  <azure-openai-emit-token-metric namespace="openai">
    <dimension name="User" value="@(context.Request.Headers.GetValueOrDefault("x-user-id", "N/A"))" />
    <dimension name="Status" value="@(context.Response.StatusCode.ToString())" />
    <dimension name="API" value="@(context.Api.Id)" />
  </azure-openai-emit-token-metric>
  <set-backend-service id="apim-generated-policy" backend-id="your-openai-backend-id" />
</inbound>

このポリシー定義の意味は以下の通りです:

  • <azure-openai-emit-token-metric>:トークンメトリクス出力用のポリシー
    • namespace:カスタムメトリクスの名前空間(例:openai
    • <dimension>:追加で付与されるディメンション(例:ユーザーID、ステータスコード、API ID)
  • <set-backend-service>:OpenAIエンドポイントへのバックエンド接続先を指定

APIMポリシー設定時のポイント

  • このポリシーはOperationレベルのInbound Policyにのみ適用可能です。
  • customMetricsに記録される名前は以下の通り:
    • Prompt Tokens
    • Completion Tokens
    • Total Tokens
  • 任意のディメンション(User、Status、API など)を使って集計可能です。
  • JSONレスポンスを返すOpenAI API(chat/completions、text-davinci 等)でのみ使用可能です。

2-2-2. Application Insights側での確認方法

Application Insightsの有効化

APIMインスタンス内でApplication Insightsを有効化します。これにより、対応するApplication Insightsインスタンスを指すロガーが自動的に構成されます。

メトリックブレードでの確認

  • Azureポータル > APIMリソース > メトリックにアクセス
  • 「メトリック名前空間」のドロップダウンから、emit-token-metric-policyで設定した namespace(例:openai)を選択
  • カスタムメトリクス(Prompt Tokens, Completion Tokens, Total Tokens)が選択可能になります

customMetricsテーブルの構成

  • customMetrics テーブルには、emit-token-metric-policyにより出力されたトークンメトリクスが含まれます。
  • customDimensions フィールドには、ポリシーで指定したディメンション(例:User, Status, API)が格納されており、フィルタや集計に活用できます。
  • Azureポータル > Application Insights > Logsからクエリ実行可能。

3. まとめ

Azure OpenAIをAzure API Management(APIM)経由で利用する場合、標準のメトリクス機能だけでは「どのくらい使われているか」「どれくらい課金されるか」といった実態が把握しづらいという課題があります。

そのような課題に対して、emit-token-metric-policy を活用することで、以下のようなトークンベースの可視化が実現できます:

  • Prompt / Completion / Total トークン数の収集と時系列での可視化
  • ユーザーやAPI単位でのディメンション分析
  • Application Insightsへの統合による柔軟なクエリと監視
  • Azure Monitor / Power BI 等との連携によるダッシュボード構築

これにより、利用状況の可視化だけでなく、コスト予測や部門別の利用分析、アラート設定など、より実践的な管理・運用が可能になります。

今後、OpenAIの社内利用が拡大していく中で、トークン消費の「見える化」は運用・予算管理において重要になるでしょう。本記事の内容がその一助になれば幸いです。

4. 参考文献

Discussion