使用資料調整模型

本文說明如何建立參照 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 模型監督式微調」。

必要的角色

如要建立及評估微調模型,您需要下列 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) 權限。這是您透過將模型名稱指定為端點所建立遠端模型的目前專案。這是您透過指定網址做為端點所建立遠端模型的網址中,所識別的專案。

  • 建立 BigQuery 工作:專案中的 BigQuery 工作使用者 (roles/bigquery.jobUser)。

這些預先定義的角色具備執行本文中工作所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

  • 建立資料集:bigquery.datasets.create
  • 建立、委派及使用連線: bigquery.connections.*
  • 設定服務帳戶權限: resourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy
  • 建立模型並執行推論:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

事前準備

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

    Go to project selector

  2. Verify 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. 在「建立資料集」頁面中,執行下列操作:

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

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

    • 點選「建立資料集」

bq

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

    bq --location=LOCATION mk -d DATASET_ID

    更改下列內容:

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

    bq ls

建立連線

如果已設定預設連線,或您具備 BigQuery 管理員角色,則可略過這個步驟。

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

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往「BigQuery」

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

    「新增資料」UI 元素。

    「新增資料」對話方塊隨即開啟。

  3. 在「依條件篩選」窗格的「資料來源類型」部分,選取「商務應用程式」

    或者,您也可以在「Search for data sources」(搜尋資料來源) 欄位中輸入 Vertex AI

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

  5. 按一下「Vertex AI Models: BigQuery Federation」解決方案資訊卡。

  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 服務代理人角色。

如果您打算在建立遠端模型時將端點指定為網址 (例如 endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-2.0-flash'),請在網址指定的專案中授予這個角色。

如果您打算在建立遠端模型時使用模型名稱指定端點 (例如 endpoint = 'gemini-2.0-flash'),請在您打算建立遠端模型的專案中授予這個角色。

在其他專案中授予角色會導致錯誤 bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource

如要授予角色,請按照下列步驟操作:

主控台

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

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

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

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

  4. 按一下「選擇角色」

  5. 在「篩選器」中輸入 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 Connection Delegation Service Agent」(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

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

      Gemini 模型是使用訓練週期而非步驟進行訓練,因此 BigQuery ML 會將 MAX_ITERATIONS 值轉換為訓練週期。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 選項的值時,請使用 CUSTOM
    • 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:介於 FLOAT64[0.0,1.0] 之間的值,可控制選取詞元時的隨機程度。預設值為 0

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

    • TOP_K:介於 [1,40] 之間的 INT64 值,用於決定模型選取時考量的初始詞元集區。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設值為 40
    • TOP_PFLOAT64 範圍 [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 的值較高,則可能產生較多元或有創意的結果。如果 0temperature,代表具有確定性,即模型一律會選取可能性最高的回覆。

  • TOP_P[0.0,1.0] 範圍內的 FLOAT64 值有助於判斷所選符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設值為 0.95
  • FLATTEN_JSONBOOL 值,決定是否要將生成的文字和安全屬性分別傳回至不同資料欄。預設值為 FALSE
  • STOP_SEQUENCESARRAY<STRING> 值,可移除模型回應中包含的指定字串。字串必須完全相符,包括大小寫。預設值為空陣列。
  • GROUND_WITH_GOOGLE_SEARCH:決定 Vertex AI 模型在生成回覆時是否要使用Google 搜尋依據BOOL 值。建立基準後,模型就能在生成回覆時使用網路上其他資訊,讓回覆內容更具體且符合事實。如果 flatten_json_output 和這個欄位都設為 True,結果中會包含額外的 ml_generate_text_grounding_result 欄,提供模型用來收集額外資訊的來源。預設值為 FALSE
  • SAFETY_SETTINGSARRAY<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 的值較高,則可能產生較多元或有創意的結果。如果 0temperature,代表具有確定性,即模型一律會選取可能性最高的回覆。

  • TOP_P[0.0,1.0] 範圍內的 FLOAT64 值有助於判斷所選符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設值為 0.95
  • FLATTEN_JSONBOOL 值,決定是否要將生成的文字和安全屬性分別傳回至不同資料欄。預設值為 FALSE
  • STOP_SEQUENCESARRAY<STRING> 值,可移除模型回應中包含的指定字串。字串必須完全相符,包括大小寫。預設值為空陣列。
  • GROUND_WITH_GOOGLE_SEARCH:決定 Vertex AI 模型在生成回覆時是否要使用Google 搜尋依據BOOL 值。建立基準後,模型就能在生成回覆時使用網路上其他資訊,讓回覆內容更具體且符合事實。如果 flatten_json_output 和這個欄位都設為 True,結果中會包含額外的 ml_generate_text_grounding_result 欄,提供模型用來收集額外資訊的來源。預設值為 FALSE
  • SAFETY_SETTINGSARRAY<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));