透過 BigQuery 建立 RAG 應用程式
实验
1 小时
universal_currency_alt
5 积分
show_chart
中级
info
此实验可能会提供 AI 工具来支持您学习。
GSP1289

總覽
擔心 AI 會產生幻覺嗎?AI 是相當實用的工具,不過有時會生成不準確、過時或過度籠統的回覆,這個現象稱為「幻覺」。這個實驗室會說明如何實作檢索增強生成 (RAG) pipeline,以便處理這個問題。RAG 可以從特定資料集取得符合脈絡的資訊,做為 Gemini 等大型語言模型 (LLM) 的輸出內容基準,進而提高模型品質。
假設您正在協助 Coffee-on-Wheels 這個領先業界的行動咖啡車廠商,要分析顧客對服務的意見回饋。如果無法取得最新資料,Gemini 的回覆可能會不準確。為解決這個問題,您決定建立 RAG pipeline。整個過程涵蓋下列三個步驟:
-
生成嵌入項目:將顧客意見回饋的文字轉換為向量嵌入項目 (也就是以數值表示資料),並從中捕捉語意。
-
搜尋向量空間:為這些向量建立索引,然後搜尋並檢索相似的項目。
-
生成品質更佳的回覆:運用檢索到的資訊增強 Gemini,提供更符合需求且準確的回覆。
BigQuery 可讓您順暢連線至 Vertex AI 中的遠端生成式 AI 模型,並直接透過 SQL 查詢或 Python 筆記本使用多種函式,藉此建立嵌入項目、執行向量搜尋及生成文字。
如要深入瞭解,您可以參加下列 Google Cloud Skills Boost 課程:運用 BigQuery 建立嵌入項目、向量搜尋和 RAG。
課程內容
- 建立來源連線,並授予 IAM 權限。
- 生成嵌入項目,並將文字資料轉換為向量嵌入項目。
- 搜尋向量空間並檢索相似項目。
- 運用搜尋結果增強 Gemini,生成品質更佳的回覆。
先備知識
為完成這個實驗室,您必須熟悉 BigQuery 和 SQL 程式設計工作。
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 Google Cloud 控制台
-
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
工作 1:建立來源連線,並授予 IAM 權限
建立來源連線
為透過 BigQuery 使用 Vertex AI 中的遠端生成式 AI 模型 (例如 Gemini 和嵌入模型),請建立新的外部來源連線。
- 前往 Google Cloud 控制台中的導覽選單 (
),然後點選「BigQuery」。
- 點選「Explorer」中的「+ 新增」,然後選取「連線至外部資料來源」。
- 在「連線類型」下拉式選單,選取「Vertex AI 遠端模型、遠端函式和 BigLake (Cloud 資源)」。
- 在「連線 ID」欄位輸入
embedding_conn
。
- 點選「建立連線」。
- 連線建立完畢之後,請點選彈出式確認訊息中的「前往連線」前往該連線,然後複製「服務帳戶 ID」的值,稍後為這個帳戶指派權限時會用到。
授予 IAM 權限
為使用 BigQuery 資料和 Vertex AI 資源,請將必要的 IAM 權限授予服務帳戶。
- 接下來,請按照下列步驟透過 IAM 授予權限:
- 前往 Google Cloud 控制台中的導覽選單 (
),依序點選「IAM 與管理」>「IAM」。
- 點選「授予存取權」。
- 在「新增主體」部分執行下列操作:
- 在「新增主體」文字欄位,貼上先前複製的服務帳戶 ID 值。
- 在「指派角色」部分選取下列角色 (可視情況使用搜尋功能):
- 「BigQuery 資料擁有者」
- 「Vertex AI 使用者」
- 點選「儲存」來套用變更。
- 前往導覽選單 (
),依序點選「API 和服務」和「+ 啟用 API 和服務」,然後搜尋「Vertex AI API
」,再點選「啟用」按鈕。
點選「Check my progress」,確認目標已達成。
建立來源連線,並授予 IAM 權限。
工作 2:生成嵌入項目
-
前往 Google Cloud 控制台中的導覽選單 (
),點選「BigQuery」。
-
在「Explorer」找到所需專案,依序點選旁邊的三點圖示和「建立資料集」。接著,在「資料集 ID」部分輸入 CustomerReview
。其餘選項保留預設值,並點選「建立資料集」。
-
為連線至嵌入模型,請在查詢編輯器執行下列 SQL 查詢:
CREATE OR REPLACE MODEL `CustomerReview.Embeddings`
REMOTE WITH CONNECTION `us.embedding_conn`
OPTIONS (ENDPOINT = 'text-embedding-005');
- 為了從 CSV 檔案上傳資料集,請執行下列 SQL 查詢:
LOAD DATA OVERWRITE CustomerReview.customer_reviews
(
customer_review_id INT64,
customer_id INT64,
location_id INT64,
review_datetime DATETIME,
review_text STRING,
social_media_source STRING,
social_media_handle STRING
)
FROM FILES (
format = 'CSV',
uris = ['gs://spls/gsp1249/customer_reviews.csv']
);
-
(選用) 如要在資料表查看已上傳的資料,請點選「前往資料表」。找到資料表的結構定義,點選「預覽」即可查看資料。
-
為了依據近期顧客意見回饋生成嵌入項目,並儲存於資料表,請在查詢編輯器執行下列 SQL 查詢:
CREATE OR REPLACE TABLE `CustomerReview.customer_reviews_embedded` AS
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `CustomerReview.Embeddings`,
(SELECT review_text AS content FROM `CustomerReview.customer_reviews`)
);
- (選用) 如要檢查嵌入結果,請點選「前往資料表」。找到資料表的結構定義,點選「預覽」即可查看資料。請注意,嵌入結果為浮點數,可能無法立即解讀。
點選「Check my progress」,確認目標已達成。
生成嵌入項目。
工作 3:搜尋向量空間並檢索相似項目
- 請執行下列 SQL 查詢,為向量搜尋空間建立索引:
注意事項:如果資料集內的資料列數少於 5,000 個 (如同這個實驗室的示例),就不需要建立索引。這個步驟提供所需的程式碼,處理較大型的資料集時就能用來建立向量空間索引。
CREATE OR REPLACE VECTOR INDEX `CustomerReview.reviews_index`
ON `CustomerReview.customer_reviews_embedded`(ml_generate_embedding_result)
OPTIONS (distance_type = 'COSINE', index_type = 'IVF');
- 為搜尋向量空間並檢索相似項目,請執行下列 SQL 查詢:
CREATE OR REPLACE TABLE `CustomerReview.vector_search_result` AS
SELECT
query.query,
base.content
FROM
VECTOR_SEARCH(
TABLE `CustomerReview.customer_reviews_embedded`,
'ml_generate_embedding_result',
(
SELECT
ml_generate_embedding_result,
content AS query
FROM
ML.GENERATE_EMBEDDING(
MODEL `CustomerReview.Embeddings`,
(SELECT 'service' AS content)
)
),
top_k => 5,
options => '{"fraction_lists_to_search": 0.01}'
);
- (選用) 如要查看查詢結果,請點選「前往資料表」。找到資料表的結構定義,點選「預覽」即可查看資料。
點選「Check my progress」,確認目標已達成。
搜尋向量空間並檢索相似項目。
工作 4:生成品質更佳的回覆
-
為連線至 Gemini 模型,請執行下列 SQL 查詢:
CREATE OR REPLACE MODEL `CustomerReview.Gemini`
REMOTE WITH CONNECTION `us.embedding_conn`
OPTIONS (ENDPOINT = 'gemini-pro');
-
為增強 Gemini 的回覆,請執行下列查詢,從向量搜尋結果中檢索最新相關資料,並提供給 Gemini:
SELECT
ml_generate_text_llm_result AS generated
FROM
ML.GENERATE_TEXT(
MODEL `CustomerReview.Gemini`,
(
SELECT
CONCAT(
'Summarize what customers think about our services',
STRING_AGG(FORMAT('review text: %s', base.content), ',\n')
) AS prompt
FROM
`CustomerReview.vector_search_result` AS base
),
STRUCT(
0.4 AS temperature,
300 AS max_output_tokens,
0.5 AS top_p,
5 AS top_k,
TRUE AS flatten_json_output
)
);
- 在查詢編輯器下方的「查詢結果」部分,查看 Gemini 生成的結果。
思考下列問題:
1. 要如何判斷採用 RAG 之後,Gemini 生成的回覆比先前更符合需求?請以程式碼測試看看。
2. 如何改良程式碼?舉例來說,如果不將向量搜尋結果儲存至資料表 (工作 3),是否能將這項程序直接整合至回覆生成步驟 (工作 4),即時檢索內容?
如果這個實驗室還有時間,可以想想這些問題。祝您好運!
點選「Check my progress」,確認目標已達成。
從向量搜尋結果中檢索資料,藉此提高回覆品質。
恭喜!
為協助 Coffee-on-Wheels 深入分析顧客對其服務的意見回饋,您成功在 BigQuery 實作 RAG pipeline,向 Gemini 提供最新相關資訊。這個過程中,您連線至遠端生成式 AI 模型 (包括嵌入模型和 Gemini),並完成了下列三個步驟:建立嵌入項目、搜尋向量空間,以及生成品質更佳的回覆。您可以按照這個實驗室提供的做法,處理貴組織面臨的 AI 幻覺難題。
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2025 年 1 月 22 日
實驗室上次測試日期:2025 年 1 月 22 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。