本地 LLM 数据洞见:适用于结构化和非结构化数据分析的 BigQuery 和 Gemini

1. 简介

庞大的数据集拥有宝贵的数据洞见,但提取有意义的理解可能是一项艰巨的任务。传统的分析工具往往无法提供人性化的精细解释来帮助我们真正掌握数据中的故事。数据仓库存储的非结构化数据越来越多,但这些数据有时无法获得数据洞见。非结构化文本、图片和视频是发展您的业务的重要信息,LLM 提供了一种强大的新方法来理解数据,它提供解释、情感分析、对象检测等功能。随着多模态模型的出现(以及通过对象表在 BigQuery 中存储图片和视频等对象数据的功能),将 Gemini 1.0 Pro(用于基于文本的分析)和 Gemini 1.0 Pro Vision(用于文本和图片/视频分析)等强大的 LLM 与 BigQuery 集成可以改变您分析数据的方式。

在此 Codelab 中,我们将了解以下两种方法,以及如何从企业数据中获取 LLM 数据洞见,并在 BigQuery 中将这些数据洞见扩展到数千行:

方法 1:远程模型调用

  • 使用 SELECT 查询中的 ML.GENERATE_TEXT 从 BigQuery 中调用 Gemini 1.0 Pro。
  • 如果模型已在 BigQuery 中作为远程模型提供,并且您希望开箱即用,请使用此方法。请参阅 BigQuery 文档,查看您要使用的模型的状态。

方法 2:远程函数实现

构建内容

  • 对于远程模型调用方法,您需要通过在 BigQuery 的 ML.GENERATE_TEXT 构造中调用 Gemini 1.0 Pro 的远程模型,为互联网归档图书数据集(在 BigQuery 中公开提供)构建位置摘要器。

远程模型调用流程图

  • 对于远程函数实现方法,您需要构建一个映像验证程序,用于根据基准映像验证测试映像。为此,您需要在外部表中创建一个包含测试图片屏幕截图的数据集,并让 Gemini 1.0 Pro Vision 根据基准图片进行验证。然后,您将创建一个 Java Cloud Functions 函数来实现 Gemini Pro Vision 调用,并将其作为 BigQuery 中的远程函数进行调用。

远程函数实现流程图

注意:

BigQuery 中可能会提供更多 Vertex AI 生成式 AI 模型作为远程模型。这意味着,您可以在 BigQuery 中开箱即用地使用 ML.GENERATE_TEXT 结构访问这些模型。不过,即使模型存在远程可用性,您始终可以选择使用 Cloud Functions 为您的使用场景构建高级自定义设置,然后将这些模型作为远程函数从 BigQuery 访问。

为何选择 BigQuery?

BigQuery 是一个无服务器的多云数据仓库,能够以最低的运营开销从字节扩容到 PB 级,因此是存储机器学习训练数据的绝佳选择。借助内置的 BigQuery 机器学习 (BQML) 和分析功能,您只需使用 SQL 查询即可创建无代码预测。此外,您可以使用联合查询从外部源访问数据,从而无需复杂的 ETL 流水线。

BigQuery 是一个全托管式云数据仓库,可帮助用户分析结构化、半结构化和非结构化数据。

2. 要求

  • 一个浏览器,例如 ChromeFirefox
  • 启用了结算功能的 Google Cloud 项目。

3. 准备工作

  1. Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目
  2. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能
  3. 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq。点击 Google Cloud 控制台顶部的“激活 Cloud Shell”。

“激活 Cloud Shell”按钮图片

  1. 在连接到 Cloud Shell 后,您可以使用以下命令检查是否已通过身份验证,以及项目是否已设置为您的项目 ID:
gcloud auth list
  1. 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目。
gcloud config list project
  1. 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <YOUR_PROJECT_ID>
  1. 前往 Google Cloud Marketplace 专用 Gemini 启用该 API。您也可以在 Cloud Shell 终端中使用以下命令:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. 确保已启用以下 API:
  • BigQuery
  • BigQuery 连接
  • Cloud Functions 函数
  • Cloud Run
  • Vertex AI
  • Cloud Build
  • Cloud Storage APIs

除了使用 gcloud 命令,您还可以点击此链接在控制台中操作。

如需了解 gcloud 命令和用法,请参阅文档

4. 创建 BigQuery 数据集和外部连接

首先,创建一个数据集和一个 Cloud 资源连接。

BigQuery 中的数据集是用于存储应用所有表和对象的容器。

如需创建数据集,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 BigQuery 页面
  2. 在“探索器”面板中,选择您要在其中创建数据集的项目。
  3. 展开操作选项(垂直省略号图标),然后点击创建数据集

“操作”菜单和“创建数据集”选项的图片

  1. 点击创建数据集
  2. 数据集 ID 字段中输入 gemini_bq_fn
  3. 将您的位置类型设置为 Multi-region 并接受默认值,即 US(multiple regions in United States.
  4. 点击创建数据集
  5. 探索器窗格中,检查数据集是否已创建并列在项目 ID 下。

需要 BigQuery 连接才能与您的 Cloud Functions 函数交互。如需创建远程函数,您必须创建 BigQuery 连接。在此 Codelab 中,我们将使用 BigLake 连接通过 Cloud Functions 函数从 BigQuery 访问模型。BigLake 连接有助于连接外部数据源,同时保留精细的 BigQuery 访问权限控制和安全机制,在本例中即为 Vertex AI Gemini Pro API。

如需创建 BigLake 连接,请执行以下操作:

  1. 在 BigQuery 页面的探索器窗格中点击添加

BigQuery 控制台,其中突出显示了用于添加外部连接的“添加”按钮

  1. 点击与外部数据源的连接
  2. 在“连接类型”菜单中,选择 Vertex AI 远程模型、远程函数和 BigLake (Cloud Resource)
  3. 连接 ID 字段中,输入连接名称 gemini-bq-conn
  4. 将您的位置类型设置为 Multi-region 并接受默认值,即 US(multiple regions in United States.
  5. 点击创建连接
  6. 点击转到连接,然后复制连接信息窗格中的服务帐号 ID。

连接信息屏幕截图

  1. 转到 IAM 和管理页面,然后点击授予访问权限
  2. 将服务账号 ID 粘贴到新原则字段中。
  3. 从角色列表中选择 Vertex AI user 角色,然后点击保存

“授予对服务账号的访问权限”屏幕截图

现在,您已成功创建数据集和 BigQuery 连接。接下来,您将完成远程模型调用所需的步骤。

5. 用例 1 远程模型调用:设置远程模型调用

现在您已创建数据集和连接,接下来我们就基于 Vertex AI Gemini Pro 基础模型在 BigQuery 中创建模型。在本练习结束时,您将仅使用 SQL 查询来启动并运行您的 LLM 应用。

第 1 步:创建包含远程模型的输入数据的 BigQuery 表

在您的数据集中创建一个名为 books 的表,该表可以保存表(由 BigQuery 提供)“Internet Archive Books”(互联网归档图书)数据集内 bigquery-public-data.gdelt_internetarchivebooks.1905 表中的约 50 条记录。

为此,请从 BigQuery SQL 编辑器窗格中执行以下 DDL(数据定义语言)语句:

create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)

第 2 步:创建 BigQuery 模型

在数据集中创建模型。为此,请从 BigQuery SQL 编辑器窗格运行以下 DDL:

CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');

您会发现该模型已创建且具有查看模型的选项。

第 3 步:测试新的生成式 AI 应用

SELECT 查询中使用 ML.GENERATE_TEXT 函数向远程模型发送请求。

SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
 (select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
 TRUE AS flatten_json_output));

您应该会看到以下结果:

BigQuery 中的 ML.GENERATE_TEXT 查询结果

恭喜!您已成功演示如何结合使用远程模型(基于 gemini-pro 模型)和 ML.GENERATE_TEXT 函数来分析 BigQuery 表中的文本数据。

现在,我们来尝试另一个使用 BigQuery 远程函数的 Vertex AI 模型。假设您想要为在 BigQuery 中远程使用模型的方式添加更多自定义和灵活性。BigQuery 文档中列出了支持的模型。

6. 用例 2 远程函数实现:设置远程函数实现

在本练习中,您将基于 Java Cloud Functions 函数,在 BigQuery 中创建一个函数,用于实现 Gemini 1.0 Pro Vision 基础模型。首先,您将创建和部署 Java Cloud Functions 函数,以使用 Gemini 1.0 Pro Vision 模型比较图片,然后在 BigQuery 中创建调用已部署的 Cloud Functions 函数的远程函数。请记住,在 BigQuery 中执行任何远程函数时,可以遵循相同的过程。

下面我们开始步入正题!

第 1 步:创建 Java Cloud Functions 函数

您将使用 Java 构建一个第 2 代 Cloud Functions 函数,用于根据基准映像验证测试图片。基准图片存储在一个数据集内,该数据集内包含测试图片屏幕截图,该数据集位于 BigQuery 的外部表中。您将使用 Gemini Pro Vision 模型 (Java SDK) 验证图片。然后,您需要将 Java Cloud Functions 函数部署到 REST 端点。

请按照以下步骤操作:

  1. 启动 Cloud Shell Editor
  2. 如果您使用的是旧版编辑器,请点击试用新编辑器
  3. 在状态栏中,点击 Cloud Code - 登录
  4. 如果系统提示您授权 Cloud Shell Editor 进行 Google Cloud API 调用,请点击授权。按照提示登录您的 Google 帐号。您现已连接到 Google Cloud。
  5. 如果在 Cloud Code 状态栏中未看到您的项目,请依次点击 Cloud Code - 登录 > 选择 Google Cloud 项目。选择您要在其中创建 Cloud Functions 函数的 Google Cloud 项目。该项目会在 Cloud Shell 编辑器中加载并成为活跃项目。
  6. 在 Cloud Code 状态栏中,点击活跃项目名称。在显示的快速选择菜单中,选择新应用
  7. Create New Application 对话框中,选择 Cloud Functions application

“新建应用”弹出页面 1

  1. 当系统提示您选择模板时,请选择 Java: Hello World

“新建应用”弹出页面 2

  1. 在项目路径中输入 Gemini-BQ-Function 作为项目名称。项目结构会显示在新的 Cloud Shell 编辑器视图中。

新的 Java Cloud Functions 函数应用项目结构

  1. <dependencies>... </dependencies> 标记内添加必要的依赖项,或从示例 pom.xml 文件中复制依赖项。
  2. 将类的名称从 HelloWorld.java 更改为更有意义的名称。我们选择 GeminiBigQueryFunction.java。相应地重命名软件包。
  3. GeminiBigQueryFunction.Java 文件中的占位符代码替换为 GitHub 代码库中提供的示例代码。请务必将示例代码中的变量 <YOUR_PROJECT_ID> 替换为您的项目 ID。
  4. 转到 Cloud Shell 终端。检查您是否位于项目目录中。如果没有,则通过执行以下命令导航到项目目录:
cd Gemini-BQ-Function
  1. 执行以下语句以构建和部署 Cloud Functions 函数:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .

将命令中的入口点替换为函数的入口点。输出是采用以下格式的 REST 网址:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
  1. 在终端运行以下命令来测试此 Cloud Functions 函数:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'

对随机示例提示的响应:

Cloud Functions 函数的 JSON 响应字符串

太棒了!适用于 Gemini Pro Vision 的通用 Cloud Functions 函数模型实现已准备就绪。让我们通过 BigQuery 远程函数中的 BigQuery 数据直接使用此端点。

第 2 步:创建 BigQuery 对象表和远程函数

前提条件

在本部分的练习中,您需要一个 Cloud Storage 存储分区。如需创建 Cloud Storage 存储分区,请按以下步骤操作:

  1. 如需创建存储分区,请转到 Cloud Storage 控制台,然后点击创建
  2. 输入 demo-bq-gemini-public-image 作为存储分区名称,然后点击创建
  3. 取消选中 Enforce public access prevention on this bucket 选项。虽然在本练习中您创建此存储分区以供公开访问,但我们建议您根据企业用例的要求,阻止公开访问,并提供对特定服务账号的权限。
  4. 创建存储分区后,转到权限标签页以查看和更改权限。
  5. 如需添加主账号,请点击授予访问权限。指定服务账号 ID 以向特定账号授予权限,或指定 allUsers 以授予对存储分区的公开访问权限。
  6. 选择 Storage Object Viewer 角色,然后点击保存。如果系统提示,请选择允许公开访问。
  7. 转到对象标签页,然后上传基准图片和测试图片以进行比较。对于此 Codelab,您可以上传以下公开的对象:baseline.JPGTEST1.JPGTEST2.JPG

创建 BigQuery 对象表

从 BigQuery 创建外部对象表,以使用您之前创建的连接和数据集访问存储分区中的非结构化数据。为此,请从 BigQuery 查询编辑器窗格中执行以下 DDL(数据定义语言)语句:

CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);

检查数据集内是否创建了名为 image_validation 的新对象表。

创建 BigQuery 远程函数

在 BigQuery 中创建远程函数,以调用实现 Gemini Pro Vision 模型的 Java Cloud Functions 函数。请在同一数据集中创建此数据集。为此,请从 BigQuery 控制台的 SQL 编辑器窗格中运行以下 DDL:

CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
 REMOTE WITH CONNECTION `us.gemini-bq-conn`
 OPTIONS (
   endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
   max_batching_rows = 1
 );

端点网址是本练习前面返回的 REST 网址。这将在 BigQuery 中创建远程函数。上述 DDL 中有三个参数。前两个参数是上一步中创建的对象表中存储的图片的网址。最后一个参数是发送给模型的提示 (Gemini Pro Vision)。您可以参考用于解析此签名的 Java Cloud Functions 函数代码:

Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();

从 BigQuery 调用 Gemini

SELECT 查询中使用远程函数,根据提示测试用于验证图片的函数。

select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image.  Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';  

使用 TEST1TEST2 对象文件尝试上述查询。您将看到类似于以下内容的结果:

BigQuery 远程函数结果屏幕截图

以下是供您参考的图片:

基准图片

测试用例的基准参考图片

测试图片

测试用例的测试图片 1

请注意,这两个图片类似,因为它们都具有 Duet AI Cloud 控制台视图,但两者中的文本有所不同,因为两者中的文本是模型以 JSON 格式生成的。

至此,您已成功测试了远程函数实现。

7. 优势和应用场景

我们来看看将 BigQuery 与 Gemini 集成在一起进行结构化和非结构化数据分析可带来哪些好处。

  • 将生成式 AI 融入您的数据:您无需再移动数据、复制数据,也不必增加复杂性。您可以在同一 BigQuery 环境中分析数据和生成洞见。
  • 增强型分析:Gemini 的自然语言解释功能为您的数据添加了新的理解层,您可以使用 SQL 查询来实现此目的。
  • 可伸缩性:此解决方案只需少量代码即可轻松处理大型数据集和复杂的分析。

这方面的应用有很多。考虑金融(市场趋势分析)、零售(客户情绪)、医疗保健(医疗报告摘要)等场景,在这些场景中,您的分析和业务团队只需相对较少的工作量、资源和熟悉的语言和工具就能实现这些场景。

8. 清理

为避免系统因本博文中使用的资源向您的 Google Cloud 账号收取费用,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往管理资源页面。
  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关停以删除项目。
  4. 如果您想保留项目,请跳过上述步骤,并删除 Cloud Functions 函数。为此,请前往 Cloud Functions,在函数列表中选中要删除的函数,然后点击删除

9. 恭喜

恭喜!Gemini 模型已集成到 BigQuery 中,您不再是单纯地分析数据,而是变成了数据叙述者。您可以在数据集中生成隐藏的叙述,改变您理解数据洞见的方式。开始实验!将此方法应用于您自己的数据集,并探索数据中的故事。BigQuery 支持对象表(外部表)中的非结构化数据,不妨尝试使用 Gemini Pro Vision 来生成有关图片数据的生成式分析洞见。如需获得更深入的指导,请参阅 Vertex AIBigQuery 远程函数Cloud Functions 的文档。以下是此项目的 GitHub 代码库。请与我们分享您的学习成果!