使用 ML.GENERATE_TEXT 函式產生文字
本文將說明如何建立代表 Vertex AI 模型的 BigQuery ML 遠端模型,然後搭配 ML.GENERATE_TEXT
函式使用該遠端模型產生文字。
支援下列類型的遠端模型:
- 遠端模型:可在任何正式發布或預先發布的 Gemini 模型上執行。
- 遠端模型 (相較於 Anthropic Claude 模型)。
- 遠端模型與 Llama 模型
- 使用 Mistral AI 模型的遠端模型
- 遠端模型會在支援的開放式模型上執行。
視您選擇的 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
事前準備
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
建立資料集
建立 BigQuery 資料集來容納資源:
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點選
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「Create dataset」頁面上執行下列操作:
在「Dataset ID」(資料集 ID) 部分,輸入資料集名稱。
在「位置類型」中,選取資料集的位置。
點選「建立資料集」。
bq
建立連線
如果您已設定具備適當權限的預設連線,可以略過這個步驟。
為遠端模型建立Cloud 資源連線,並取得連線的服務帳戶。請在與您在上一個步驟中建立的資料集相同的位置建立連線。
選取下列選項之一:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中,按一下
「新增資料」:「Add data」對話方塊隨即開啟。
在「Filter By」窗格中的「Data Source Type」部分,選取「Business Applications」。
或者,您也可以在「Search for data sources」欄位中輸入
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 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
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。這項操作只需對每個目錄執行一次。
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 使用者角色。
如果您打算在建立遠端模型時,將端點指定為網址 (例如 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
錯誤。
如要授予角色,請按照下列步驟操作:
主控台
前往「IAM & Admin」(IAM 與管理) 頁面。
按一下
「新增」。系統會開啟「Add principals」對話方塊。
在「新增主體」欄位,輸入先前複製的服務帳戶 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」頁面
在「Explorer」窗格中,展開含有物件資料表的資料集。
選取物件表格。
在編輯器窗格中,按一下「Details」分頁標籤。
請記下「連線 ID」欄位中的連線名稱。
在「Explorer」窗格中,展開「External connections」資料夾。
選取與物件資料表的「Connection ID」欄位相符的連線。
複製「服務帳戶 ID」欄位中的值。
如要授予角色,請按照下列步驟操作:
主控台
前往「IAM & Admin」(IAM 與管理) 頁面。
按一下
「新增」。系統會開啟「Add principals」對話方塊。
在「新增主體」欄位,輸入先前複製的服務帳戶 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 模型,請指定模型名稱。對於其中部分模型,您可以指定模型的特定版本做為名稱的一部分。
針對 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
:範圍為[0.0,1.0]
的FLOAT64
值,用於控制選取符記時的隨機程度。預設為0
。如果您想藉由提示生成較具確定性、較不具開放性和創意性的回覆,建議調低
temperature
的值。另一方面,如果temperature
的值較高,則可能產生較多元或有創意的結果。temperature
的值為0
代表具有確定性,即系統一律會選取可能性最高的回覆。TOP_P
:範圍[0.0,1.0]
中的FLOAT64
值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設為0.95
。FLATTEN_JSON
:BOOL
值,用於決定是否要以個別資料欄傳回產生的文字和安全性屬性。預設值為FALSE
。STOP_SEQUENCES
:ARRAY<STRING>
值,如果模型回應中包含指定字串,則會移除這些字串。字串比對時會完全相符,包括大小寫。預設為空陣列。GROUND_WITH_GOOGLE_SEARCH
:BOOL
值,用於決定 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_TYPE
:STRING
值,指定要傳送至 Gemini 模型的推論要求類型。要求類型會決定要求使用的配額。有效值如下: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 回應合併為個別欄。
- 擷取並傳回公開網站資料,以便回覆。
- 使用兩個安全性設定,篩除不安全的回應。
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
的資料欄。TOKENS
:INT64
值,可設定回覆中可產生的符記數量上限。這個值必須介於[1,4096]
的範圍之間。 如要取得較短的回覆,請指定較低的值;如要取得較長的回覆,請調高此值。預設為128
。TOP_K
:範圍[1,40]
中的INT64
值,用於決定模型在選取時要考慮的初始符記集區。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。TOP_P
:範圍[0.0,1.0]
中的FLOAT64
值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。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
:範圍為[0.0,1.0]
的FLOAT64
值,用於控制選取符記時的隨機程度。預設為0
。如果您想藉由提示生成較具確定性、較不具開放性和創意性的回覆,建議調低
temperature
的值。另一方面,如果temperature
的值較高,則可能產生較多元或有創意的結果。temperature
的值為0
代表具有確定性,即系統一律會選取可能性最高的回覆。TOP_P
:範圍[0.0,1.0]
中的FLOAT64
值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設為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
:範圍為[0.0,1.0]
的FLOAT64
值,用於控制選取符記時的隨機程度。預設為0
。如果您想藉由提示生成較具確定性、較不具開放性和創意性的回覆,建議調低
temperature
的值。另一方面,如果temperature
的值較高,則可能產生較多元或有創意的結果。temperature
的值為0
代表具有確定性,即系統一律會選取可能性最高的回覆。TOP_P
:範圍[0.0,1.0]
中的FLOAT64
值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。預設為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
:範圍為[0.0,1.0]
的FLOAT64
值,用於控制選取符記時的隨機程度。如果未指定值,模型會判斷適當的值。如果您想藉由提示生成較具確定性、較不具開放性和創意性的回覆,建議調低
temperature
的值。另一方面,如果temperature
的值較高,則可能產生較多元或有創意的結果。temperature
的值為0
代表具有確定性,即系統一律會選取可能性最高的回覆。TOP_K
:範圍[1,40]
中的INT64
值,用於決定模型在選取時要考慮的初始符記集區。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。TOP_P
:範圍[0.0,1.0]
中的FLOAT64
值有助於判斷選取符記的機率。如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。如果未指定值,模型會判斷適當的值。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));
根據物件資料表資料產生文字
使用 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
:用於分析內容的提示。TOKENS
:INT64
值,可設定回覆中可產生的符記數量上限。這個值必須介於[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_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));
以下範例會將 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));