1. 简介
在此 Codelab 中,我列出了使用 Vertex AI 大语言模型 ( text-bison) 作为 BigQuery 中的托管式远程函数,对 GitHub 代码库中的源代码进行汇总以及识别代码库中的编程语言的步骤。得益于 GitHub Archive Project,我们现在拥有 Google BigQuery 公共数据集中超过 280 万个开源 GitHub 代码库的完整快照。使用的服务如下:
- BigQuery ML
- Vertex AI PaLM API
构建内容
您将创建
- 包含模型的 BigQuery 数据集
- 将 Vertex AI PaLM API 作为远程函数进行托管的 BigQuery 模型
- 用于在 BigQuery 和 Vertex AI 之间建立连接的外部连接
2. 要求
3. 准备工作
- 在 Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目
- 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能
- 确保所有必要的 API(BigQuery API、Vertex AI API、BigQuery Connection API)已启用
- 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq。如需了解 gcloud 命令和用法,请参阅文档
在 Cloud 控制台中,点击右上角的“激活 Cloud Shell”:
如果项目未设置,请使用以下命令进行设置:
gcloud config set project <YOUR_PROJECT_ID>
- 在浏览器中输入以下网址,直接前往 BigQuery 控制台:https://console.cloud.google.com/bigquery
4. 正在准备数据
在此用例中,我们使用的是 Google BigQuery 公共数据集中 github_repos 数据集的源代码内容。如需使用此工具,请在 BigQuery 控制台中搜索“github_repos”然后按 Enter 键。点击作为搜索结果列出的数据集旁边的星标。然后点击“仅显示已加星标”选项以仅从公共数据集中查看该数据集。
展开数据集中的表,以查看架构和数据预览。我们将使用 sample_contents,它仅包含内容表中全部数据的样本 (10%)。数据预览如下:
5. 创建 BigQuery 数据集
BigQuery 数据集是表的集合。数据集中的所有表都存储在相同的数据位置。您还可以附加自定义访问权限控制,限制对数据集及其表的访问权限。
在区域“US”中创建数据集(或我们偏好的任何区域)命名为 bq_llm
此数据集将包含我们将在后续步骤中创建的机器学习模型。通常,我们还会将机器学习应用中使用的数据存储在此数据集本身的表中,但在用例中,数据已存在于 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:
- 点击 BigQuery Explorer 窗格(位于 BigQuery 控制台左侧)上的“+ 添加”按钮,然后点击“与外部数据源的连接”在列出的热门来源中
- 选择“BigLake 和远程函数”作为连接类型并提供“llm-conn”作为连接 ID
- 创建连接后,请记下通过连接配置详细信息生成的服务账号
7. 授予权限
在此步骤中,我们将向服务账号授予访问 Vertex AI 服务的权限:
打开 IAM,将您在创建外部连接后复制的服务账号添加为主账号,然后选择“Vertex AI User”角色
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 是您希望响应的字词数
查询响应如下所示:
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 响应中提取的扁平可理解文本。
查询响应如下所示:
11. 清理
为避免系统因本博文中使用的资源向您的 Google Cloud 账号收取费用,请按以下步骤操作:
- 在 Google Cloud 控制台中,进入管理资源页面
- 在项目列表中,选择要删除的项目,然后点击“删除”
- 在对话框中输入项目 ID,然后点击“关停”以删除项目
12. 恭喜
恭喜!您已成功通过程序化方式使用 Vertex AI Text Generation LLM,只使用 SQL 查询对数据执行文本分析。如需详细了解可用的模型,请参阅 Vertex AI LLM 产品文档。