1. 簡介
在本程式碼研究室中,我將使用 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 and 遠端函式」做為連線類型並提供「llm-conn」做為連線 ID
- 建立連線後,請記下連線設定詳細資料產生的服務帳戶
7. 授予權限
在這個步驟中,我們會授予服務帳戶存取 Vertex AI 服務的權限:
開啟 IAM,新增您在建立外部連線做為主體後複製的服務帳戶,然後選取「Vertex AI 使用者」角色
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 帳戶收取本文中所用資源的費用,請按照下列步驟操作:
12. 恭喜
恭喜!您已成功透過程式輔助方式,使用 Vertex AI 文字生成大型語言模型,只透過 SQL 查詢對資料執行文字分析。如要進一步瞭解可用的模型,請參閱 Vertex AI LLM 產品說明文件。