使用 Vertex AI PaLM API 搭配 BigQuery ML 的僅限 SQL 大型語言模型

1. 簡介

在本程式碼研究室中,我將使用 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 and 遠端函式」做為連線類型並提供「llm-conn」做為連線 ID

6b75042881eaec5f.png

  1. 建立連線後,請記下連線設定詳細資料產生的服務帳戶

7. 授予權限

在這個步驟中,我們會授予服務帳戶存取 Vertex AI 服務的權限:

開啟 IAM,新增您在建立外部連線做為主體後複製的服務帳戶,然後選取「Vertex AI 使用者」角色

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.png

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.png

11. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本文中所用資源的費用,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台中的「管理資源」頁面。
  2. 在專案清單中,選取要刪除的專案,然後按一下 [刪除]
  3. 在對話方塊中輸入專案 ID,然後按一下「關閉」以刪除專案

12. 恭喜

恭喜!您已成功透過程式輔助方式,使用 Vertex AI 文字生成大型語言模型,只透過 SQL 查詢對資料執行文字分析。如要進一步瞭解可用的模型,請參閱 Vertex AI LLM 產品說明文件