Azure API ManagementでGoogle Vertex AI APIのプロンプトログを取得する

このエントリは2026/06/17現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。

以下のエントリの続き。

過去を遡れば、以下のエントリのアップデート情報、と言えるかもしれない。

ドキュメントにはサポートしている旨の記述があるので、取得できるのかどうか確認するのが、このエントリの目的。

環境

Anthropic Messages APIのときと同じだが、バックエンドサービスとして使うLLMは異なる。

リソース利用したもの備考
APIMStandard V2V2であればどのSKUでも実現可能
診断設定は構成済み
LLMGoogle Vertex AI API gemini-3.5-flashgenerateContentとstreamGenerateContentを利用

試してみる

{
    "contents": [
        {
            "role": "user",
            "parts": [
                {
                    "text": "天気の善し悪しはどうやってきまる?"
                }
            ]
        }
    ]
    , "generationConfig": {
        "temperature": 1
        ,"maxOutputTokens": 65535
        ,"topP": 0.95
        ,"thinkingConfig": {
            "thinkingLevel": "MEDIUM"
        }
    },
    "safetySettings": [
        {
            "category": "HARM_CATEGORY_HATE_SPEECH",
            "threshold": "OFF"
        },
        {
            "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
            "threshold": "OFF"
        },
        {
            "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
            "threshold": "OFF"
        },
        {
            "category": "HARM_CATEGORY_HARASSMENT",
            "threshold": "OFF"
        }
    ]
    , "tools": [
      {
        "googleSearch": {}
      }
    ]
}

generateContentでの結果は以下の通り。単なるパススルーなので、Streamingの有効・無効を問わず問題なく通る。

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "天気の「善し悪し(良い天気・悪い天気)」がどうやって決まるかは、大きく分けて**「気象学的な基準(科学的な仕組み)」**と、**「人間の主観や目的(生活や産業における視点)」**の2つの側面から決まります。\n\nそれぞれの視点から詳しく解説します。\n\n---\n\n### 1. 気象学的な基準(科学的な仕組み)\n気象学において、一般的に「良い天気=晴れ」「悪い天気=雨や荒天」とされます。これがどうやって決まるかは、**「雲の量」**と**「気圧の動き」**が関係しています。\n\n#### ① 雲の量(雲量)による決め方\n気象庁では、空全体を「10」としたときに、雲がどれくらい空を覆っているか(雲量)で天気を分類しています。\n*   **快晴(ものすごく良い天気)**:雲量が **0〜1**\n*   **晴れ(良い天気)**:雲量が **2〜8**\n*   **曇り**:雲量が **9〜10**\n\nつまり、空の8割が雲に覆われていても、気象学的には「晴れ(良い天気)」に分類されます。\n\n#### ② 天気を決める「気圧」の仕組み\n天気の善し悪しは、空気の重さ(気圧)の変化によって決まります。\n*   **高気圧(良い天気になりやすい)**\n    上空から地上に向かって空気が押し下げられる「下降気流」が発生します。下降気流が起きると雲が消滅しやすいため、空が晴れ渡り「良い天気」になります。\n*   **低気圧(悪い天気になりやすい)**\n    地上から上空に向かって空気が昇っていく「上昇気流」が発生します。空気が上空で冷やされることで水蒸気がチリと結びつき、雲ができて雨や雪を降らせるため、「悪い天気」になります。\n\n---\n\n### 2. 主観や目的による基準(人にとっての「良い天気」)\n日常生活において、何をもって「良い天気」とするかは、**その人の立場やその日の目的**によって180度変わります。\n\n*   **一般的なレジャーや洗濯**\n    「晴れていて、風が穏やかで、気温がちょうどいい日」が良い天気とされます。\n*   **農業や水資源の管理**\n    雨がまったく降らない「晴れ」が続くと、作物が枯れたり水不足(ダムの貯水率低下)になったりします。そのため、適度に降る雨は「恵みの雨」であり、農家にとっては**「雨が良い天気(望ましい天気)」**になります。\n*   **スキー場やウィンタースポーツ**\n    雪が降らなければ営業できないため、**「大雪」**こそが最高の天気になります。\n*   **花粉症の人や乾燥肌の人**\n    晴れて風が強い日は花粉が飛び散り、空気も乾燥します。あえてしっとりとした**「雨の日」**のほうが、体が楽で過ごしやすい(良い天気)と感じる人もいます。\n*   **日焼けを避けたい人**\n    強い紫外線が降り注ぐ快晴よりも、少し日差しが遮られる**「薄曇り」**のほうが好都合な場合があります。\n\n---\n\n### まとめ\n天気の善し悪しは、以下のように決まります。\n\n1.  **科学的には:** 「高気圧」の働きで雲が少なく(雲量8以下)、雨が降らない状態を「良い天気(晴れ)」と決めている。\n2.  **生活のうえでは:** 「その日の活動や目的、あるいは職業にとって都合が良い状態」を、それぞれが「良い天気」と決めている。\n\n言葉通りの「晴れ」だけが良い天気ではなく、時と場合によってすべての天気が誰かにとっての「良い天気」になり得るのが、天気の面白いところです。",
            "thoughtSignature": ...
          }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 11,
    "candidatesTokenCount": 881,
    "totalTokenCount": 2379,
    "trafficType": "ON_DEMAND",
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 11
      }
    ],
    "candidatesTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 881
      }
    ],
    "thoughtsTokenCount": 1487
  },
  "modelVersion": "gemini-3.5-flash",
  "createTime": "2026-06-19T09:20:32.179343Z",
  "responseId": ....
}

で、本題はここから。プロンプト利用データがAPIMのApiManagementGatewayLlmLogや、Application InsightsのCustom metricsで取得できるのか?結論から言うと、Native APIを使っている場合には取得できない。以下はStreaming無効時のApiManagementGatewayLlmLogの例(Streaming有効時でも同様)。Token usageはゼロであることがわかる。しかもSequenceNumberはゼロ以外に存在しない(Anthropic Messages APIのときは、Request/Responseで1と2がそれぞれ存在していた)。

同様に、customMetricsにもメトリクスが記録されない(Native APIを使っている場合、llm-emit-token-metricポリシーが想定するスキーマと異なるため、メトリックを取得できない)。

つまり

以前から変わらず、Vertex AI APIの場合は、OpenAI互換APIでなければ取得できないようである。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください