1. 簡介
你喜歡閱讀書籍,但在眾多選擇中感到不知所措嗎?假設有一款採用 AI 技術的應用程式,不僅會推薦完美的讀物,還會根據所選類型提供簡明摘要,讓您一窺書籍的精髓。在本程式碼研究室中,我將逐步說明如何使用 BigQuery、Gemini 和 Gemini 支援的 Cloud Functions 建構這類應用程式。
專案總覽
我們的用途主要圍繞以下 4 個主要元件:
- 書籍資料庫:龐大的 BigQuery 公開資料集內含網際網路封存書籍,做為我們完整的書籍目錄。
- AI 摘要引擎:Google Cloud Functions 搭載 Gemini 1.0 Pro 語言模型,可依據使用者要求生成深入分析摘要。
- BigQuery 整合:BigQuery 中的遠端函式,可呼叫 Cloud 函式來提供隨選書籍摘要和主題。
- 使用者介面:在 Cloud Run 上託管的網頁應用程式,可提供網頁應用程式供使用者查看結果。
我們會將實作項目分成 3 個程式碼研究室:
程式碼研究室 1:使用 Gemini 為 Gemini 應用程式建構 Java Cloud Function。
程式碼研究室 2:運用 Gemini 搭配 BigQuery 和生成式 AI 建構 SQL 應用程式。
程式碼研究室 3:使用 Gemini 建立與 BigQuery 互動的 Java Spring Boot 網頁應用程式。
2. 使用 Gemini 搭配 BigQuery 和生成式 AI 建構 SQL 應用程式
建構項目
您將建立
- BigQuery 中的遠端模型,可叫用 Vertex AI text-bison-32k 端點,從表格中以「"」分隔的關鍵字清單,找出書籍的類型 (或主題)。
- BigQuery 中的遠端函式,可從遠端叫用已部署的生成式 AI Cloud 函式。
- 使用遠端模型和函式,透過 SQL 查詢總結書籍主題和文字,並將結果寫入 Bookshelf 資料集的新資料表。
- 您將透過 Gemini 執行這些步驟
3. 需求條件
- Chrome 或 Firefox 等瀏覽器
- 已啟用計費功能的 Google Cloud 專案
- 建議您在第 1 部分的程式碼研究室使用 Gemini 為 Gemini 應用程式建構 Java Cloud Function程式碼研究室中,部署 Cloud Function。
- 條件:如果您目前可以使用免費的 Google Cloud 抵免額連結 (工作坊主辦單位可能已為您提供),請先按照下方頁面中的操作說明,完成啟用抵免額和建立專案的步驟。如果沒有這個連結,請繼續執行下列專案和結帳必要條件步驟:
建立專案
如果您已啟用帳單帳戶,並使用上述條件步驟中提及的連結建立專案,可以略過下列步驟。
- 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
啟用 Cloud Shell
- 您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境,並預先載入 bq:
在 Cloud 控制台中,按一下右上角的「啟用 Cloud Shell」:
- 連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。在 Cloud Shell 中執行下列指令,確認您已通過驗證:
gcloud auth list
- 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案。
gcloud config list project
- 如果您尚未設定專案,請使用下列指令進行設定:
gcloud config set project <YOUR_PROJECT_ID>
如要瞭解 gcloud 指令和用法,請參閱說明文件。
4. 啟用 Gemini for Google Cloud 和必要的 API
啟用 Gemini
- 前往 Gemini for Google Cloud Marketplace 啟用 API。您也可以使用下列指令:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- 前往 Gemini 頁面,然後點選「開始對話」。
啟用其他必要的 API
我們該怎麼做?我們來問問 Gemini 吧。但在開始之前,請記住:
注意:LLM 是非決定性的。因此嘗試這些提示時,你收到的回覆可能會與螢幕截圖中的回應不同。
前往 Gemini 即時通訊主控台,方法是按一下 Google Cloud 控制台右上角搜尋列旁的「Open Gemini」圖示。
在「請輸入提示」部分輸入以下問題:
如何使用 gcloud 指令啟用 BigQuery 和 Vertex AI API?
您會收到回應,如下圖所示:
複製該指令 (您可以使用指令片段頂端的複製圖示),然後在 Cloud Shell 終端機中執行,啟用相應服務:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. 探索 BigQuery 公開資料集的書籍資料
首先,請熟悉 BigQuery 公開資料集,其中包含許多 網路檔案書籍的相關資訊。
您可以在 BigQuery Explorer 窗格中找到這個公開資料集。您可以在 BigQuery 控制台的左側找到這項資訊。
在搜尋列中輸入「gdelt-bq」或「internetArchivebooks」,然後按一下 [搜尋所有專案]。展開搜尋結果,並為網際網路封存書籍加上星號,如下圖所示:
。
請展開資料集,點選 gdelt-bq.internetArchivebooks,然後預覽 1920 年資料表中的資料。這個表格包含 1920 年封存的書籍。
如要查看我們在後續章節中會使用的結構定義,請執行下列查詢:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
我們會在程式碼研究室中使用下列三個欄位:
- BookMeta_Title (標題)
- 主題 (主題以 ‘;' 分隔)
- BookMeta_FullText (書籍完整內容)
6. 建立名為「bookshelf」的新 BigQuery 資料集
我們想在專案下建立資料集,儲存要在本研究室中建立的所有資料庫和數據分析物件。我們來詢問 Gemini 如何建立 BigQuery 資料集。您應該已經在瀏覽器的另一個分頁中開啟 Gemini 即時通訊功能,並完成啟用 API 的步驟。如果尚未加入,請立即加入。前往 https://console.cloud.google.com 即可前往 Google Cloud 控制台,您應該會在頂端搜尋列旁邊看到 Gemini 圖示。按一下該圖示,即時通訊隨即開啟。
輸入提示,如下所示。
以下是我的提示:
How to create a BigQuery dataset?
回覆內容如下:
請按照回覆中列出的步驟,在使用中的專案中建立名為「bookshelf」的資料集。
如要建立 BigQuery 資料集,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「BigQuery」頁面。
- 在「Explorer」面板中,按一下專案 ID。
- 按一下「建立資料集」(點選專案 ID 旁的 3 點圖示時,這個選項應會列在清單中)
- 輸入資料集名稱「bookshelf」。
- 將位置設為「美國(多區域)」。
- 針對回應中的步驟 3、4、5 和 6,請保留預設選項。
- 點選「建立資料集」。
系統會建立資料集,並顯示在「Explorer」面板中。「bookshelf」資料集如下所示:
7. 建立遠端模型來叫用 Vertex AI 大型語言模型 (text-bison-32k)
接著,我們需要在 BigQuery 中建立叫用「text-bison-32k」Vertex AI 模型的模型。模型會從資料集中每本書的關鍵字清單中,找出書籍的共同主題和背景資訊。
我們來問問 Gemini 這個問題。如要這麼做,請前往開啟 Gemini 即時通訊主控台的分頁,然後輸入以下提示:
您要如何連結 BigQuery 和 Vertex AI,以便在 BigQuery 中呼叫 LLM 端點 (text-bison-32k)?
回應如下:
回應中包含準確的資訊,例如逐步包含使用 CREATE MODEL 陳述式、使用 BigQuery 連線及定義端點的步驟。對我來說,查詢語句是正確的,但這不代表您會收到完全相同的輸出內容,因為這是大型語言模型,您可能會收到不同格式、數量和深度的回應。如果你沒有看到我收到的所有詳細資料,歡迎在即時通訊中提出後續問題。例如:請進一步說明如何建立連線資源,或為何缺少連線屬性,或是如何從 BigQuery 連線至 Vertex AI 等。
以下是後續提示訊息範例 (請僅在需要後續追蹤時使用,如果收到的第一個回覆已足夠,請繼續使用該回覆):
What about the connection? How will I connect from BigQuery to Vertex AI?
回應如下:
請按照回應中的步驟操作,建立 BigQuery 連線:
- 前往 BigQuery 主控台。
- 在「BigQuery 多層檢視」窗格中,按一下「+ 新增」按鈕,然後點選「外部資料來源連線」。
- 此時系統會要求您啟用 BigQuery Connection API。按一下「啟用 API」:
- 按一下「與外部資料來源的連線」,畫面上應該會顯示「外部資料來源」投影片,如下所示 。在外部來源清單中,選取「Vertex AI」來源。
- 輸入連線 ID (可以是您選擇的 ID,但目前請將其設為「bq-vx」) 和區域 (多區域「US」)。
- 按一下「建立連線」。
- 建立連線後,按一下「前往連線」。
- 在連線資訊頁面中,複製服務帳戶 ID,因為我們會在後續步驟中使用這個 ID。
- 連線建立完成後,請為我們複製的服務帳戶 ID 指派權限,以便使用 Vertex AI。
- 在 Google Cloud 控制台頁面中開啟 Google Cloud IAM,或前往連結。
- 按一下「View by Principals」部分下方的「Grant Access」。
- 在「Grant Access」對話方塊中,在「New principals」文字方塊中輸入先前記下的服務帳戶 ID。
- 將角色設為「Vertex AI 使用者」。
系統會建立必要的連線。授予必要權限,讓實體 (連線的服務帳戶) 能夠透過 BigQuery 使用 Vertex AI。
執行下列 DDL (資料定義語言) 陳述式,表示建立資料庫物件 (在本例中為 BigQuery 查詢編輯器中的 MODEL)。
CREATE OR REPLACE MODEL bookshelf.llm_model
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (ENDPOINT = 'text-bison-32k');
您可以嘗試使用其他方法來執行上述步驟,請 Gemini 提供查詢建議,建立可叫用「text-bison-32k」模型的模型。
注意:如果您為連線使用不同的名稱,請在先前的 DDL 陳述式中,將「us.bq-vx」替換為該名稱。這項查詢會在先前建立的「書架」資料集中建立遠端模型。
8. 建立可叫用 Java Cloud 函式的遠端函式
我們現在將使用本系列程式碼研究室 1 中建立的 Java Cloud Function,在 BigQuery 中建立遠端函式,以便實作 Gemini 模型。這個遠端函式將用於摘要書籍內容。
注意:如果您錯過這個 程式碼研究室,或是尚未部署這個 Cloud Function,可以略過這個步驟,直接前往下一主題 (使用遠端模型總結書籍主題)。
前往 BigQuery 控制台,並將下列 DDL 陳述式貼到查詢編輯器 (按一下「+」按鈕即可建立新的查詢編輯器分頁)
以下是您可以複製的 DDL。請記得將端點替換為已部署的 Cloud Function 端點 (透過 codelab 1 建立)。如果沒有端點,您可以將下方 DDL 中的遮罩字元替換為「abis-345004」,以便進行示範。
CREATE OR REPLACE FUNCTION
`bookshelf.GEMINI_REMOTE_CALL` (context STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (
endpoint = 'https://us-central1-****-******.cloudfunctions.net/remote-gemini-call' );
前往 Google Cloud 平台的 BigQuery 主控台,然後開啟新的查詢編輯器分頁。在 BigQuery 查詢編輯器中,貼上上述 DDL 陳述式。執行查詢後,您會看到下列回應:
模型和函式已建立完成,現在我們要在 SELECT 查詢中執行這兩個 BigQuery 物件,以便測試這兩個物件。
9. 使用遠端模型產生主題摘要
讓我們使用我們建立的遠端模型「書架.llm_model」,從指定的主題清單中產生書籍的合併關鍵字:
SELECT * FROM ML.GENERATE_TEXT(MODEL `bookshelf.llm_model`,
(
SELECT
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` LIMIT 1
));
選用步驟:LLM 產生的結果欄位是以巢狀結構顯示。讓我們在查詢中加入一些 LLM 參數和「flatten_json_output」屬性。使用「flatten_json_output」屬性,有助於從 LLM 產生的結果欄位中移除巢狀結構。
SELECT * FROM ML.GENERATE_TEXT ( MODEL `bookshelf.llm_model`, (
SELECT CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt FROM `gdelt-bq.internetarchivebooks.1920` limit 1),
STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
接著,請在 BigQuery 編輯器中執行 SELECT 查詢,並驗證結果。我們已將查詢結果限制為 1 個,以利測試。結果如下所示:
10. 使用遠端函式摘要書籍全文
我們現在將嘗試執行先前建立的 bookshelf.GEMINI_REMOTE_CALL Cloud 函式,以便為書籍製作摘要。
注意:如果您略過遠端函式建立作業 (本程式碼研究室中先前的主題),請務必也略過 SELECT 查詢中的 bookshelf.GEMINI_REMOTE_CALL 函式呼叫。
使用 SELECT 查詢呼叫先前建立的遠端函式 (GEMINI_REMOTE_CALL)。對 GEMINI_REMOTE_CALL 函式的呼叫會顯示提示,要求提供書籍文字摘要:
select BookMeta_Title, `bookshelf.GEMINI_REMOTE_CALL` (
CONCAT('This is about a book. The title of the book is this: ', BookMeta_Title, ' . The theme of the book is as follows: ', Themes, 'The following text contains an excerpt from the book. Summarize it in less than 5 lines to create the gist. If you do not have a summary, use the title and themes to make up a short summary. DO NOT RETURN EMPTY RESPONSE. ', SUBSTR(BookMeta_FullText, 5000, 10000))) Summary
from `gdelt-bq.internetarchivebooks.1920` where Themes like '%EDUCATION%' limit 1;
請注意,我們是從書籍全文中擷取子字串,產生摘要。
查詢結果如下:
11. 將書籍資料儲存在資料表中
我們現在只使用 SQL 查詢測試了 BigQuery 的 LLM 呼叫 (遠端模型和函式),現在讓我們建立 BigQuery 資料表,在遠端模型和函式相同的資料集中,儲存含有主題洞察的「擁有主題洞察」的資料。
我們其實可以在這步驟中同時加入 LLM 模型呼叫和遠端函式呼叫。不過,由於我們已將遠端函式呼叫 (會叫用 Cloud Function) 標示為選用步驟,因此我們只會使用遠端模型的深入分析資料。
以下是我們要使用的查詢:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
在 BigQuery 編輯器中執行查詢時,結果如下:
現在,讓我們要求 Gemini 根據上述查詢,建立名為「書架.books」的資料表。前往 Google Cloud Console 中的 Gemini 即時通訊主控台,然後輸入下列提示。
以下是我們要使用的提示:
Create a BigQuery table named bookshelf.books from this SELECT query:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
Gemini 即時通訊的回覆如下:
如要直接從這裡複製查詢,請使用以下查詢:
CREATE TABLE bookshelf.books (
BookMeta_Title STRING,
Themes STRING,
ml_generate_text_llm_result STRING
) AS (
SELECT
BookMeta_Title,
Themes,
ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,
BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920`
LIMIT 5
),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output
)
)
);
在 BigQuery 編輯器中執行查詢後,結果如下:
大功告成!您現在可以查詢資料表,並試著運用資料來取得更多洞察資料。
12. 恭喜
恭喜!我們已成功完成以下工作,並在過程中的部分步驟中使用 Gemini:
- 在 BigQuery 中建立遠端模型,用於叫用 Vertex AI「text-bison-32k」端點,從表格中以「"」分隔的關鍵字清單中,找出書籍的類型 (或主題)。
- 在 BigQuery 中建立遠端函式,以便遠端叫用這個已部署的生成式 AI Cloud 函式。這個函式會將提示做為輸入內容,並輸出字串,以 5 行概述書籍。
- 使用遠端模型和函式,透過 SQL 查詢摘要書籍的主題和內容,並將結果寫入書架資料集的新資料表。
- 後續作業,可以使用 Gemini 取得 SQL,以便刪除在 BigQuery 中建立的物件。這會涵蓋清理步驟。