仅包含 SQL 的 LLM 与 BigQuery ML 及 Vertex AI PaLM API 搭配使用

1. 简介

在此 Codelab 中,我列出了使用 Vertex AI 大语言模型 ( text-bison) 作为 BigQuery 中的托管式远程函数,对 GitHub 代码库中的源代码进行汇总以及识别代码库中的编程语言的步骤。得益于 GitHub Archive Project,我们现在拥有 Google BigQuery 公共数据集中超过 280 万个开源 GitHub 代码库的完整快照。使用的服务如下:

  1. BigQuery ML
  2. Vertex AI PaLM API

构建内容

您将创建

  • 包含模型的 BigQuery 数据集
  • 将 Vertex AI PaLM API 作为远程函数进行托管的 BigQuery 模型
  • 用于在 BigQuery 和 Vertex AI 之间建立连接的外部连接

2. 要求

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

3. 准备工作

  1. Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目
  2. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能
  3. 确保所有必要的 API(BigQuery API、Vertex AI API、BigQuery Connection API)已启用
  4. 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq。如需了解 gcloud 命令和用法,请参阅文档

在 Cloud 控制台中,点击右上角的“激活 Cloud Shell”:

51622c00acec2fa.png

如果项目未设置,请使用以下命令进行设置:

gcloud config set project <YOUR_PROJECT_ID>
  1. 在浏览器中输入以下网址,直接前往 BigQuery 控制台:https://console.cloud.google.com/bigquery

4. 正在准备数据

在此用例中,我们使用的是 Google BigQuery 公共数据集中 github_repos 数据集的源代码内容。如需使用此工具,请在 BigQuery 控制台中搜索“github_repos”然后按 Enter 键。点击作为搜索结果列出的数据集旁边的星标。然后点击“仅显示已加星标”选项以仅从公共数据集中查看该数据集。

dc6bf1e2fa6bba8a.png

展开数据集中的表,以查看架构和数据预览。我们将使用 sample_contents,它仅包含内容表中全部数据的样本 (10%)。数据预览如下:

e021c689c56abf22.png

5. 创建 BigQuery 数据集

BigQuery 数据集是表的集合。数据集中的所有表都存储在相同的数据位置。您还可以附加自定义访问权限控制,限制对数据集及其表的访问权限。

在区域“US”中创建数据集(或我们偏好的任何区域)命名为 bq_llm

c67e9f929629739a.png

此数据集将包含我们将在后续步骤中创建的机器学习模型。通常,我们还会将机器学习应用中使用的数据存储在此数据集本身的表中,但在用例中,数据已存在于 BigQuery 公共数据集中,我们将根据需要直接从新创建的数据集引用该数据。如果您想针对位于 CSV(或任何其他文件)中的您自己的数据集执行此项目,可以从 Cloud Shell 终端运行以下命令,将数据加载到 BigQuery 数据集中:

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. 正在创建外部连接

创建外部连接(如果尚未启用,请启用 BQ Connection API),并记下连接配置详细信息中的服务账号 ID:

  1. 点击 BigQuery Explorer 窗格(位于 BigQuery 控制台左侧)上的“+ 添加”按钮,然后点击“与外部数据源的连接”在列出的热门来源中
  2. 选择“BigLake 和远程函数”作为连接类型并提供“llm-conn”作为连接 ID

6b75042881eaec5f.png

  1. 创建连接后,请记下通过连接配置详细信息生成的服务账号

7. 授予权限

在此步骤中,我们将向服务账号授予访问 Vertex AI 服务的权限:

打开 IAM,将您在创建外部连接后复制的服务账号添加为主账号,然后选择“Vertex AI User”角色

ff8e1d730879f972.png

8. 创建远程机器学习模型

创建表示托管的 Vertex AI 大语言模型的远程模型:

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

它会在数据集 bq_llm 中创建一个名为 llm_model 的模型,该模型利用 Vertex AI 的 CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API 作为远程函数。完成此操作需要几秒钟时间。

9. 使用机器学习模型生成文本

创建模型后,使用该模型生成、汇总文本或对文本进行分类。

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**说明:

ml_generate_text_result** 是 JSON 格式的文本生成模型的响应,其中包含内容属性和安全属性:a.content 表示生成的文本结果 b。安全属性表示内置内容过滤器,在 Vertex AI Palm API 中启用可调整的阈值,以避免大语言模型收到任何意外或不可预见的响应 - 如果响应违反安全阈值,则会被屏蔽

ML.GENERATE_TEXT 是在 BigQuery 中用于访问 Vertex AI LLM 以执行文本生成任务的结构

CONCAT 会附加 PROMPT 语句和数据库记录

github_repos 是数据集名称,sample_contents 是保存我们将在提示设计中使用的数据的表的名称

温度是一个提示参数,用于控制回答的随机性 - 相关性越低越好

Max_output_tokens 是您希望响应的字词数

查询响应如下所示:

1156f6eecb548cd5

10. 展平查询结果

我们来展平结果,这样就不必在查询中显式解码 JSON:

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**说明:

Flatten_json_output** 表示布尔值,如果将其设为 true,则返回从 JSON 响应中提取的扁平可理解文本。

查询响应如下所示:

3b662ef7d3ba9263

11. 清理

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

  1. 在 Google Cloud 控制台中,进入管理资源页面
  2. 在项目列表中,选择要删除的项目,然后点击“删除”
  3. 在对话框中输入项目 ID,然后点击“关停”以删除项目

12. 恭喜

恭喜!您已成功通过程序化方式使用 Vertex AI Text Generation LLM,只使用 SQL 查询对数据执行文本分析。如需详细了解可用的模型,请参阅 Vertex AI LLM 产品文档