GSP1247

概览
在本实验中,您将学习如何将 BigQuery Machine Learning 推理功能与远程模型(Gemini AI 模型)结合使用,以便分析电影海报图片并生成对应的影片摘要,这是概念验证项目的一部分。
BigQuery 是一个 AI 就绪型全托管式数据分析平台,可帮助您充分发掘数据的价值,并支持多引擎、多格式和多云。其主要功能之一是 BigQuery Machine Learning 推理,该功能允许您使用 GoogleSQL 查询来创建和运行机器学习 (ML) 模型。
Gemini 是 Google DeepMind 开发的一系列生成式 AI 模型,专为多模态应用场景而设计。通过 Gemini API,您可以使用 Vision 和 模型。
使用 GoogleSQL 查询运行机器学习模型
对大型数据集执行机器学习或人工智能 (AI) 任务通常涉及大量编程工作,并需要具备机器学习框架方面的知识。这些要求使得解决方案的开发工作只能由公司内一小部分人员来完成,数据分析师虽然了解数据,但欠缺机器学习和编程专业知识,因而爱莫能助。但借助 BigQuery Machine Learning 推理功能,SQL 专业人员可以使用现有 SQL 工具和技能来构建模型,并通过大语言模型 (LLM) 和 Cloud AI API 来生成结果。
目标
在本实验中,您将学习如何完成以下操作:
- 配置环境和账号以使用 API。
- 在 BigQuery 中创建 Cloud 资源连接。
- 在 BigQuery 中为电影海报图片创建一个数据集和对象表。
- 在 BigQuery 中创建 Gemini 远程模型。
- 提示 Gemini 提供每张海报对应的影片摘要。
- 为每张海报对应的影片生成文本嵌入。
- 使用 BigQuery VECTOR_SEARCH 将电影海报图片与数据集中高度相关的影片进行匹配。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
任务 1. 配置环境和项目以使用 API
在此项任务中,您需要配置实验环境,以便在项目中使用 Cloud AI Companion API for Gemini 和 Vertex AI 平台 API。
注意:如果您不熟悉 Cloud Shell,请参阅使用 Cloud Shell。
-
使用您的实验凭据登录 Google Cloud 控制台,并打开 Cloud Shell 终端窗口。
-
如需设置项目 ID 和区域环境变量,请在 Cloud Shell 中运行以下命令:
PROJECT_ID=$(gcloud config get-value project)
REGION={{{project_0.default_region|set at lab start}}}
echo "PROJECT_ID=${PROJECT_ID}"
echo "REGION=${REGION}"
-
如需将已登录的 Google 用户账号存储到环境变量中,请运行以下命令:
USER=$(gcloud config get-value account 2> /dev/null)
echo "USER=${USER}"
-
启用 Cloud AI Companion API for Gemini 和 Vertex AI API:
gcloud services enable cloudaicompanion.googleapis.com --project ${PROJECT_ID}
gcloud services enable aiplatform.googleapis.com --project ${PROJECT_ID}
-
如需使用 Gemini,请为您的 Google Cloud Qwiklabs 用户账号授予必要的 IAM 角色:
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member user:${USER} --role=roles/cloudaicompanion.user
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member user:${USER} --role=roles/serviceusage.serviceUsageViewer
添加这些角色后,用户即可开始使用 Gemini 助手。
如需验证是否已完成以下目标,请点击检查我的进度:
启用相关 API 并设置 IAM 角色。
任务 2. 创建 Cloud 资源连接
在此任务中,您将在 BigQuery 中创建一个 Cloud 资源连接,以便使用 和 模型。
-
在 Google Cloud 控制台中,点击导航菜单下的 BigQuery。
-
在“欢迎”弹出式窗口中点击完成。
-
如需创建连接,请点击 + 添加,然后点击与外部数据源的连接。
注意:如果您没有看到 + 添加以及随后的与外部数据源的连接选项,则可以点击 + 添加数据,然后使用数据源搜索栏搜索 Vertex AI。依次点击 Vertex AI > BigQuery 联合的搜索结果。
-
在“连接类型”列表中,选择 Vertex AI 远程模型、远程函数、BigLake 和 Spanner(Cloud 资源)。
-
在“连接 ID”字段中,输入 gemini_conn 作为连接的名称。
-
在位置类型部分,选择多区域,然后从下拉菜单中选择美国(多区域)。
-
对于其他设置,请使用默认值。
-
点击创建连接。
-
点击转到连接。
-
将“连接信息”窗格中的服务账号 ID 复制到一个文本文件中,以便在下个任务中使用。您还会看到,在 BigQuery 探索器中,该连接已添加到您项目下的“外部连接”部分。
点击检查我的进度,验证已完成以下目标:
创建 Cloud 资源连接
任务 3. 向连接的服务账号授予 IAM 权限
在此项任务中,您将通过某个角色为 Cloud 资源连接的服务账号授予 IAM 权限,使其能够访问 Vertex AI 服务。
-
在 Google Cloud 控制台中,点击导航菜单下的 IAM 和管理。
-
点击授予访问权限。
-
在新的主账号字段中,输入您之前复制的服务账号 ID。
-
在“选择角色”字段中,输入 Vertex AI,然后选择 Vertex AI User 角色。
-
点击保存。
这样该服务账号 ID 就拥有了 Vertex AI User 角色。
点击检查我的进度,验证已完成以下目标:
向连接的服务账号授予 IAM 权限。
任务 4. 在 BigQuery 中为电影海报图片创建数据集和对象表
在此项任务中,您将为项目创建一个数据集,并在其中创建一个对象表来存储海报图片。
创建数据集
-
在 Google Cloud 控制台中,依次选择导航菜单 (
) 和 BigQuery。
-
在探索器面板中,针对 选择数据集旁边的查看操作 (
),然后选择创建数据集。
您需要创建数据集来存储数据库对象,包括表和模型。
-
在创建数据集窗格中,输入以下信息:
| 字段 |
值 |
| 数据集 ID |
gemini_demo |
| 位置类型 |
选择多区域
|
| 多区域 |
选择 US
|
对于其他字段,保留默认值。
-
点击创建数据集。
这将创建 gemini_demo 数据集,并在 BigQuery 探索器中您的项目下列出该数据集。
创建对象表
若要创建对象表,需要使用 SQL 查询。
-
点击 + 以创建新的 SQL 查询。
-
在查询编辑器中,粘贴下面的查询。
CREATE OR REPLACE EXTERNAL TABLE
`gemini_demo.movie_posters`
WITH CONNECTION `us.gemini_conn`
OPTIONS (
object_metadata = 'SIMPLE',
uris = ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']
);
-
运行该查询。
这会将 movie_posters 对象表添加到 gemini_demo 数据集中,并加载每张电影海报图片的 URI(Cloud Storage 位置)。
-
在传统版探索器中,展开项目 ID,然后选择 movie_posters,查看架构和详细信息。请查询此表以查看特定记录。
点击检查我的进度,验证已完成以下目标:
在 BigQuery 中为电影海报图片创建数据集和对象表。
任务 5. 在 BigQuery 中创建 Gemini 远程模型
对象表创建完毕后,就可以开始使用它了。在此任务中,您将在 BigQuery 中为 和 Vision 模型创建远程模型。
创建 模型
-
点击 + 以创建一个新的 SQL 查询。
-
在查询编辑器中,粘贴下方的查询并运行。
CREATE OR REPLACE MODEL `gemini_demo.gemini_lite`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = '{{{project_0.startup_script.gemini_flash_lite_model_id | model id}}}')
这将创建 gemini_lite 模型,您会看到它已添加到“模型”部分的 gemini_demo 数据集中。
-
在传统版探索器中,点击 gemini_lite 模型,查看详细信息和架构。
创建 Vision 模型
-
点击 + 以创建一个新的 SQL 查询。
-
在查询编辑器中,粘贴下方的查询并运行。
CREATE OR REPLACE MODEL `gemini_demo.gemini_lite_vision`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = '{{{project_0.startup_script.gemini_flash_lite_model_id | model id}}}')
这将创建 gemini_lite_vision 模型,您会看到它已添加到“模型”部分的 gemini_demo 数据集中。
-
在传统版探索器中,点击 gemini_lite_vision 模型,查看详细信息和架构。
点击检查我的进度,验证已完成以下目标:
在 BigQuery 中创建 Gemini 远程模型。
任务 6. 提示 Gemini 提供每张海报对应的影片摘要
在此项任务中,您将使用 Gemini(您刚刚创建的 和 Vision 模型)来分析电影海报图片,并生成每部影片的摘要。
使用 Vision 模型分析图片
-
点击 + 以创建一个新的 SQL 查询。
-
在查询编辑器中,粘贴下方的查询并运行。
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results` AS (
SELECT
uri,
ml_generate_text_llm_result
FROM
ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_lite_vision`,
TABLE `gemini_demo.movie_posters`,
STRUCT( 0.2 AS temperature,
'For the movie represented by this poster, what is the movie title and year of release? Answer in JSON format with two keys: title, year. title should be string, year should be integer.' AS PROMPT,
TRUE AS FLATTEN_JSON_OUTPUT)));
这将会创建 movie_posters_results 表。
-
在传统版探索器中,点击 movie_posters_results 表,查看架构和详细信息。
-
点击 + 以创建一个新的 SQL 查询。
-
在查询编辑器中,粘贴下方的查询并运行。
SELECT * FROM `gemini_demo.movie_posters_results`
这将显示每张电影海报的行,其中包括 URI(电影海报图片的 Cloud Storage 位置),以及包含 Vision 模型中的影片名称和影片发行年份的 JSON 结果。
您可以使用下方的查询,以更便于人类阅读的方式检索这些结果。
-
点击 + 以创建一个新的 SQL 查询。
-
在查询编辑器中,粘贴下方的查询并运行。
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results_formatted` AS (
SELECT
uri,
JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.title") AS title,
JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.year") AS year
FROM
`gemini_demo.movie_posters_results` results )
这会创建 movie_posters_result_formatted 表。
-
您可以通过下方的查询来查询此表,以查看创建的行。
SELECT * FROM `gemini_demo.movie_posters_results_formatted`
请注意,URI 列结果保持不变,但 JSON 现已转换为每一行的名称和年份列。
提示 提供电影摘要
-
您可以运行以下查询,让 提供每张海报对应的影片摘要。
SELECT
uri,
title,
year,
prompt,
ml_generate_text_llm_result
FROM
ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_lite`,
(
SELECT
CONCAT('Provide a short summary of movie titled ',title, ' from the year ',year,'.') AS prompt,
uri,
title,
year
FROM
`gemini_demo.movie_posters_results_formatted`
LIMIT
20 ),
STRUCT(0.2 AS temperature,
TRUE AS FLATTEN_JSON_OUTPUT));
请注意,结果与上一条查询类似,但现在提示列中显示了用于 Gemini 的提示,并且使用此提示的结果也包含在 ml_generate_text_llm_result 字段中,其中包括影片的简短摘要。
点击检查我的进度,验证已完成以下目标:
提示 Gemini 提供每张海报对应的影片摘要
任务 7. 使用远程模型生成文本嵌入
在此项任务中,您将使用远程模型生成文本嵌入,以便执行进一步分析。
创建远程模型
要生成文本嵌入,您需要使用托管在端点上的 远程模型,然后才能生成嵌入。
-
点击 + 以创建一个新的 SQL 查询。
-
在查询编辑器中,粘贴下方的查询并运行。
CREATE OR REPLACE MODEL `gemini_demo.text_embedding`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = '{{{project_0.startup_script.gemini_embedding_model_id | model id}}}')
这将创建 text_embedding 模型,并显示在探索器中 gemini_demo 数据集的下方。
为与海报关联的影片名称和年份生成文本嵌入
您需要创建一个表来存储结果。
-
点击 + 以创建一个新的 SQL 查询。
-
在查询编辑器中,粘贴下方的查询并运行。
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results_embeddings` AS (
SELECT
*
FROM
ML.GENERATE_EMBEDDING(
MODEL `gemini_demo.text_embedding`,
(
SELECT
CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
title,
year,
uri
FROM
`gemini_demo.movie_posters_results_formatted` ),
STRUCT(TRUE AS flatten_json_output)));
这将创建 movie_poster_results_embeddings 表,其中包含为 gemini_demo.movie_posters_results_formatted 表中的文本内容(URI、影片名称和发行年份)创建嵌入的结果。
注意:ML.GENERATE_EMBEDDING 函数用于生成嵌入。此函数使用三个参数:
- 第一个参数是用于生成嵌入的模型的名称。在本例中,模型名为 gemini_demo.text_embedding。
- 第二个参数是子查询,用于选择要嵌入的文本内容。在本例中,子查询选择每部影片的片名和年份,并将它们串联成一个字符串。
- 第三个参数是一个结构体,用于指定嵌入内容的输出格式。在本例中,flatten_json_output 字段设置为 TRUE,这意味着嵌入内容将展平为单个 JSON 对象。
.
-
您可以使用下面的新查询来查看查询结果:
SELECT * FROM `gemini_demo.movie_posters_results_embeddings`
您可以看到模型生成的每部影片的嵌入(由数字表示的向量)。
为 IMDB 数据集的子集生成文本嵌入
您将创建一个新视图,其中仅包含数据集中于 1935 年之前发行的影片。
-
使用以下 SQL 语句创建并运行一个新查询。
CREATE OR REPLACE VIEW
`gemini_demo.imdb_movies` AS (
WITH
reviews AS (
SELECT
reviews.movie_id AS movie_id,
title.primary_title AS title,
title.start_year AS year,
reviews.review AS review
FROM
`bigquery-public-data.imdb.reviews` reviews
LEFT JOIN
`bigquery-public-data.imdb.title_basics` title
ON
reviews.movie_id = title.tconst)
SELECT
DISTINCT(movie_id),
title,
year
FROM
reviews
WHERE
year < 1935)
这将生成一个新视图,其中包含 bigquery-public-data.imdb.reviews 表中于 1935 年之前发行的所有影片的影片 ID、片名和发行年份列表。
-
使用以下 SQL 语句创建并运行一个新查询。
CREATE OR REPLACE TABLE
`gemini_demo.imdb_movies_embeddings` AS (
SELECT
*
FROM
ML.GENERATE_EMBEDDING( MODEL `gemini_demo.text_embedding`,
(
SELECT
CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
title,
year,
movie_id
FROM
`gemini_demo.imdb_movies` ),
STRUCT(TRUE AS flatten_json_output) )
WHERE
ml_generate_embedding_status = '' );
查询的结果是一个表,其中包含 gemini_demo.imdb_movies 表的文本内容的嵌入。
使用 BigQuery VECTOR_SEARCH 将电影海报图片与 IMDB movie_id 进行匹配
-
使用以下 SQL 语句创建并运行一个新查询。
SELECT
query.uri AS poster_uri,
query.title AS poster_title,
query.year AS poster_year,
base.title AS imdb_title,
base.year AS imdb_year,
base.movie_id AS imdb_movie_id,
distance
FROM
VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
'ml_generate_embedding_result',
TABLE `gemini_demo.movie_posters_results_embeddings`,
'ml_generate_embedding_result',
top_k => 1,
distance_type => 'COSINE');
该查询使用 VECTOR_SEARCH 函数在 gemini_demo.imdb_movies_embeddings 表中查找 gemini_demo.movie_posters_results_embeddings 表中每一行的最近邻。最近邻是通过余弦距离指标找到的,该指标能够判断两个嵌入项的相似程度。
此查询可用于在 IMDB 数据集中查找与 Vision 在电影海报中识别的每部影片最相似的影片。例如,您可以使用此查询,在 IMDB 公共数据集中查找与影片“Au Secours!”(由 Vision 在其中一张电影海报中识别)最为匹配的结果,该公共数据集通过英文片名“Help!”来指代该影片。
-
创建并运行一个新查询,以便联接 IMDB 公共数据集中提供的有关影片评分的其他信息。
SELECT
query.uri AS poster_uri,
query.title AS poster_title,
query.year AS poster_year,
base.title AS imdb_title,
base.year AS imdb_year,
base.movie_id AS imdb_movie_id,
distance,
imdb.average_rating,
imdb.num_votes
FROM
VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
'ml_generate_embedding_result',
TABLE `gemini_demo.movie_posters_results_embeddings`,
'ml_generate_embedding_result',
top_k => 1,
distance_type => 'COSINE') DATA
LEFT JOIN
`bigquery-public-data.imdb.title_ratings` imdb
ON
base.movie_id = imdb.tconst
ORDER BY
imdb.average_rating DESC
此查询与上一条查询类似。它仍然使用特殊数值表示法(向量嵌入)来查找与给定电影海报相似的影片。不过,它还会从 IMDB 公共数据集内的单独表中,联接每个最近邻影片的平均评分和投票数。
点击检查我的进度,验证已完成以下目标:
为 IMDB 数据集的子集生成文本嵌入
恭喜!
您成功地在 BigQuery 中为海报图片创建了对象表,创建了远程 Gemini 模型,使用这些模型提示 Gemini 分析图片并提供影片摘要,为片名生成了文本嵌入,并使用嵌入将电影海报图片与 IMDB 数据集中的相关片名进行了匹配。
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 11 月 27 日
上次测试实验的时间:2025 年 11 月 27 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。