使用 AI.GENERATE_EMBEDDING 函式生成圖片嵌入
本文說明如何建立 BigQuery ML 遠端模型,並參照 Gemini Enterprise Agent Platform 嵌入模型。接著,您將使用前面建立的模型和 AI.GENERATE_EMBEDDING 函式,透過 BigQuery 物件資料表中的資料建立圖片嵌入。
必要的角色
如要建立遠端模型並生成嵌入,您必須具備下列 Identity and Access Management (IAM) 角色:
- 建立及使用 BigQuery 資料集、資料表和模型:專案的 BigQuery 資料編輯者 (
roles/bigquery.dataEditor)。 建立、委派及使用 BigQuery 連線:專案的 BigQuery 連線管理員 (
roles/bigquery.connectionsAdmin)。如果您未設定預設連線,可以在執行
CREATE MODEL陳述式時建立並設定。如要執行這項操作,您必須具備專案的 BigQuery 管理員 (roles/bigquery.admin) 角色。詳情請參閱「設定預設連線」。將權限授予連線的服務帳戶:在含有 Gemini Enterprise Agent Platform 端點的專案中,具備專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) 角色。這是您將模型名稱指定為端點,所建立遠端模型的目前專案。如果您指定網址做為端點,並建立遠端模型,這個專案就是網址中指定的專案。如果您使用遠端模型分析物件資料表中的非結構化資料,且物件資料表使用的 Cloud Storage bucket 與 Agent Platform 端點位於不同專案,則您也必須具備物件資料表所用 Cloud Storage bucket 的 Storage 管理員 (
roles/storage.admin) 角色。建立 BigQuery 工作:專案的 BigQuery 工作使用者 (
roles/bigquery.jobUser)。
這些預先定義的角色具備執行本文件所述工作所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
- 建立資料集:
bigquery.datasets.create - 建立、委派及使用連線:
bigquery.connections.* - 設定服務帳戶權限:
resourcemanager.projects.getIamPolicy和resourcemanager.projects.setIamPolicy - 建立物件資料表:
bigquery.tables.create和bigquery.tables.update - 建立模型並執行推論:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateDatabigquery.models.updateMetadata
事前準備
-
在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
選取或建立專案所需的角色
- 選取專案:選取專案時不需要特定 IAM 角色,只要您獲派某個專案的角色,即可選取該專案。
-
建立專案:如要建立專案,您必須具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
啟用 BigQuery、BigQuery Connection、Cloud Storage 和 Agent Platform API (如有尚未啟用的 API)。
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
建立資料集
建立 BigQuery 資料集來存放資源:
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
點選左側窗格中的 「Explorer」。

如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。
在「Explorer」窗格中,點選專案名稱。
依序點選 「View actions」(查看動作)>「Create dataset」(建立資料集)。
在「Create dataset」(建立資料集) 頁面執行下列操作:
在「資料集 ID」部分,輸入資料集名稱。
在「位置類型」部分,選取「區域」或「多區域」。
- 如果選取「Region」(區域),請從「Region」(區域) 清單中選取位置。
- 如果選取「Multi-region」(多區域),請從「Multi-region」(多區域) 清單中選取「US」(美國) 或「Europe」(歐洲)。
點選「建立資料集」。
bq
建立連線
建立 Cloud 資源連結,並取得連結的服務帳戶。建立連線時,請選擇與上一步建立的資料集相同的位置。
如果您已設定預設連線,或具備 BigQuery 管理員角色,則可略過這個步驟。
選取下列選項之一:控制台
前往「BigQuery」頁面。
點選左側窗格中的 「Explorer」。

如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。
在「Explorer」窗格中展開專案名稱,然後點選「Connections」(連線)。
在「Connections」(連線) 頁面,按一下「Create connection」(建立連線)。
在「連線類型」部分,選擇「Vertex AI 遠端模型、遠端函式、BigLake 和 Spanner (Cloud 資源)」。
在「連線 ID」欄位輸入連線名稱。
在「位置類型」部分,選取連線位置。連線應與資料集等其他資源位於相同位置。
點選「建立連線」。
點選「前往連線」。
在「連線資訊」窗格中,複製服務帳戶 ID,以便在後續步驟中使用。
SQL
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE CONNECTION [IF NOT EXISTS] `CONNECTION_NAME` OPTIONS ( connection_type = "CLOUD_RESOURCE", friendly_name = "FRIENDLY_NAME", description = "DESCRIPTION" );
替換下列內容:
-
CONNECTION_NAME:連線名稱,格式為PROJECT_ID.LOCATION.CONNECTION_ID、LOCATION.CONNECTION_ID或CONNECTION_ID。如果省略專案或位置,系統會根據執行陳述式的專案和位置推論。 -
FRIENDLY_NAME(選用):連線的描述性名稱。 -
DESCRIPTION(選用):連線說明。
-
按一下「 執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
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"}
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定操作說明進行操作。詳情請參閱 BigQuery Python API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Node.js 設定操作說明進行操作。詳情請參閱 BigQuery Node.js API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定操作說明進行操作。詳情請參閱 BigQuery Java API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
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 控制台的使用者介面中,前往資源頁面,確認 Terraform 已建立或更新資源。
授予服務帳戶存取權
將 Agent Platform 使用者和 Storage 物件檢視者角色授予連線的服務帳戶。
如果您打算在建立遠端模型時,將端點指定為網址 (例如 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。
如要授予這些角色,請按照下列步驟操作:
控制台
前往「IAM & Admin」(IAM 與管理) 頁面。
按一下「 新增」。
「Add principals」(新增主體) 對話方塊隨即開啟。
在「新增主體」欄位,輸入先前複製的服務帳戶 ID。
在「選取角色」欄位中,搜尋「Agent Platform 使用者」。
按一下 [Add another role] (新增其他角色)。
在「Select a role」(請選擇角色) 欄位中,依序選取「Cloud Storage」和「Storage Object Viewer」(Storage 物件檢視者)。
按一下 [儲存]。
gcloud
使用 gcloud projects add-iam-policy-binding 指令。
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/storage.objectViewer' --condition=None
替換下列內容:
PROJECT_NUMBER:要授予角色的專案編號。MEMBER:您先前複製的服務帳戶 ID。
建立物件資料表
如要分析圖片,但不想從 Cloud Storage 移出,請建立物件資料表。
如要建立物件資料表,請按照下列步驟操作:
SQL
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME` WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID`| DEFAULT} OPTIONS( object_metadata = 'SIMPLE', uris = ['BUCKET_PATH'[,...]], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
替換下列內容:
PROJECT_ID:您的專案 ID。DATASET_ID:您建立的資料集 ID。TABLE_NAME:物件資料表的名稱。REGION:連線所在的區域或多區域。CONNECTION_ID:您建立的連線 ID。在 Google Cloud 控制台中查看連線詳細資料時,這個值會顯示在「Connection ID」(連線 ID) 中完整連線 ID 的最後一個部分,例如
projects/myproject/locations/connection_location/connections/myconnection。如要使用 預設連線,請指定
DEFAULT,而非包含PROJECT_ID.REGION.CONNECTION_ID的連線字串。BUCKET_PATH:Cloud Storage bucket 的路徑,其中包含圖片,格式為['gs://bucket_name/[folder_name/]*']。您使用的 Cloud Storage bucket 應位於您打算建立模型及呼叫
AI.GENERATE_EMBEDDING函式的專案中。如要呼叫AI.GENERATE_EMBEDDING函式,且該函式所在的專案與物件資料表使用的 Cloud Storage bucket 所在專案不同,您必須在 bucket 層級將 Storage 管理員角色授予service-A@gcp-sa-aiplatform.iam.gserviceaccount.com服務帳戶。STALENESS_INTERVAL:指定針對物件資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時時間間隔,請指定
INTERVAL 4 HOUR。如果中繼資料在過去 4 小時內重新整理過,系統會使用快取的中繼資料,對資料表執行作業。如果快取的中繼資料超過這個時間,作業就會改為從 Cloud Storage 擷取中繼資料。CACHE_MODE:指定中繼資料快取要自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取效能」。設為
AUTOMATIC,中繼資料快取就會按照系統定義的間隔重新整理,通常介於 30 到 60 分鐘之間。如要按照指定時間表重新整理中繼資料快取,請設為
MANUAL。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE系統程序來重新整理快取。如果
STALENESS_INTERVAL設為大於 0 的值,則必須設定CACHE_MODE。
按一下「 執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq mk 指令。
bq mk --table \ --external_table_definition=BUCKET_PATH@REGION.CONNECTION_ID \ --object_metadata=SIMPLE \ --max_staleness=STALENESS_INTERVAL \ --metadata_cache_mode=CACHE_MODE \ PROJECT_ID:DATASET_ID.TABLE_NAME
替換下列內容:
BUCKET_PATH:Cloud Storage bucket 的路徑,其中包含圖片,格式為['gs://bucket_name/[folder_name/]*']。您使用的 Cloud Storage bucket 應位於您打算建立模型及呼叫
AI.GENERATE_EMBEDDING函式的專案中。如要呼叫AI.GENERATE_EMBEDDING函式,且該函式所在的專案與物件資料表使用的 Cloud Storage bucket 所在專案不同,您必須在 bucket 層級將 Storage 管理員角色授予service-A@gcp-sa-aiplatform.iam.gserviceaccount.com服務帳戶。REGION:連線所在的區域或多區域。CONNECTION_ID:您建立的連線 ID。在 Google Cloud 控制台中查看連線詳細資料時,這個值會顯示在「Connection ID」(連線 ID) 中完整連線 ID 的最後一個部分,例如
projects/myproject/locations/connection_location/connections/myconnection。STALENESS_INTERVAL:指定針對物件資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時時間間隔,請指定
INTERVAL 4 HOUR。如果中繼資料在過去 4 小時內重新整理過,系統會使用快取的中繼資料,對資料表執行作業。如果快取的中繼資料超過這個時間,作業就會改為從 Cloud Storage 擷取中繼資料。CACHE_MODE:指定中繼資料快取要自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取效能」。設為
AUTOMATIC,中繼資料快取就會按照系統定義的間隔重新整理,通常介於 30 到 60 分鐘之間。如要按照指定時間表重新整理中繼資料快取,請設為
MANUAL。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE系統程序來重新整理快取。如果
STALENESS_INTERVAL設為大於 0 的值,則必須設定CACHE_MODE。PROJECT_ID:您的專案 ID。DATASET_ID:您建立的資料集 ID。TABLE_NAME:物件資料表的名稱。
建立模型
前往 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 = 'ENDPOINT');
替換下列內容:
PROJECT_ID:您的專案 ID。DATASET_ID:先前建立的資料集 ID。MODEL_NAME:模型名稱。REGION:連線所在的區域或多區域。CONNECTION_ID:您建立的連線 ID。在 Google Cloud 控制台中查看連線詳細資料時,這個值會顯示在「Connection ID」(連線 ID) 中完整連線 ID 的最後一個部分,例如
projects/myproject/locations/connection_location/connections/myconnection。ENDPOINT:要使用的嵌入模型,例如gemini-embedding-2-preview或multimodalembedding@001。建立遠端模型時,如果指定網址做為端點 (例如
endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-embedding-2-preview'),請務必確認您在網址中指定的專案,就是您已將 Agent Platform 使用者角色授予連線服務帳戶的專案。模型必須位於您建立遠端模型的位置。
gemini-embedding-2-preview模型僅支援us-central1和US區域。詳情請參閱「位置」。
生成圖片嵌入
使用物件資料表中的圖片資料,透過 AI.GENERATE_EMBEDDING 函式生成圖片嵌入:
SELECT * FROM AI.GENERATE_EMBEDDING( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME`, STRUCT(OUTPUT_DIMENSIONALITY AS output_dimensionality) );
替換下列內容:
PROJECT_ID:包含模型或資料表的專案。DATASET_ID:包含模型或資料表的資料集。MODEL_NAME:multimodalembedding@001模型上的遠端模型名稱。TABLE_NAME::物件資料表的名稱 ,內含要嵌入的圖片。OUTPUT_DIMENSIONALITY:INT64值,指定生成嵌入時要使用的維度數量。有效值為128、256、512和1408。預設值為1408。舉例來說,如果指定256 AS output_dimensionality,embedding輸出資料欄就會包含每個輸入值的 256 維嵌入。
範例
下列範例說明如何為 images 物件資料表中的圖片建立嵌入:
SELECT * FROM AI.GENERATE_EMBEDDING( MODEL `mydataset.embedding_model`, TABLE `mydataset.images`, STRUCT(512 AS output_dimensionality) );