Cloud Run functions を使用して処理ロジックを追加する

Cloud Run 関数を使用すると、Vertex AI カスタム トレーニング モデルと BigQuery アプリノードからの出力データをさらに処理できます。これらの統合は、アプリノードと次のように使用できます。

  • Vertex AI カスタムモデル ノード: Cloud Run 関数を使用して、元の Vertex AI カスタムモデルの予測結果をポストプロセッシングします。
  • BigQuery ノード: Cloud Run 関数を使用して、元のアノテーションを含むカスタマイズされた BigQuery 行を生成します。

App Platform で使用するすべての Cloud Run 関数は、次の要件を満たす必要があります。

  • Cloud Run functions は Http トリガーを提供する必要があります。
  • Cloud Run 関数は AppPlatformCloudFunctionRequest JSON 文字列を受け取り、AppPlatformCloudFunctionResponse JSON 文字列を返す必要があります。
  • リクエストとレスポンスに保存されるアノテーション ペイロード スキーマは、ターゲット モデルの仕様に従っている必要があります。

API 定義: AppPlatformMetadataAppPlatformCloudFunctionRequestAppPlatformCloudFunctionResponse

// Message of essential metadata of App Platform.
// This message is usually attached to a certain model output annotation for
// customer to identify the source of the data.
message AppPlatformMetadata {
  // The application resource name.
  string application = 1;
  // The instance resource id. Instance is the nested resource of application
  // under collection 'instances'.
  string instance_id = 2;
  // The node name of the application graph.
  string node = 3;
  // The referred model resource name of the application node.
  string processor = 4;
}

// For any Cloud Run function based customer processing logic, customer's cloud
// function is expected to receive AppPlatformCloudFunctionRequest as request
// and send back AppPlatformCloudFunctionResponse as response.
// Message of request from AppPlatform to Cloud Run functions.
message AppPlatformCloudFunctionRequest {
  // The metadata of the AppPlatform for customer to identify the source of the
  // payload.
  AppPlatformMetadata app_platform_metadata = 1;
  // A general annotation message that uses struct format to represent different
  // concrete annotation protobufs.
  message StructedInputAnnotation {
    // The ingestion time of the current annotation.
    int64 ingestion_time_micros = 1;
    // The struct format of the actual annotation.
    protobuf.Struct annotation = 2;
  }
  // The actual annotations to be processed by the customized Cloud Run function.
  repeated StructedInputAnnotation annotations = 2;
}

// Message of the response from customer's Cloud Run function to AppPlatform.
message AppPlatformCloudFunctionResponse {
  // A general annotation message that uses struct format to represent different
  // concrete annotation protobufs.
  message StructedOutputAnnotation {
    // The struct format of the actual annotation.
    protobuf.Struct annotation = 1;
  }

  // The modified annotations that is returned back to AppPlatform.
  // If the annotations fields are empty, then those annotations will be dropped
  // by AppPlatform.
  repeated StructedOutputAnnotation annotations = 2;
}

使用例

次のコードを使用して、Vertex AI カスタム トレーニング モデルのアノテーションをポストプロセッシングし、アノテーションを定数キー値ペアに置き換えます。

Python

import functions_framework
from flask import jsonify

@functions_framework.http
def hello_http(request):
   request_json = request.get_json(silent=True)
   request_args = request.args

   if request_json and 'annotations' in request_json:
       annotations = []
       for ele in request_json['annotations']:
           for k, v in ele.items():
               if k == "annotation":
                if "predictions" in v:
                    # Replace the annotation.
                    v["predictions"][0] = {"user": "googler"}
                    annotations.append({"annotation" : v})
   else:
       annotations = 'Failure'
   return jsonify(annotations=annotations)