ML.GENERATE_TEXT 関数を使用してテキストを生成する
このドキュメントでは、Vertex AI モデルを表す BigQuery ML リモートモデルを作成し、そのリモートモデルを ML.GENERATE_TEXT
関数と組み合わせてテキストを生成する方法について説明します。
対応しているリモートモデルのタイプは次のとおりです。
- 一般提供またはプレビューの Gemini モデルのいずれかに対するリモートモデル。
- Anthropic Claude モデルを介したリモートモデル。
- Llama モデルを介したリモートモデル
- Mistral AI モデルを介したリモートモデル
- サポートされているオープンモデルを介したリモートモデル。
選択した Vertex AI モデルに応じて、オブジェクト テーブルからの非構造化データ入力または標準テーブルからのテキスト入力に基づき、テキストを生成できます。
必要なロール
リモートモデルを作成してテキストを生成するには、次の Identity and Access Management(IAM)ロールが必要です。
- BigQuery データセット、テーブル、モデルの作成と使用: プロジェクトに対する BigQuery データ編集者(
roles/bigquery.dataEditor
)。 BigQuery 接続の作成、委任、使用: プロジェクトに対する BigQuery 接続管理者(
roles/bigquery.connectionsAdmin
)。デフォルト接続が構成されていない場合は、
CREATE MODEL
ステートメントの実行時に作成して設定できます。これを行うには、プロジェクトに対する BigQuery 管理者(roles/bigquery.admin
)が必要です。詳細については、デフォルト接続を構成するをご覧ください。接続のサービス アカウントに権限を付与する: Vertex AI エンドポイントを含むプロジェクトに対するプロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin
)。これは、モデル名をエンドポイントとして指定して作成するリモートモデルの現在のプロジェクトです。これは、エンドポイントとして URL を指定して作成したリモートモデルの URL で識別されるプロジェクトです。リモートモデルを使用してオブジェクト テーブルの非構造化データを分析し、オブジェクト テーブルで使用する Cloud Storage バケットが Vertex AI エンドポイントとは異なるプロジェクトにある場合は、オブジェクト テーブルで使用される Cloud Storage バケットに対するストレージ管理者(
roles/storage.admin
)も必要です。BigQuery ジョブを作成する: プロジェクトに対する BigQuery ジョブユーザー(
roles/bigquery.jobUser
)。
これらの事前定義ロールには、このドキュメントのタスクを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
- データセットを作成する:
bigquery.datasets.create
- 接続を作成、委任、使用する:
bigquery.connections.*
- サービス アカウントの権限を設定する:
resourcemanager.projects.getIamPolicy
とresourcemanager.projects.setIamPolicy
- モデルを作成して推論を実行する。
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
データセットを作成する
リソースを格納する BigQuery データセットを作成します。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
[アクションを表示] > [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に、データセットの名前を入力します。
[ロケーション タイプ] で、データセットのロケーションを選択します。
[データセットを作成] をクリックします。
bq
接続を作成する
デフォルトの接続が構成されているか、BigQuery 管理者ロールが付与されている場合は、この手順をスキップできます。
リモートモデルが使用する Cloud リソース接続を作成し、接続のサービス アカウントを取得します。前の手順で作成したデータセットと同じロケーションに接続を作成します。
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインで、[
データを追加] をクリックします。[データを追加] ダイアログが開きます。
[フィルタ条件] ペインの [データソースのタイプ] セクションで、[ビジネス アプリケーション] を選択します。
または、[データソースを検索] フィールドに「
Vertex AI
」と入力します。[特徴量データソース] セクションで、[Vertex AI] をクリックします。
[Vertex AI モデル: BigQuery フェデレーション] ソリューション カードをクリックします。
[接続タイプ] リストで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。
[接続 ID] フィールドに接続の名前を入力します。
[接続を作成] をクリックします。
[接続へ移動] をクリックします。
[接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。
bq
コマンドライン環境で接続を作成します。
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
--project_id
パラメータは、デフォルト プロジェクトをオーバーライドします。次のように置き換えます。
REGION
: 接続のリージョンPROJECT_ID
: 実際の Google Cloud プロジェクト IDCONNECTION_ID
: 接続の ID
接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。
トラブルシューティング: 次の接続エラーが発生した場合は、Google Cloud SDK を更新します。
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
後の手順で使用するため、サービス アカウント ID を取得してコピーします。
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
出力は次のようになります。
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
google_bigquery_connection
リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、US
リージョンに my_cloud_resource_connection
という名前の Cloud リソース接続を作成します。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
サービス アカウントにアクセス権を付与する
リモートモデルが使用する接続のサービス アカウントに Vertex AI ユーザー ロールを付与する必要があります。リモートモデルを使用してオブジェクト テーブルデータからテキストを生成する場合は、オブジェクト テーブルが使用する接続のサービス アカウントにも Vertex AI ユーザー ロールを付与する必要があります。
リモートモデル接続のサービス アカウントにロールを付与する
接続のサービス アカウントに Vertex AI ユーザー ロールを付与します。
リモートモデルの作成時にエンドポイントを URL(endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-2.0-flash'
など)として指定する場合は、URL に指定する同じプロジェクト内でこのロールを付与してください。
リモートモデルの作成時にモデル名(endpoint = 'gemini-2.0-flash'
など)を使用してエンドポイントを指定する場合は、リモートモデルを作成するプロジェクト内でこのロールを付与してください。
別のプロジェクトでロールを付与すると、「bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
」というエラーが発生します。
ロールを付与する手順は次のとおりです。
コンソール
[IAM と管理] ページに移動します。
[
追加] をクリックします。[プリンシパルを追加] ダイアログが開きます。
[新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。
[ロールを選択] フィールドで、[Vertex AI] を選択し、[Vertex AI ユーザー] を選択します。
[保存] をクリックします。
gcloud
gcloud projects add-iam-policy-binding
コマンドを使用します。
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None
次のように置き換えます。
PROJECT_NUMBER
: プロジェクトの番号MEMBER
: 先ほどコピーしたサービス アカウント ID
オブジェクト テーブル接続のサービス アカウントにロールを付与する
リモートモデルを使用してオブジェクト テーブルデータからテキストを生成する場合は、オブジェクト テーブル接続のサービス アカウントに Vertex AI ユーザーロールを付与します。
オブジェクト テーブル接続のサービス アカウントを確認する手順は次のとおりです。
[BigQuery] ページに移動します。
[エクスプローラ] ペインで、オブジェクト テーブルを含むデータセットを開きます。
オブジェクト テーブルを選択します。
エディタペインで、[詳細] タブをクリックします。
[接続 ID] フィールドの接続名をメモします。
[エクスプローラ] ペインで、[外部接続] フォルダを開きます。
オブジェクト テーブルの [接続 ID] フィールドの接続と一致する接続を選択します。
[サービス アカウント ID] フィールドの値をコピーします。
ロールを付与する手順は次のとおりです。
コンソール
[IAM と管理] ページに移動します。
[
追加] をクリックします。[プリンシパルを追加] ダイアログが開きます。
[新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。
[ロールを選択] フィールドで、[Vertex AI] を選択し、[Vertex AI ユーザー] を選択します。
[保存] をクリックします。
gcloud
gcloud projects add-iam-policy-binding
コマンドを使用します。
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None
次のように置き換えます。
PROJECT_NUMBER
: プロジェクトの番号MEMBER
: 先ほどコピーしたサービス アカウント ID
パートナー モデルを有効にする
このステップは、Anthropic Claude、Llama、Mistral AI モデルを使用する場合にのみ必要です。
Google Cloud コンソールで、Vertex AI の [Model Garden] ページに移動します。
使用する Claude モデルを検索またはブラウジングします。
モデルカードをクリックします。
モデルページで [有効にする] をクリックします。
必要な有効化情報を記入し、[次へ] をクリックします。
[利用規約] セクションで、チェックボックスをオンにします。
[同意する] をクリックして利用規約に同意し、モデルを有効にします。
オープンモデルをデプロイする
サポートされているオープンモデルを使用する場合は、まずそのモデルを Vertex AI にデプロイする必要があります。詳細については、オープンモデルをデプロイするをご覧ください。
BigQuery ML リモートモデルを作成する
リモートモデルを作成します。
オープンモデル
Google Cloud コンソールで、[BigQuery] ページに移動します。
SQL エディタを使用してリモートモデルを作成します。
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`} OPTIONS (ENDPOINT = 'https://ENDPOINT_REGION-aiplatform.googleapis.com/v1/projects/ENDPOINT_PROJECT_ID/locations/ENDPOINT_REGION/endpoints/ENDPOINT_ID');
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを保存するデータセットの ID。このデータセットは、使用している接続と同じロケーションに存在する必要があります。MODEL_NAME
: モデルの名前。REGION
: 接続で使用されるリージョン。CONNECTION_ID
: BigQuery 接続の ID。この値は、 Google Cloud コンソールで接続の詳細を表示し、[接続 ID] に表示される完全修飾された接続 ID の最後のセクションの値をコピーすることで取得できます。例:
projects/myproject/locations/connection_location/connections/myconnection
。ENDPOINT_REGION
: オープンモデルがデプロイされているリージョン。ENDPOINT_PROJECT_ID
: オープンモデルがデプロイされているプロジェクト。ENDPOINT_ID
: オープンモデルで使用される HTTPS エンドポイントの ID。エンドポイント ID は、[オンライン予測] ページでオープンモデルを探して、その [ID] フィールドの値をコピーすることで取得できます。
その他のすべてのモデル
Google Cloud コンソールで、[BigQuery] ページに移動します。
SQL エディタを使用してリモートモデルを作成します。
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS (ENDPOINT = 'ENDPOINT');
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを保存するデータセットの ID。このデータセットは、使用している接続と同じロケーションに存在する必要があります。MODEL_NAME
: モデルの名前。REGION
: 接続で使用されるリージョン。CONNECTION_ID
: BigQuery 接続の ID。この値は、 Google Cloud コンソールで接続の詳細を表示し、[接続 ID] に表示される完全修飾された接続 ID の最後のセクションの値をコピーすることで取得できます。例:
projects/myproject/locations/connection_location/connections/myconnection
。ENDPOINT
: 使用する Vertex AI モデルのエンドポイント。事前トレーニング済みの Vertex AI モデル、Claude モデル、Mistral AI モデルの場合は、モデルの名前を指定します。これらのモデルの一部では、モデルの特定のバージョンを名前の一部として指定できます。サポートされている Gemini モデルでは、グローバル エンドポイントを指定して可用性を向上させることができます。
Llama モデルの場合は、
openapi/<publisher_name>/<model_name>
形式の OpenAI API エンドポイントを指定します。例:openapi/meta/llama-3.1-405b-instruct-maas
対応しているモデルの名前とバージョンについては、
ENDPOINT
をご覧ください。指定する Vertex AI モデルは、リモートモデルを作成するロケーションで使用できる必要があります。詳細については、ロケーションをご覧ください。
標準テーブルのデータからテキストを生成する
標準テーブルからのプロンプト データを使って、ML.GENERATE_TEXT
関数でテキストを生成します。
Gemini
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)}, STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences, GROUND_WITH_GOOGLE_SEARCH AS ground_with_google_search, SAFETY_SETTINGS AS safety_settings, REQUEST_TYPE AS request_type) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。TABLE_NAME
: プロンプトを含むテーブルの名前。このテーブルには、prompt
という名前の列が必要です。または、エイリアスを使用して別の名前の列を使用することもできます。PROMPT_QUERY
: プロンプト データを提供するクエリ。このクエリは、prompt
という名前の列を生成する必要があります。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,8192]
の範囲内である必要があります。 レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは128
です。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,1.0]
の範囲内の値にする必要があります。デフォルトは0
です。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。デフォルトは0.95
です。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。STOP_SEQUENCES
:ARRAY<STRING>
値。指定された文字列がモデルからのレスポンスに含まれている場合に、その文字列を削除します。文字列は、大文字と小文字の区別を含めて完全に一致します。デフォルトは空の配列です。GROUND_WITH_GOOGLE_SEARCH
: Vertex AI モデルがレスポンスを生成するときに [Google 検索によるグラウンディング](/vertex-ai/generative-ai/docs/grounding/overview#ground-public) を使用するかどうかを決定するBOOL
値。グラウンディングを使用すると、モデルは回答の生成時にインターネットから追加情報を使用できるため、モデルの回答をより具体的で事実に基づくものにできます。flatten_json_output
とこのフィールドの両方がTrue
に設定されている場合、結果に追加のml_generate_text_grounding_result
列が含まれ、モデルが追加情報の収集に使用したソースが示されます。デフォルトはFALSE
です。SAFETY_SETTINGS
: レスポンスのフィルタリングに使用するコンテンツ セーフティのしきい値を構成するARRAY<STRUCT<STRING AS category, STRING AS threshold>>
値。構造体の最初の要素は有害性カテゴリを指定し、構造体の 2 番目の要素は対応するブロックのしきい値を指定します。モデルは、これらの設定に違反するコンテンツを除外します。各カテゴリを指定できるのは 1 回のみです。たとえば、STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)
とSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold)
の両方を指定することはできません。特定のカテゴリに安全性設定がない場合は、BLOCK_MEDIUM_AND_ABOVE
安全性設定が使用されます。 サポートされているカテゴリは次のとおりです。HARM_CATEGORY_HATE_SPEECH
HARM_CATEGORY_DANGEROUS_CONTENT
HARM_CATEGORY_HARASSMENT
HARM_CATEGORY_SEXUALLY_EXPLICIT
BLOCK_NONE
(制限付き)BLOCK_LOW_AND_ABOVE
BLOCK_MEDIUM_AND_ABOVE
(デフォルト)BLOCK_ONLY_HIGH
HARM_BLOCK_THRESHOLD_UNSPECIFIED
REQUEST_TYPE
: Gemini モデルに送信する推論リクエストのタイプを指定するSTRING
値。リクエストの種類によって、リクエストで使用する割り当てが決まります。有効な値は以下のとおりです。DEDICATED
:ML.GENERATE_TEXT
関数はプロビジョンド スループットの割り当てのみを使用します。プロビジョンド スループットの割り当てが使用できない場合、ML.GENERATE_TEXT
関数はエラーProvisioned throughput is not purchased or is not active
を返します。SHARED
: プロビジョンド スループットの割り当てを購入している場合でも、ML.GENERATE_TEXT
関数では動的共有割り当て(DSQ)のみが使用されます。UNSPECIFIED
:ML.GENERATE_TEXT
関数は、次のように割り当てを使用します。- プロビジョンド スループットの割り当てを購入していない場合、
ML.GENERATE_TEXT
関数は DSQ 割り当てを使用します。 - プロビジョンド スループットの割り当てを購入している場合、
ML.GENERATE_TEXT
関数は最初にプロビジョンド スループットの割り当てを使用します。リクエストがプロビジョンド スループットの割り当てを超えると、オーバーフロー トラフィックは DSQ 割り当てを使用します。
- プロビジョンド スループットの割り当てを購入していない場合、
デフォルトは
UNSPECIFIED
です。詳細については、Vertex AI プロビジョニング スループットを使用するをご覧ください。
例 1
次の例は、これらの特性を持つリクエストを示しています。
articles
テーブルのbody
列のテキストの概要を求めます。- モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT(TRUE AS flatten_json_output));
例 2
次の例は、これらの特性を持つリクエストを示しています。
- クエリを使用して、プロンプトの接頭辞とテーブル列を連結する文字列を連結して、プロンプト データを作成します。
- 短いレスポンスを返します。
- モデルからの JSON レスポンスを解析して個別の列に分割したりはしません。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 100 AS max_output_tokens, FALSE AS flatten_json_output));
例 3
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, TABLE mydataset.prompts, STRUCT(TRUE AS flatten_json_output));
例 4
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - 短いレスポンスを返します。
- JSON レスポンスを個別の列にフラット化します。
- レスポンスのグラウンディング用に一般公開のウェブデータを取得して返します。
- 2 つの安全性設定を使用して、安全でないレスポンスを除外します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, TABLE mydataset.prompts, STRUCT( 100 AS max_output_tokens, 0.5 AS top_p, TRUE AS flatten_json_output, TRUE AS ground_with_google_search, [STRUCT('HARM_CATEGORY_HATE_SPEECH' AS category, 'BLOCK_LOW_AND_ABOVE' AS threshold), STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)] AS safety_settings));
例 5
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - より長いレスポンスを返します。
- JSON レスポンスを個別の列にフラット化します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.flash_2_model`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 8192 AS max_output_tokens, TRUE AS flatten_json_output));
例 6
次の例は、これらの特性を持つリクエストを示しています。
articles
テーブルのbody
列のテキストの概要を求めます。- JSON レスポンスを個別の列にフラット化します。
- レスポンスのグラウンディング用に一般公開のウェブデータを取得して返します。
- 2 つの安全性設定を使用して、安全でないレスポンスを除外します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT( .1 AS TEMPERATURE, TRUE AS flatten_json_output, TRUE AS ground_with_google_search, [STRUCT('HARM_CATEGORY_HATE_SPEECH' AS category, 'BLOCK_LOW_AND_ABOVE' AS threshold), STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)] AS safety_settings));
Claude
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)}, STRUCT(TOKENS AS max_output_tokens, TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。TABLE_NAME
: プロンプトを含むテーブルの名前。このテーブルには、prompt
という名前の列が必要です。または、エイリアスを使用して別の名前の列を使用することもできます。PROMPT_QUERY
: プロンプト データを提供するクエリ。このクエリは、prompt
という名前の列を生成する必要があります。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,4096]
の範囲内である必要があります。 レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは128
です。TOP_K
:[1,40]
の範囲内のINT64
値。これにより、モデルが選択を検討するトークンの初期プールが決まります。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。値を指定しない場合、モデルは適切な値を決定します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。値を指定しない場合、モデルは適切な値を決定します。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。
例 1
次の例は、これらの特性を持つリクエストを示しています。
articles
テーブルのbody
列のテキストの概要を求めます。- モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT(TRUE AS flatten_json_output));
例 2
次の例は、これらの特性を持つリクエストを示しています。
- クエリを使用して、プロンプトの接頭辞とテーブル列を連結する文字列を連結して、プロンプト データを作成します。
- 短いレスポンスを返します。
- モデルからの JSON レスポンスを解析して個別の列に分割したりはしません。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 100 AS max_output_tokens, FALSE AS flatten_json_output));
例 3
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, TABLE mydataset.prompts, STRUCT(TRUE AS flatten_json_output));
Llama
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)}, STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。TABLE_NAME
: プロンプトを含むテーブルの名前。このテーブルには、prompt
という名前の列が必要です。または、エイリアスを使用して別の名前の列を使用することもできます。PROMPT_QUERY
: プロンプト データを提供するクエリ。このクエリは、prompt
という名前の列を生成する必要があります。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,4096]
の範囲内である必要があります。 レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは128
です。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,1.0]
の範囲内の値にする必要があります。デフォルトは0
です。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。デフォルトは0.95
です。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。STOP_SEQUENCES
:ARRAY<STRING>
値。指定された文字列がモデルからのレスポンスに含まれている場合に、その文字列を削除します。文字列は、大文字と小文字の区別を含めて完全に一致します。デフォルトは空の配列です。
例 1
次の例は、これらの特性を持つリクエストを示しています。
articles
テーブルのbody
列のテキストの概要を求めます。- モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT(TRUE AS flatten_json_output));
例 2
次の例は、これらの特性を持つリクエストを示しています。
- クエリを使用して、プロンプトの接頭辞とテーブル列を連結する文字列を連結して、プロンプト データを作成します。
- 短いレスポンスを返します。
- モデルからの JSON レスポンスを解析して個別の列に分割したりはしません。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 100 AS max_output_tokens, FALSE AS flatten_json_output));
例 3
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, TABLE mydataset.prompts, STRUCT(TRUE AS flatten_json_output));
Mistral AI
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)}, STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。TABLE_NAME
: プロンプトを含むテーブルの名前。このテーブルには、prompt
という名前の列が必要です。または、エイリアスを使用して別の名前の列を使用することもできます。PROMPT_QUERY
: プロンプト データを提供するクエリ。このクエリは、prompt
という名前の列を生成する必要があります。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,4096]
の範囲内である必要があります。 レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは128
です。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,1.0]
の範囲内の値にする必要があります。デフォルトは0
です。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。デフォルトは0.95
です。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。STOP_SEQUENCES
:ARRAY<STRING>
値。指定された文字列がモデルからのレスポンスに含まれている場合に、その文字列を削除します。文字列は、大文字と小文字の区別を含めて完全に一致します。デフォルトは空の配列です。
例 1
次の例は、これらの特性を持つリクエストを示しています。
articles
テーブルのbody
列のテキストの概要を求めます。- モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT(TRUE AS flatten_json_output));
例 2
次の例は、これらの特性を持つリクエストを示しています。
- クエリを使用して、プロンプトの接頭辞とテーブル列を連結する文字列を連結して、プロンプト データを作成します。
- 短いレスポンスを返します。
- モデルからの JSON レスポンスを解析して個別の列に分割したりはしません。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 100 AS max_output_tokens, FALSE AS flatten_json_output));
例 3
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, TABLE mydataset.prompts, STRUCT(TRUE AS flatten_json_output));
オープンモデル
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)}, STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。TABLE_NAME
: プロンプトを含むテーブルの名前。このテーブルには、prompt
という名前の列が必要です。または、エイリアスを使用して別の名前の列を使用することもできます。PROMPT_QUERY
: プロンプト データを提供するクエリ。このクエリは、prompt
という名前の列を生成する必要があります。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,4096]
の範囲内である必要があります。 レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。 値を指定しない場合、モデルは適切な値を決定します。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,1.0]
の範囲内の値にする必要があります。 値を指定しない場合、モデルは適切な値を決定します。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_K
:[1,40]
の範囲内のINT64
値。これにより、モデルが選択を検討するトークンの初期プールが決まります。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。値を指定しない場合、モデルは適切な値を決定します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。値を指定しない場合、モデルは適切な値を決定します。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。
例 1
次の例は、これらの特性を持つリクエストを示しています。
articles
テーブルのbody
列のテキストの概要を求めます。- モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT(TRUE AS flatten_json_output));
例 2
次の例は、これらの特性を持つリクエストを示しています。
- クエリを使用して、プロンプトの接頭辞とテーブル列を連結する文字列を連結して、プロンプト データを作成します。
- 短いレスポンスを返します。
- モデルからの JSON レスポンスを解析して個別の列に分割したりはしません。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 100 AS max_output_tokens, FALSE AS flatten_json_output));
例 3
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - モデルからの JSON レスポンスを解析し、個別の列に分割します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.text_model`, TABLE mydataset.prompts, STRUCT(TRUE AS flatten_json_output));
オブジェクト テーブルのデータからテキストを生成する
Gemini モデルで ML.GENERATE_TEXT
関数を使用して、オブジェクト テーブルの非構造化データを分析します。プロンプト データは prompt
パラメータで指定します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE PROJECT_ID.DATASET_ID.TABLE_NAME, STRUCT(PROMPT AS prompt, TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences, SAFETY_SETTINGS AS safety_settings) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。これは Gemini モデルである必要があります。TABLE_NAME
: 分析するコンテンツを含むオブジェクト テーブルの名前。分析できるコンテンツの種類の詳細については、入力をご覧ください。オブジェクト テーブルで使用される Cloud Storage バケットは、モデルを作成し、
ML.GENERATE_TEXT
関数を呼び出すプロジェクトに含まれている必要があります。オブジェクト テーブルで使用される Cloud Storage バケットを含むプロジェクトとは異なるプロジェクトでML.GENERATE_TEXT
関数を呼び出す場合は、service-A@gcp-sa-aiplatform.iam.gserviceaccount.com
サービス アカウントにバケットレベルでストレージ管理者ロールを付与する必要があります。PROMPT
: コンテンツの分析に使用するプロンプト。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,4096]
の範囲内である必要があります。 レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。 値を指定しない場合、モデルは適切な値を決定します。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,1.0]
の範囲内の値にする必要があります。 値を指定しない場合、モデルは適切な値を決定します。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_K
:[1,40]
の範囲内のINT64
値。これにより、モデルが選択を検討するトークンの初期プールが決まります。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。値を指定しない場合、モデルは適切な値を決定します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムな回答を減らしたい場合は小さい値を、ランダムな回答を増やしたい場合は大きい値を指定します。値を指定しない場合、モデルは適切な値を決定します。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。
例
この例では、feedback
という名前のオブジェクト テーブルから音声コンテンツを翻訳して音声文字変換します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.audio_model`, TABLE `mydataset.feedback`, STRUCT('What is the content of this audio clip, translated into Spanish?' AS PROMPT, TRUE AS FLATTEN_JSON_OUTPUT));
この例では、invoices
という名前のオブジェクト テーブルから PDF コンテンツを分類します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.classify_model`, TABLE `mydataset.invoices`, STRUCT('Classify this document based on the invoice total, using the following categories: 0 to 100, 101 to 200, greater than 200' AS PROMPT, TRUE AS FLATTEN_JSON_OUTPUT));