📃

Google Cloud でのプロンプト管理は Vertex AI Studio を使おう

2024/09/15に公開

背景

Google Cloud では Google Cloud Next '24 にて Vertex AI Studio の Prompt Version Management とその SDK Support が発表されました。[1]
将来的には Google Cloud におけるプロンプト管理はこの機能を使うことになると思われますが、本記事執筆時点では SDK Support は公開されていません。
そのため現時点で Google Cloud でプロンプトを管理するのにどのサービスを使うべきか検討した結果を共有します。

検討にあたっては以下の観点を考慮しました。

  • バージョン管理機能があること
  • 非エンジニアもマネジメントコンソールなどブラウザ上で編集できること
  • プログラムからプロンプトを利用可能であること

検討対象は以下のサービスです。

  • Vertex AI Studio
  • Cloud SQL
  • Spanner
  • BigQuery
  • Bigtable
  • Firestore
  • Memorystore
  • Cloud Storage

調査

Vertex AI Studio

画面上でのプロンプトの保存/編集と履歴管理が可能です。[2]
SDK Support は公開されていません。
ただ、ドキュメントには記載がないですがプロンプトは Dataset として保存されており、クライアントライブラリを利用して取得できます。[3]

import json
from typing import TypedDict
from google.cloud import aiplatform_v1


class Prompt(TypedDict):
    topP: float
    temperature: float
    maxOutputTokens: int
    prompt: str


def get_prompt(
    api_endpoint: str,
    project: str,
    location: str,
    dataset_id: str,
) -> Prompt:
    client_options = {"api_endpoint": api_endpoint}
    client = aiplatform_v1.DatasetServiceClient(client_options=client_options)
    response = client.get_dataset(
        name=f"projects/{project}/locations/{location}/datasets/{dataset_id}"
    )

    text = json.loads(response.metadata["text"])

    return Prompt(
        topP=response.metadata["topP"],
        temperature=response.metadata["temperature"],
        maxOutputTokens=response.metadata["maxOutputTokens"],
        prompt=text["prompt"][0]["parts"][0]["text"],
    )

Cloud SQL

クエリを書くことで画面上でデータ更新は可能です[4]が、非エンジニアには難しいです。
バージョン管理機能はありません。
データにはクライアントライブラリから取得可能です。[5]

Spanner

クエリを書くことで画面上でデータ更新は可能です[6]が、非エンジニアには難しいです。
バージョン管理機能はありません。
データはクライアントライブラリや ORM を利用して取得できます。[7]

BigQuery

DML(データ操作言語)を書くことで画面上でデータ更新は可能です[8]が、非エンジニアには難しいです。
バージョン管理機能はありません。
データはクライアントライブラリでクエリを書くことで取得できます。[9]

Bigtable

Bigtable にはセルにタイムスタンプによるバージョニングがされます[10]が、こちらは今回求めているものではないです。
また画面上での編集機能はありません。
データはクライアントライブラリを利用して取得できます。[11]

Firestore

コンソール上でデータを編集することができます。[12]
またデータはクライアントライブラリを利用して取得できます。[13]
バージョン管理機能はありません。

Memorystore

データはクライアントライブラリを利用して取得できます。[14]
バージョン管理や画面上での編集機能はありません。

Cloud Storage

オブジェクトのバージョニングによってバージョン管理が可能です。[15]
またコンソールやプログラムから非現行バージョンのオブジェクトを復元することができます。[16]

オブジェクトについてはクライアントライブラリを利用することで中身をメモリ上にダウンロードすることができます。[17]

オブジェクトをマネジメントコンソール上で編集することはできません。
プログラム、もしくは手動でオブジェクトをダウンロードし、再アップロードする必要があります。

まとめ

サービス バージョン管理 画面上での編集 プログラムから利用可能か
Vertex AI Studio o o o
Cloud SQL x x o
Spanner x x o
BigQuery x x o
Bigtable x x o
Firestore x o o
Memorystore x x o
Cloud Storage o x o

SDK Support がまだですが、他のサービスを利用する場合は将来的な乗り換えも必要ですし、現時点でも既に Vertex AI Studio を使うのが良さそうです。

脚注
  1. https://www.youtube.com/watch?v=FSGkKHbveWA ↩︎

  2. https://cloud.google.com/vertex-ai/generative-ai/docs/start/quickstarts/quickstart ↩︎

  3. https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform_v1.services.dataset_service.DatasetServiceClient#google_cloud_aiplatform_v1_services_dataset_service_DatasetServiceClient_get_dataset ↩︎

  4. https://cloud.google.com/sql/docs/mysql/manage-data-using-studio?hl=ja ↩︎

  5. https://cloud.google.com/sql/docs/mysql/admin-api/libraries?hl=ja ↩︎

  6. https://cloud.google.com/spanner/docs/modify-data?hl=ja ↩︎

  7. https://cloud.google.com/spanner/docs/api-libraries-overview?hl=ja ↩︎

  8. https://cloud.google.com/bigquery/docs/data-manipulation-language?hl=ja ↩︎

  9. https://cloud.google.com/bigquery/docs/reference/libraries?hl=ja ↩︎

  10. https://cloud.google.com/bigtable/docs/garbage-collection?hl=ja#timestamps ↩︎

  11. https://cloud.google.com/bigtable/docs/reference/libraries ↩︎

  12. https://cloud.google.com/firestore/docs/using-console?hl=ja ↩︎

  13. https://cloud.google.com/firestore/docs/create-database-server-client-library?hl=ja ↩︎

  14. https://cloud.google.com/memorystore/docs/redis/libraries?hl=ja ↩︎

  15. https://cloud.google.com/storage/docs/object-versioning?hl=ja ↩︎

  16. https://cloud.google.com/storage/docs/using-versioned-objects?hl=ja#restore ↩︎

  17. https://cloud.google.com/storage/docs/downloading-objects-into-memory?hl=ja ↩︎

Discussion