使用資料調整模型

本文將說明如何建立參照 Vertex AI 模型的 BigQuery ML 遠端模型,然後設定模型以執行監督式調整。Vertex AI 模型必須是下列其中一種:

  • gemini-2.0-flash-001
  • gemini-2.0-flash-lite-001
  • gemini-1.5-pro-002
  • gemini-1.5-flash-002

建立遠端模型後,請使用 ML.EVALUATE 函式評估模型,並確認模型的效能是否符合您的用途。接著,您可以使用該模型搭配 ML.GENERATE_TEXT 函式,分析 BigQuery 資料表中的文字。

詳情請參閱「Vertex AI Gemini API 模型監督式調整」。

所需權限

  • 如要建立連結,您必須具備下列身分與存取權管理 (IAM) 角色的成員資格:

    • roles/bigquery.connectionAdmin
  • 如要將權限授予連線的服務帳戶,您必須具備下列權限:

    • resourcemanager.projects.setIamPolicy
  • 如要使用 BigQuery ML 建立模型,您需要具備下列 IAM 權限:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • 如要執行推論,您需要具備下列權限:

    • bigquery.tables.getData 在桌上
    • 模型的 bigquery.models.getData
    • bigquery.jobs.create

事前準備

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection,Vertex AI, and Compute Engine APIs.

    Enable the APIs

建立資料集

建立 BigQuery 資料集來容納資源:

控制台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」頁面

  2. 在「Explorer」窗格中,按一下專案名稱。

  3. 依序點選 「View actions」(查看動作) >「Create dataset」(建立資料集)

  4. 在「Create dataset」頁面上執行下列操作:

    • 在「Dataset ID」(資料集 ID) 部分,輸入資料集名稱。

    • 在「位置類型」中,選取資料集的位置。

    • 點選「建立資料集」

bq

  1. 如要建立新的資料集,請使用 bq mk 指令搭配 --location 標記:

    bq --location=LOCATION mk -d DATASET_ID

    更改下列內容:

    • LOCATION:資料集的位置
    • DATASET_ID 是您要建立的資料集 ID。
  2. 確認資料集已建立:

    bq ls

建立連線

如果您已設定具備適當權限的預設連線,可以略過這個步驟。

為遠端模型建立Cloud 資源連線,並取得連線的服務帳戶。請在與您在上一個步驟中建立的資料集相同的位置建立連線。

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往 BigQuery

  2. 在「Explorer」窗格中,按一下 「新增資料」

    「新增資料」UI 元素。

    「Add data」對話方塊隨即開啟。

  3. 在「Filter By」窗格中的「Data Source Type」部分,選取「Business Applications」

    或者,您也可以在「Search for data sources」欄位中輸入 Vertex AI

  4. 在「精選資料來源」部分,按一下「Vertex AI」

  5. 按一下「Vertex AI 模型:BigQuery 聯盟」解決方案資訊卡。

  6. 在「連線類型」清單中,選取「Vertex AI 遠端模型、遠端函式和 BigLake (Cloud 資源)」

  7. 在「連線 ID」欄位中,輸入連線的名稱。

  8. 點選「建立連線」

  9. 按一下「前往連線」

  10. 在「連線資訊」窗格中,複製服務帳戶 ID,以便在後續步驟中使用。

bq

  1. 在指令列環境中建立連線:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    --project_id 參數會覆寫預設專案。

    更改下列內容:

    • REGION:您的連線區域
    • PROJECT_ID:您的 Google Cloud 專案 ID
    • CONNECTION_ID:連線 ID

    建立連線資源時,BigQuery 會建立專屬的系統服務帳戶,並將該帳戶與連線建立關聯。

    疑難排解:如果您收到下列連線錯誤,請更新 Google Cloud SDK

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. 擷取並複製服務帳戶 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 資源連線:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含 .tf 副檔名,例如 main.tf。在本教學課程中,檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。

    將範例程式碼複製到新建立的 main.tf 中。

    您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 查看並修改要套用至環境的範例參數。
  4. 儲存變更。
  5. 初始化 Terraform。這項操作只需對每個目錄執行一次。
    terraform init

    如要使用最新版的 Google 供應器,您可以選擇加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,確認 Terraform 要建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

授予連線的服務帳戶存取權

授予服務帳戶存取 Vertex AI 的權限。如未授予權限,系統會顯示錯誤訊息。請選取下列任一選項:

主控台

  1. 前往「IAM & Admin」(IAM 與管理) 頁面。

    前往「IAM & Admin」(IAM 與管理)

  2. 按一下 「授予存取權」

  3. 在「新增主體」中,輸入先前複製的服務帳戶 ID。

  4. 按一下「請選擇角色」

  5. 在「Filter」 中輸入 Vertex AI Service Agent,然後選取該角色。

  6. 按一下 [儲存]

gcloud

使用 gcloud projects add-iam-policy-binding 指令

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None

請依指示取代下列項目:

  • PROJECT_NUMBER:專案編號。
  • MEMBER:先前複製的服務帳戶 ID。

與連線相關聯的服務帳戶是 BigQuery 連線委派服務代理人的例項,因此可以指派服務代理人角色。

使用監督式調整功能建立模型

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中,執行下列查詢來建立遠端模型

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (
      ENDPOINT = 'ENDPOINT',
      MAX_ITERATIONS = MAX_ITERATIONS,
      LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER,
      DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD',
      DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION,
      DATA_SPLIT_COL = 'DATA_SPLIT_COL',
      EVALUATION_TASK = 'EVALUATION_TASK',
      PROMPT_COL = 'INPUT_PROMPT_COL',
      INPUT_LABEL_COLS = INPUT_LABEL_COLS)
    AS SELECT PROMPT_COLUMN, LABEL_COLUMN
    FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;

    請依指示取代下列項目:

    • PROJECT_ID:建立模型的專案 ID。
    • DATASET_ID:包含模型的資料集 ID。這個資料集必須位於支援的 Vertex AI 區域
    • MODEL_NAME:模型名稱。
    • REGION:連線使用的區域。
    • CONNECTION_ID:BigQuery 連線的 ID。此連線必須與您使用的資料集位於相同的位置

      在 Google Cloud 控制台查看連線詳細資料時,這是 連線 ID 中顯示的完整限定連線 ID 最後一個部分的值,例如 projects/myproject/locations/connection_location/connections/myconnection

    • ENDPOINT:指定要使用的模型名稱的 STRING 值。
    • MAX_ITERATIONSINT64 值,可指定監督式調整要執行的步驟數。MAX_ITERATIONS 值必須介於 1 之間。

      Gemini 模型會使用 epoch 而非步驟進行訓練,因此 BigQuery ML 會將 MAX_ITERATIONS 值轉換為 epoch。MAX_ITERATIONS 的預設值是輸入資料中的列數,相當於一個訓練週期。如要使用多個週期,請指定訓練資料中資料列數的倍數。舉例來說,如果您有 100 列的輸入資料,且想要使用兩個 epoch,請將 200 指定為引數值。如果您提供的值不是輸入資料中資料列數的倍數,BigQuery ML 會捨入至最近的紀元。舉例來說,如果您有 100 列的輸入資料,並為 MAX_ITERATIONS 值指定 101,系統就會以兩個週期執行訓練。

      如要進一步瞭解用於調整 Gemini 模型的參數,請參閱「建立調整工作」。

    • DATA_SPLIT_METHODSTRING 值,指定用於將輸入資料拆分成訓練集和評估集的方法。有效的選項如下:
      • AUTO_SPLIT:BigQuery ML 會自動分割資料。資料分割方式會因輸入表格的列數而異。這是預設值。
      • RANDOM:資料會先隨機處理,再拆分為多組。如要自訂資料分割,您可以搭配使用這個選項和 DATA_SPLIT_EVAL_FRACTION 選項。
      • CUSTOM:使用 DATA_SPLIT_COL 選項提供的資料欄來拆分資料。DATA_SPLIT_COL 值必須是 BOOL 類型的欄名稱。含有 TRUENULL 值的資料列會做為評估資料,而含有 FALSE 值的資料列則做為訓練資料。
      • SEQ:使用 DATA_SPLIT_COL 選項提供的資料欄來拆分資料。DATA_SPLIT_COL 值必須是下列任一類型的資料欄名稱:
        • NUMERIC
        • BIGNUMERIC
        • STRING
        • TIMESTAMP

        系統會根據指定的資料欄,將資料從最小到最大排序。

        n 列會做為評估資料使用,其中 nDATA_SPLIT_EVAL_FRACTION 的指定值。其餘資料列則做為訓練資料使用。

      • NO_SPLIT:不分割資料;所有輸入資料都會用於訓練資料。

      如要進一步瞭解這些資料分割選項,請參閱 DATA_SPLIT_METHOD

    • DATA_SPLIT_EVAL_FRACTIONFLOAT64 值,可指定在執行監督式調整時,要用於評估資料的資料比例。必須是介於 [0, 1.0] 的範圍內的值。預設值為 0.2

      當您將 RANDOMSEQ 指定為 DATA_SPLIT_METHOD 選項的值時,請使用這個選項。如要自訂資料分割,您可以使用 DATA_SPLIT_METHOD 選項搭配 DATA_SPLIT_EVAL_FRACTION 選項。

    • DATA_SPLIT_COLSTRING 值,可指定要用來將輸入資料分類至訓練或評估集的資料欄名稱。當您將 CUSTOMSEQ 指定為 DATA_SPLIT_METHOD 選項的值時,請使用此方法。
    • EVALUATION_TASKSTRING 值,可指定要調整模型執行的任務類型。有效選項如下:
      • TEXT_GENERATION
      • CLASSIFICATION
      • SUMMARIZATION
      • QUESTION_ANSWERING
      • UNSPECIFIED

      預設值為 UNSPECIFIED

    • INPUT_PROMPT_COLSTRING 值,其中包含要用於監督式調整的訓練資料表中提示資料欄的名稱。預設值為 prompt
    • INPUT_LABEL_COLSARRAY<<STRING> 值,其中包含訓練資料表中標籤欄的名稱,可用於監督式調整。您只能在陣列中指定一個元素。預設值為空陣列。這會使 label 成為 LABEL_COLUMN 引數的預設值。
    • PROMPT_COLUMN:訓練資料表中的資料欄,其中包含用於評估 LABEL_COLUMN 資料欄內容的提示。這個欄必須是 STRING 類型,或轉換為 STRING。如果您為 INPUT_PROMPT_COL 選項指定值,則必須為 PROMPT_COLUMN 指定相同的值。否則,此值必須為 prompt。如果資料表沒有 prompt 欄,請使用別名指定現有的資料表欄。例如:AS SELECT hint AS prompt, label FROM mydataset.mytable
    • LABEL_COLUMN:訓練資料表中的資料欄,其中包含用於訓練模型的範例。這個欄必須是 STRING 類型,或轉換為 STRING。如果您為 INPUT_LABEL_COLS 選項指定值,則必須為 LABEL_COLUMN 指定相同的值。否則,此值必須為 label。如果資料表沒有 label 欄,請使用別名指定現有的資料表欄。例如:AS SELECT prompt, feature AS label FROM mydataset.mytable
    • TABLE_PROJECT_ID:包含訓練資料表的專案 ID。
    • TABLE_DATASET:包含訓練資料表的資料集名稱。
    • TABLE_NAME:包含用於訓練模型的資料的資料表名稱。

評估微調後的模型

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中執行下列查詢,評估經過調整的模型:

    SELECT
    *
    FROM
    ML.EVALUATE(
      MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
      TABLE `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`,
      STRUCT('TASK_TYPE' AS task_type, TOKENS AS max_output_tokens,
        TEMPERATURE AS temperature, TOP_K AS top_k,
        TOP_P AS top_p));

    請依指示取代下列項目:

    • PROJECT_ID:包含模型的專案專案 ID。
    • DATASET_ID:包含模型的資料集 ID。
    • MODEL_NAME:模型名稱。
    • TABLE_PROJECT_ID:包含評估資料表的專案 ID。
    • TABLE_DATASET:包含評估資料表的資料集名稱。
    • TABLE_NAME:包含評估資料的資料表名稱。

      資料表中必須有一個資料欄,其名稱必須與模型訓練期間提供的提示資料欄名稱相符。您可以在模型訓練期間使用 prompt_col 選項提供這個值。如果未指定 prompt_col,系統會使用訓練資料中名為 prompt 的資料欄。如果沒有名為 prompt 的資料欄,系統會傳回錯誤。

      資料表必須含有與模型訓練期間提供的標籤資料欄名稱相符的資料欄。您可以在模型訓練期間使用 input_label_cols 選項提供這個值。如果未指定 input_label_cols,系統會使用訓練資料中名為 label 的資料欄。如果沒有名為 label 的資料欄,系統會傳回錯誤。

    • TASK_TYPESTRING 值,指定要評估模型的任務類型。有效選項如下:
      • TEXT_GENERATION
      • CLASSIFICATION
      • SUMMARIZATION
      • QUESTION_ANSWERING
      • UNSPECIFIED
    • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,1024] 的範圍之間。如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。預設值為 128
    • TEMPERATURE:範圍為 [0.0,1.0]FLOAT64 值,用於控制選取符記時的隨機程度。預設為 0

      如果您想藉由提示生成較具確定性、較不具開放性和創意性的回覆,建議調低 temperature 的值。另一方面,如果 temperature 的值較高,則可能產生較多元或有創意的結果。temperature 的值為 0 代表具有確定性,即系統一律會選取可能性最高的回覆。

    • TOP_K:範圍 [1,40] 中的 INT64 值,用於決定模型要考慮的初始符記集合。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設為 40
    • TOP_P:範圍 [0.0,1.0] 中的 FLOAT64 值有助於判斷系統應從 TOP_K 指定的集區中選取哪些符記。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設為 0.95

生成文字

使用 ML.GENERATE_TEXT 函式產生文字:

提示欄

使用表格欄提供提示,產生文字。

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  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_COL 選項設定模型中的特徵欄名稱。否則,模型中的特徵欄名稱預設為 prompt,您也可以使用別名來使用名稱不同的欄。
  • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,8192] 的範圍內。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。預設為 128
  • TEMPERATURE:範圍為 [0.0,1.0]FLOAT64 值,用於控制選取符記時的隨機程度。預設為 0

    如果您想藉由提示生成較具確定性、較不具開放性和創意性的回覆,建議調低 temperature 的值。另一方面,如果 temperature 的值較高,則可能產生較多元或有創意的結果。temperature 的值為 0 代表具有確定性,即系統一律會選取可能性最高的回覆。

  • TOP_P:範圍 [0.0,1.0] 中的 FLOAT64 值可協助判斷所選符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設為 0.95
  • FLATTEN_JSONBOOL 值,用於決定是否要以個別資料欄傳回產生的文字和安全性屬性。預設值為 FALSE
  • STOP_SEQUENCES:如果模型回應中包含指定字串,則會移除該字串的 ARRAY<STRING> 值。字串比對時會完全相符,包括大小寫。預設為空陣列。
  • GROUND_WITH_GOOGLE_SEARCHBOOL 值,用於決定 Vertex AI 模型在產生回覆時是否使用 使用 Google 搜尋的依據。建立基準可讓模型在生成回覆時使用網路上的其他資訊,讓模型回覆更具體且符合事實。當 flatten_json_output 和這個欄位都設為 True 時,結果中會額外包含 ml_generate_text_grounding_result 欄,提供模型用來收集其他資訊的來源。預設為 FALSE
  • SAFETY_SETTINGS:用於設定內容安全門檻以篩選回應的 ARRAY<STRUCT<STRING AS category, STRING AS threshold>> 值。結構體中的第一個元素會指定危害類別,而結構體中的第二個元素會指定相應的封鎖門檻。模型會過濾違反這些設定的內容。每個類別只能指定一次。舉例來說,您無法同時指定 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_TYPESTRING 值,指定要傳送至 Gemini 模型的推論要求類型。要求類型會決定要求使用的配額。有效值如下:
    • DEDICATEDML.GENERATE_TEXT 函式只會使用預先配置的傳輸量配額。如果無法使用預設吞吐量配額,ML.GENERATE_TEXT 函式會傳回錯誤 Provisioned throughput is not purchased or is not active
    • SHARED:即使您已購買預先配置的傳送量配額,ML.GENERATE_TEXT 函式仍只會使用動態共用配額 (DSQ)
    • UNSPECIFIEDML.GENERATE_TEXT 函式會使用下列配額:
      • 如果您未購買佈建傳輸量配額,ML.GENERATE_TEXT 函式會使用 DSQ 配額。
      • 如果您已購買佈建傳輸量配額,ML.GENERATE_TEXT 函式會優先使用佈建傳輸量配額。如果要求超出已配置的處理量配額,溢流流量就會使用 DSQ 配額。
    • 預設值為 UNSPECIFIED

      詳情請參閱「使用 Vertex AI 預留吞吐量」一文。

    以下範例顯示具有下列特徵的要求:

    • 使用 prompts 資料表的 prompt 資料欄做為提示。
    • 傳回簡短且可能的回應。
    • 以個別資料欄傳回產生的文字和安全性屬性。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.mymodel`,
        TABLE mydataset.prompts,
        STRUCT(
          0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
          TRUE AS flatten_json_output));

提示查詢

使用查詢提供提示,生成文字。

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_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:模型名稱。
  • PROMPT_QUERY:提供提示資料的查詢。
  • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,8192] 的範圍內。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。預設為 128
  • TEMPERATURE:範圍為 [0.0,1.0]FLOAT64 值,用於控制選取符記時的隨機程度。預設為 0

    如果您想藉由提示生成較具確定性、較不具開放性和創意性的回覆,建議調低 temperature 的值。另一方面,如果 temperature 的值較高,則可能產生較多元或有創意的結果。temperature 的值為 0 代表具有確定性,即系統一律會選取可能性最高的回覆。

  • TOP_P:範圍 [0.0,1.0] 中的 FLOAT64 值可協助判斷所選符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設為 0.95
  • FLATTEN_JSONBOOL 值,用於決定是否要以個別資料欄傳回產生的文字和安全性屬性。預設值為 FALSE
  • STOP_SEQUENCES:如果模型回應中包含指定字串,則會移除該字串的 ARRAY<STRING> 值。字串比對時會完全相符,包括大小寫。預設為空陣列。
  • GROUND_WITH_GOOGLE_SEARCHBOOL 值,用於決定 Vertex AI 模型在產生回覆時是否使用 使用 Google 搜尋的依據。建立基準可讓模型在生成回覆時使用網路上的其他資訊,讓模型回覆更具體且符合事實。當 flatten_json_output 和這個欄位都設為 True 時,結果中會額外包含 ml_generate_text_grounding_result 欄,提供模型用來收集其他資訊的來源。預設為 FALSE
  • SAFETY_SETTINGS:用於設定內容安全門檻以篩選回應的 ARRAY<STRUCT<STRING AS category, STRING AS threshold>> 值。結構體中的第一個元素會指定危害類別,而結構體中的第二個元素會指定相應的封鎖門檻。模型會過濾違反這些設定的內容。每個類別只能指定一次。舉例來說,您無法同時指定 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_TYPESTRING 值,指定要傳送至 Gemini 模型的推論要求類型。要求類型會決定要求使用的配額。有效值如下:
    • DEDICATEDML.GENERATE_TEXT 函式只會使用預先配置的傳輸量配額。如果無法使用預設吞吐量配額,ML.GENERATE_TEXT 函式會傳回錯誤 Provisioned throughput is not purchased or is not active
    • SHARED:即使您已購買預先配置的傳送量配額,ML.GENERATE_TEXT 函式仍只會使用動態共用配額 (DSQ)
    • UNSPECIFIEDML.GENERATE_TEXT 函式會使用下列配額:
      • 如果您未購買佈建傳輸量配額,ML.GENERATE_TEXT 函式會使用 DSQ 配額。
      • 如果您已購買佈建傳輸量配額,ML.GENERATE_TEXT 函式會優先使用佈建傳輸量配額。如果要求超出已配置的處理量配額,溢流流量就會使用 DSQ 配額。
    • 預設值為 UNSPECIFIED

      詳情請參閱「使用 Vertex AI 預留吞吐量」一文。

    範例 1

    以下範例顯示具有下列特徵的要求:

    • 提示您摘要 articles 資料表 body 欄中的文字。
    • 傳回較長且可能性較高的回覆。
    • 以個別資料欄傳回產生的文字和安全性屬性。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.mymodel`,
        (
          SELECT CONCAT('Summarize this text', body) AS prompt
          FROM mydataset.articles
        ),
        STRUCT(
          0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
          TRUE AS flatten_json_output));

    示例 2

    以下範例顯示具有下列特徵的要求:

    • 使用查詢建立提示資料,方法是將提供提示前置字串的字串與資料表欄串連。
    • 傳回簡短且可能的回應。
    • 不會在個別資料欄中傳回產生的文字和安全性屬性。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.mytuned_model`,
        (
          SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
          FROM mydataset.input_table
        ),
        STRUCT(
          0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
          FALSE AS flatten_json_output));