使用 ML.GENERATE_TEXT 函式產生文字

本文將說明如何建立代表 Vertex AI 模型的 BigQuery ML 遠端模型,然後搭配 ML.GENERATE_TEXT 函式使用該遠端模型產生文字。

支援下列類型的遠端模型:

視您選擇的 Vertex AI 模型而定,您可以根據物件資料表中的非結構化資料輸入內容,或標準資料表中的文字輸入內容,產生文字。

所需權限

  • 如要建立連結,您必須具備下列身分與存取權管理 (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, and Vertex AI 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 使用者角色。如果您使用遠端模型從物件資料表資料產生文字,則必須將 Vertex AI 使用者角色授予物件資料表使用的連線服務帳戶。

將角色授予遠端模型連線的服務帳戶

為遠端模型連線的服務帳戶授予 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-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource 錯誤。

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

主控台

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

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

  2. 按一下 「新增」

    系統會開啟「Add principals」對話方塊。

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

  4. 在「請選擇角色」欄位中,依序選取「Vertex AI」和「Vertex AI 使用者」

  5. 按一下 [儲存]

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 使用者角色授予物件資料表連線的服務帳戶。

如要找出物件資料表連結的服務帳戶,請按照下列步驟操作:

  1. 前往「BigQuery」頁面

    前往 BigQuery

  2. 在「Explorer」窗格中,展開含有物件資料表的資料集。

  3. 選取物件表格。

  4. 在編輯器窗格中,按一下「Details」分頁標籤。

  5. 請記下「連線 ID」欄位中的連線名稱。

  6. 在「Explorer」窗格中,展開「External connections」資料夾。

  7. 選取與物件資料表的「Connection ID」欄位相符的連線。

  8. 複製「服務帳戶 ID」欄位中的值。

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

主控台

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

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

  2. 按一下 「新增」

    系統會開啟「Add principals」對話方塊。

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

  4. 在「請選擇角色」欄位中,依序選取「Vertex AI」和「Vertex AI 使用者」

  5. 按一下 [儲存]

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 模型時,才需要執行這個步驟。

  1. 前往 Google Cloud 控制台的 Vertex AI「Model Garden」頁面。

    前往 Model Garden

  2. 搜尋或瀏覽要使用的 Claude 模型。

  3. 按一下模型資訊卡。

  4. 在模型頁面中,按一下「啟用」

  5. 填寫要求的啟用資訊,然後按一下「下一步」

  6. 在「條款及細則」部分勾選核取方塊。

  7. 按一下「同意」表示同意條款及細則,並啟用模型。

部署開放式模型

如果您想使用支援的開放式模型,必須先將該模型部署至 Vertex AI。如要進一步瞭解如何執行這項操作,請參閱「部署開放式模型」。

建立 BigQuery ML 遠端模型

建立遠端模型:

開放式模型

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

    前往 BigQuery

  2. 使用 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」欄位中的值。

所有其他型號

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

    前往 BigQuery

  2. 使用 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 模型,請指定模型名稱。對於其中部分模型,您可以指定模型的特定版本做為名稱的一部分。

      針對 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 的資料欄。
  • 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_SEQUENCESARRAY<STRING> 值,如果模型回應中包含指定字串,則會移除這些字串。字串比對時會完全相符,包括大小寫。預設為空陣列。
  • GROUND_WITH_GOOGLE_SEARCHBOOL 值,用於決定 Vertex AI 模型在產生回覆時是否使用 [使用 Google 搜尋的依據功能](/vertex-ai/generative-ai/docs/grounding/overview#ground-public)。建立基準可讓模型在生成回覆時使用網路上的其他資訊,讓模型回覆更具體且符合事實。當 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 欄中的文字。
    • 將模型的 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 回應合併為個別欄。
    • 擷取並傳回公開網站資料,以便回覆。
    • 使用兩個安全性設定,篩除不安全的回應。
    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 回應合併為個別欄。
    • 擷取並傳回公開網站資料,以便回覆。
    • 使用兩個安全性設定,篩除不安全的回應。
    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 的資料欄。
  • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,4096] 的範圍之間。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。預設為 128
  • TOP_K:範圍 [1,40] 中的 INT64 值,用於決定模型在選取時要考慮的初始符記集區。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。
  • TOP_P:範圍 [0.0,1.0] 中的 FLOAT64 值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。
  • FLATTEN_JSONBOOL 值,用於決定是否要以個別資料欄傳回產生的文字和安全性屬性。預設值為 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 的資料欄。
  • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,4096] 的範圍之間。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。預設為 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_SEQUENCESARRAY<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 的資料欄。
  • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,4096] 的範圍之間。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。預設為 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_SEQUENCESARRAY<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 的資料欄。
  • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,4096] 的範圍之間。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。 如果未指定值,模型會判斷適當的值。
  • TEMPERATURE:範圍為 [0.0,1.0]FLOAT64 值,用於控制選取符記時的隨機程度。如果未指定值,模型會判斷適當的值。

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

  • TOP_K:範圍 [1,40] 中的 INT64 值,用於決定模型在選取時要考慮的初始符記集區。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。
  • TOP_P:範圍 [0.0,1.0] 中的 FLOAT64 值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。
  • FLATTEN_JSONBOOL 值,用於決定是否要以個別資料欄傳回產生的文字和安全性屬性。預設值為 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));

根據物件資料表資料產生文字

使用 ML.GENERATE_TEXT 函式搭配 Gemini 模型,分析物件資料表中的非結構化資料,藉此產生文字。您可以在 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 函式的專案中。如果您想在不同專案中呼叫 ML.GENERATE_TEXT 函式,而該專案不包含物件資料表使用的 Cloud Storage 值區,則必須授予 service-A@gcp-sa-aiplatform.iam.gserviceaccount.com 服務帳戶值區層級的儲存空間管理員角色

  • PROMPT:用於分析內容的提示。
  • TOKENSINT64 值,可設定回覆中可產生的符記數量上限。這個值必須介於 [1,4096] 的範圍之間。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。 如果未指定值,模型會判斷適當的值。
  • TEMPERATURE:範圍為 [0.0,1.0]FLOAT64 值,用於控制選取符記時的隨機程度。如果未指定值,模型會判斷適當的值。

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

  • TOP_K:範圍 [1,40] 中的 INT64 值,用於決定模型在選取時要考慮的初始符記集區。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。
  • TOP_P:範圍 [0.0,1.0] 中的 FLOAT64 值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。
  • FLATTEN_JSONBOOL 值,用於決定是否要以個別資料欄傳回產生的文字和安全性屬性。預設值為 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));

以下範例會將 PDF 內容分類,該內容來自名為 invoices 的物件資料表:

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));