GSP1249

總覽
本實驗室將說明如何搭配運用 BigQuery 機器學習和遠端模型 (Gemini Flash),擷取顧客評論中的關鍵字,依此評估顧客情緒。
BigQuery 是內建 AI 的全代管資料分析平台,專為多引擎、跨格式和多雲端環境而設計,可充分發揮資料價值。其中一項重要功能就是 BigQuery 機器學習,只要搭配使用 SQL 查詢或 Colab Enterprise 筆記本,就能建立和執行機器學習 (ML) 模型。
Gemini 是由 Google DeepMind 開發的一系列生成式 AI 模型,專為多模態用途而設計。您可以透過 Gemini API 使用 Gemini Flash 模型。
在本實驗室的最後,您將在 BigQuery 的 Colab Enterprise 筆記本建構 Python 客服應用程式,並使用 Gemini Flash 模型回應音訊格式的顧客評論。
目標
本實驗室的內容包括:
- 在 BigQuery 使用 Colab Enterprise 建立 Python 筆記本。
- 在 BigQuery 建立雲端資源連線。
- 在 BigQuery 建立資料集和資料表。
- 在 BigQuery 建立 Gemini 遠端模型。
- 提示 Gemini 分析顧客評論文字中的關鍵字和情緒 (正面或負面)。
- 生成報表來呈現正負面評論的數量。
- 大規模回應顧客評論。
- 建構客服代表專用的應用程式,回應音訊格式的顧客評論。
設定和需求
瞭解以下事項後,再點選「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:建立 BigQuery Python 筆記本並連線至執行階段
在這項工作,您會建立 BigQuery Python 筆記本,然後連線至執行階段。
建立 BigQuery Python 筆記本
-
前往 Google Cloud 控制台,依序點選「導覽選單」圖示 >「BigQuery」。
-
點選歡迎彈出式視窗中的「完成」。
-
點選「筆記本」。
-
在「區域」部分選取 。
-
點選「選取」。
Python 筆記本也會新增至專案的 Explorer 筆記本部分。
-
將滑鼠游標懸停在各儲存格上,並點選隨即出現的「垃圾桶」圖示,刪除筆記本中的所有儲存格。
完成後,筆記本應為空白,這時就能進行下一個步驟。
連線至執行階段
-
在 BigQuery 筆記本編輯器,點選「Connect」。
-
在 OAuth 彈出式視窗,點選「開啟」。
-
點選 Qwiklabs 學生 ID。
請稍候,最多需要 3 分鐘才能連線至執行階段。
之後,您會在瀏覽器視窗底部看到連線狀態更新為「已連線」。
點選「Check my progress」,確認目標已達成。建立 BigQuery Python 筆記本並連線至執行階段
工作 2:建立雲端資源連線並授予 IAM 角色
在 BigQuery 建立雲端資源連線
在這項工作,您會在 BigQuery 建立 Cloud 資源連線,以使用 Gemini Flash 模型。您也要調整角色設定,為雲端資源連線的服務帳戶授予 IAM 權限,這樣該帳戶就能使用 Vertex AI 服務。
您將使用 Python SDK 和 Google Cloud CLI 建立資源連線,但需要先匯入 Python 程式庫,並設定 project_id 和區域變數。
-
在 BigQuery 筆記本編輯器,點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼︰
# 匯入 Python 程式庫
import vertexai
from vertexai.generative_models import GenerativeModel, Part
from google.cloud import bigquery
from google.cloud import storage
import json
import io
import matplotlib.pyplot as plt
from IPython.display import HTML, display
from IPython.display import Audio
from pprint import pprint
這些程式碼會隨即匯入 Python 程式庫。
-
執行這個儲存格。程式庫現已載入,可供使用。
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
import os
PROJECT_ID = "{{{project_0.project_id | PROJECT_ID}}}"
LOCATION = os.environ.get("GOOGLE_CLOUD_REGION", "global")
注意:這裡的 PROJECT_ID 和 LOCATION 會儲存為 Python 變數,而非 SQL 變數,因此只能在儲存格中使用 Python 程式碼參照這些變數,無法使用 SQL 程式碼。
-
執行這個儲存格。PROJECT_ID 和 LOCATION 皆已設定。
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 建立資源連線
!bq mk --connection \
--connection_type=CLOUD_RESOURCE \
--location=US \
gemini_conn
這些程式碼會使用 Google Cloud CLI 指令 bq mk --connection 建立資源連線。
-
執行這個儲存格。資源連線現已建立。
-
在 Explorer 窗格,點選專案 ID 旁邊的「查看動作」按鈕。
-
選擇「重新整理內容」。
-
展開專案 下的「連線」。您會發現 us.gemini_conn 現已列為外部連線。
-
點選「us.gemini_conn」。
-
在「連線資訊」窗格,將服務帳戶 ID 複製到文字檔案,方便在下一項工作使用。
為連線的服務帳戶授予 Vertex AI 使用者角色
-
前往控制台,依序點選「導覽選單」圖示 >「IAM 與管理」。
-
點選「授予存取權」。
-
在「新增主體」欄位,輸入先前複製的服務帳戶 ID。
-
在「選取角色」欄位輸入 Vertex AI,然後選取「Vertex AI 使用者」角色。
-
點選「儲存」。
現在服務帳戶會具備 Vertext AI 使用者角色。
點選「Check my progress」,確認目標已達成。建立雲端資源連線並授予 IAM 角色
工作 3:查看音訊檔和資料集,並為服務帳戶授予 IAM 角色
在這項工作,您會查看資料集和音訊檔案,然後為雲端資源連線的服務帳戶授予 IAM 權限。
查看 Cloud Storage 中的音訊檔案、圖片檔和顧客評論資料集
開始執行這項工作,為資源連線服務帳戶授予權限前,請先查看資料集和圖片檔。
-
前往 Google Cloud 控制台,依序選取「導覽選單」圖示
>「Cloud Storage」>「Bucket」。
-
點選 Cloud Storage bucket 。
-
開啟 bucket 中的 gsp1249 資料夾,內含四個項目:
-
audio 資料夾包含所有即將分析的音訊檔案。您可以開啟這個資料夾並逐一瀏覽。
-
customer_reviews.csv 檔案是含有顧客評論文字的資料集。
-
images 資料夾含有本實驗室稍後會用到的圖片檔。您可以開啟這個資料夾並查看當中的檔案。
-
notebook.ipynb 是要在本實驗室建立的筆記本副本。請視需要查看檔案。
注意:您可以使用驗證網址下載及查看各項目。
為連線的服務帳戶授予 IAM 儲存空間物件管理員角色
請先為資源連線的服務帳戶授予 IAM 權限,再開始使用 BigQuery,確保執行查詢時不會發生存取遭拒錯誤。
-
返回 bucket 的根層級。
-
點選「權限」。
-
點選「授予存取權」。
-
在「新增主體」欄位,輸入先前複製的服務帳戶 ID。
-
在「選取角色」欄位輸入儲存空間物件管理員,然後選取該角色。
-
點選「儲存」。
現在服務帳戶會具備儲存空間物件管理員角色。
點選「Check my progress」,確認目標已達成。查看圖片和資料集,並為服務帳戶授予 IAM 角色
工作 4:在 BigQuery 建立資料集和顧客評論資料表
在這項工作,您會建立專案資料集與顧客評論資料表。
建立資料集
資料集會用到下列屬性:
| 欄位 |
值 |
| 資料集 ID |
gemini_demo |
| 位置類型 |
選取「多區域」
|
| 多區域 |
選取「美國」
|
-
回到 BigQuery 的 Python 筆記本。
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 建立資料集
%%bigquery
CREATE SCHEMA IF NOT EXISTS `{{{project_0.project_id | PROJECT ID | disablehighlight}}}.gemini_demo`
OPTIONS(location="US");
注意,程式碼的開頭為 %%bigquery,用來指示 Python 緊接在陳述式後方的是 SQL 程式碼。
-
執行這個儲存格。
-
在 Explorer 窗格,點選專案 ID 旁邊的「查看動作」按鈕。
-
選擇「重新整理內容」。
SQL 程式碼隨即會在專案中建立 gemini_demo 資料集,列在 BigQuery Explorer 專案下方的美國區域。
建立含有樣本資料的顧客評論資料表
您需要使用 SQL 查詢來建立顧客評論資料表。
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 建立顧客評論資料表
%%bigquery
LOAD DATA OVERWRITE gemini_demo.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://{{{project_0.project_id | PROJECT ID | disablehighlight}}}-bucket/gsp1249/customer_reviews.csv']);
-
執行這個儲存格。
系統會建立含有顧客評論範例資料的 customer_reviews 資料表,涵蓋資料集內每個評論的 customer_review_id、customer_id、location_id、review_datetime、review_text、social_media_source 和 social_media_handle。
-
在 Explorer 窗格,點選專案 ID 旁邊的「查看動作」按鈕。
-
選擇「重新整理內容」。
-
在 Explorer 找到 gemini_demo 資料集,然後點選 customer_reviews 資料表,查看結構定義和詳細資料。
-
使用下方程式碼建立新的程式碼儲存格,透過查詢資料表來查看記錄。
# 建立顧客評論資料表
%%bigquery
SELECT * FROM `gemini_demo.customer_reviews`
ORDER BY review_datetime
-
執行這個儲存格。
系統會傳回資料表中的記錄,包含所有資料欄。
點選「Check my progress」,確認目標已達成。在 BigQuery 建立資料集和顧客評論資料表
工作 5:在 BigQuery 建立 Gemini Flash 模型
資料表建立完成後,即可開始使用。在這項工作,您會在 BigQuery 建立 Gemini Flash 模型。
-
返回 Python 筆記本。
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 建立顧客評論資料表
%%bigquery
CREATE OR REPLACE MODEL `gemini_demo.gemini_flash`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = '{{{project_0.startup_script.gemini_flash_model_id | model_id | disablehighlight}}}')
-
執行這個儲存格。
gemini_flash 模型會隨即建立,並新增至「模型」部分的 gemini_demo 資料集。
-
在 Explorer 窗格,點選專案 ID 旁邊的「查看動作」按鈕。
-
選擇「重新整理內容」。
-
在 Explorer 找到 gemini_demo 資料集,然後點選 gemini_flash 模型,查看詳細資料和結構定義。
點選「Check my progress」,確認目標已達成。在 BigQuery 建立 Gemini Flash 模型
工作 6:提示 Gemini 分析顧客評論的關鍵字和情緒
在這項工作,您會使用 Gemini Flash 模型,分析每個顧客評論的正負面情緒。
分析顧客評論的正負面情緒
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 建立情緒分析資料表
%%bigquery
CREATE OR REPLACE TABLE
`gemini_demo.customer_reviews_analysis` AS (
SELECT ml_generate_text_llm_result, social_media_source, review_text, customer_id, location_id, review_datetime
FROM
ML.GENERATE_TEXT(
MODEL `gemini_demo.gemini_flash`,
(
SELECT social_media_source, customer_id, location_id, review_text, review_datetime, CONCAT(
'將以下文字評論中的情緒分類為 positive 或 negative。',
review_text, "請勿在回覆中解說情緒,並移除所有不相關的資訊,只要用布林值回應 positive 或 negative 即可。") AS prompt
FROM `gemini_demo.customer_reviews`
),
STRUCT(
0.2 AS temperature, TRUE AS flatten_json_output)));
-
執行這個儲存格。
這項查詢會從 customer_reviews 資料表擷取顧客評論、建立提示詞,並要求 gemini_flash 模型區分每個評論的情緒。查詢結果會儲存至新資料表 customer_reviews_analysis,稍後可進一步用於分析。
請稍候,模型約需 30 秒來處理顧客評論記錄。
模型處理完畢後,就會建立 customer_reviews_analysis 資料表。
-
在 Explorer 窗格,點選專案 ID 旁邊的「查看動作」按鈕。
-
選擇「重新整理內容」。
-
在 Explorer 點選 customer_reviews_analysis 資料表,查看結構定義和詳細資料。
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 從 customer_reviews_analysis 資料表提取前 50 筆記錄
%%bigquery
SELECT * FROM `gemini_demo.customer_reviews_analysis`
ORDER BY review_datetime
-
執行這個儲存格。
系統會顯示 ml_generate_text_llm_result 資料欄 (含情緒分析) 的多個資料列、顧客評論文字、顧客 ID 和地點 ID。
請查看記錄。您可能會發現某些正負面結果的格式有誤,含有句號或額外空格等不相關的字元。這時可以按照下列指示,使用 view 來清理記錄。
建立 view 來清理記錄
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 在新的 view 中清理記錄
%%bigquery
CREATE OR REPLACE VIEW gemini_demo.cleaned_data_view AS
SELECT REPLACE(REPLACE(LOWER(ml_generate_text_llm_result), '.', ''), ' ', '') AS sentiment,
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(social_media_source, r'Google(\+|\sReviews|\sLocal|\sMy\sBusiness|\sreviews|\sMaps)?', 'Google'),
'YELP', 'Yelp'
),
r'SocialMedia1?', 'Social Media'
) AS social_media_source,
review_text, customer_id, location_id, review_datetime
FROM `gemini_demo.customer_reviews_analysis`;
-
執行這個儲存格。
程式碼會建立名為 cleaned_data_view 的 view,內含情緒結果、評論文字、顧客 ID 和地點 ID。接著,查詢會擷取情緒結果 (正面或負面)、確保所有英文字母均改為小寫,並移除額外空格或句號等不相關的字元,就能更輕鬆地在本實驗室的後續步驟,進一步分析這個 view。
-
點選「+ Code」建立新的程式碼儲存格,並加入下列程式碼:
# 從名為 cleaned_data_view 的 view 提取前 50 筆記錄
%%bigquery
SELECT * FROM `gemini_demo.cleaned_data_view`
ORDER BY review_datetime
-
執行這個儲存格。
請注意,現在 sentiment 欄的正負面評論值已清理乾淨。您可以在後續步驟使用這個 view 建構報表。
建立正負面評論數量的報表
您可以使用 Python 和 Matplotlib 程式庫,建立顯示正負面評論數量的長條圖報表。
-
建立新的程式碼儲存格,使用 BigQuery 用戶端查詢 cleaned_data_view 中的正負面評論,然後依情緒將評論歸類,將結果儲存在 DataFrame。
# 工作 6.5 - 建立 BigQuery 用戶端,從經過清理的資料 view 中查詢正負面評論,將結果儲存在 DataFrame,然後顯示前 10 筆記錄
client = bigquery.Client()
query = "SELECT sentiment, COUNT(*) AS count FROM `gemini_demo.cleaned_data_view` WHERE sentiment like 'negative%' OR sentiment like 'positive%' GROUP BY sentiment;"
query_job = client.query(query)
results = query_job.result().to_dataframe()
results.head(10)
-
執行這個儲存格。
系統會隨即產生一個資料表,顯示正負面評論的總數量。
-
建立新的儲存格來定義報表變數。
# 定義報表變數。
sentiment = results["sentiment"].tolist()
count = results["count"].tolist()
-
執行這個儲存格。畫面上不會顯示任何輸出結果。
-
建立新的儲存格來生成報表。
# 工作 6.7 - 生成報表。
plt.bar(sentiment, count, color='skyblue')
plt.xlabel("Sentiment")
plt.ylabel("Total Count")
plt.title("Bar Chart from BigQuery Data")
plt.show()
-
執行這個儲存格。
結果會是一張呈現正負面評論數量的長條圖。
-
或者,您也可以使用下方的程式碼,生成一份簡單的報表,以顏色區分正負面評論的數量:
# 生成 HTML 資料表來顯示正負面評論的數量,並以顏色區分結果。
html_counts = f"""
| Negative |
Positive |
| {count[0]} |
{count[1]} |
"""
# 顯示 HTML 資料表
display(HTML(html_counts))
點選「Check my progress」,確認目標已達成。提示 Gemini 分析顧客評論的關鍵字和情緒
工作 7:回應顧客評論
Data beans 咖啡廳希望使用圖片和音訊錄音,多方嘗試分析顧客評論。在筆記本的這一部分,您將使用 Cloud Storage、BigQuery、Gemini Flash 和 Python,對 Data beans 收到的顧客評論圖片和音訊檔案執行情緒分析。您需要根據分析結果來生成客服回覆,這些回覆會傳送給顧客,感謝對方留下評論。另外,模型也會生成建議措施,讓咖啡廳參考評論來採取行動。
您將大規模執行這項操作,並在稍後搭配使用一張圖片和音訊檔案,瞭解如何為客服代表建立概念驗證應用程式。這麼做可在顧客意見回饋程序實現「人機迴圈」策略,方便客服代表同時對顧客和個別咖啡廳採取行動。
透過 JSON 回應大規模處理音訊檔案
-
建立新的儲存格,對音訊檔案執行情緒分析並回覆顧客。
# 對音訊檔案執行情緒分析並回覆顧客。
vertexai.init(project="{{{project_0.project_id | Project ID | disablehighlight }}}", location="{{{project_0.default_region | Region | disablehighlight}}}")
model = GenerativeModel(model_name="{{{project_0.startup_script.gemini_flash_model_id |model_id | disablehighlight}}}")
prompt = """
請提供音訊的轉錄稿。
然後,提供音訊摘要。接下來,找出轉錄稿中的關鍵字。務必簡明扼要。請勿編造音訊檔案中沒有的資訊,內容也不要太過冗長。完成後,判斷音訊檔案中的情緒是 positive、neutral 或 negative。另外,你是一名客服代表。你會如何回應這則顧客評論?請根據顧客評論內容,提出該地點可採取的改進措施。回應和建議措施必須簡明扼要,請勿在回應中加入任何不相關的字元。以 JSON 格式回答,包含五個鍵:transcript、summary、keywords、sentiment、response 和 actions。transcript 應為字串,summary 應為字串,keywords 應為清單,sentiment 應為字串,customer response 應為字串,actions 應為字串。"""
bucket_name = "{{{project_0.project_id | PROJECT ID | disablehighlight}}}-bucket"
folder_name = 'gsp1249/audio' # 結尾要加上 '/'
def list_mp3_files(bucket_name, folder_name):
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
print('Accessing ', bucket, ' with ', storage_client)
blobs = bucket.list_blobs(prefix=folder_name)
mp3_files = []
for blob in blobs:
if blob.name.endswith('.mp3'):
mp3_files.append(blob.name)
return mp3_files
file_names = list_mp3_files(bucket_name, folder_name)
if file_names:
print("MP3 files found:")
print(file_names)
for file_name in file_names:
audio_file_uri = f"gs://{bucket_name}/{file_name}"
print('Processing file at ', audio_file_uri)
audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")
contents = [audio_file, prompt]
response = model.generate_content(contents)
print(response.text)
else:
print("No MP3 files found in the specified folder.")
這個儲存格有幾項重點需要留意:
- 第一行程式碼會使用專案 ID 和區域初始化 Vertex AI,因此您需要填入這些值。
- 下一行程式碼會以 Gemini Flash 模型為基礎,在 BigQuery 建立已命名的模型。
- 您需要定義供 Gemini Flash 模型使用的提示詞。這個提示詞要能有效地將音訊檔案轉換為文字、分析文字中的情緒,並在分析完成後,為每個檔案建立顧客回應。
- 您需要將 bucket 設為 bucket_name 字串變數。注意:gsp1249/audio 子資料夾也會使用 folder_name,請勿變更。
- 名為 list_mp3_files 的函式會隨即建立,找出 bucket 中的所有 mp3 檔案,然後由 Gemini Flash 模型透過 if 陳述式處理所有檔案。
-
執行這個儲存格。
系統會分析全部 5 個音訊檔案,以 JSON 回應的形式輸出分析結果。JSON 回應可據此接受剖析,並轉送至適當應用程式,為顧客提供回應,或向地點建議改進措施。
建構客服代表專用的應用程式
在實驗室的這一部分,您將瞭解如何根據負面評論分析,建構客戶服務應用程式。您需要執行下列動作:
- 使用與上一個儲存格相同的提示詞,分析單一則負面評論。
- 生成負面評論音訊檔案的轉錄稿,從模型輸出內容建立格式正確的 JSON 物件,然後將 JSON 物件的特定部分儲存為 Python 變數,就能在應用程式中與 HTML 搭配使用。
- 生成 HTML 資料表,載入顧客在評論中上傳的圖片,並在播放器載入音訊檔案。
- 顯示 HTML 資料表,包含圖片和音訊檔案播放器。
-
建立新儲存格並輸入下列程式碼,即可生成負面評論音訊檔案的轉錄稿,並建立 JSON 物件和相關變數。
# 生成負面評論音訊檔案的轉錄稿,然後建立 JSON 物件和相關變數
audio_file_uri = f"gs://{bucket_name}/{folder_name}/data-beans_review_7061.mp3"
print(audio_file_uri)
audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")
contents = [audio_file, prompt]
response = model.generate_content(contents)
print('Generating Transcript...')
#print(response.text)
results = response.text
# print("your results are", results, type(results))
print('Transcript created...')
print('Transcript ready for analysis...')
json_data = results.replace('```json', '')
json_data = json_data.replace('```', '')
jason_data = '"""' + results + '"""'
# print(json_data, type(json_data))
data = json.loads(json_data)
# print(data)
transcript = data["transcript"]
summary = data["summary"]
sentiment = data["sentiment"]
keywords = data["keywords"]
response = data["response"]
actions = data["actions"]
這個儲存格有幾項重點需要留意:
- 儲存格的程式碼會從 Cloud Storage 選取特定音訊檔案 (data-beans_review_7061.mp3)。
- 檔案會傳送至上一個儲存格中標籤為工作 7.1 的提示詞,由 Gemini Flash 模型處理。
- 模型回應會擷取為 JSON 格式。
- 系統會剖析 JSON 資料,並儲存轉錄稿、摘要、情緒、關鍵字、顧客回應和建議措施的 Python 變數。
-
執行儲存格。
輸出內容非常少,只有處理完成的音訊檔案 URI 和處理中的訊息。
-
依所選的值建立 HTML 資料表,將含有負面評論的音訊檔案載入播放器。
# 根據所選的值建立 HTML 資料表 (包含圖像)。
html_string = f"""
| customer_id: 7061 - @coffee_lover789 |
|
| {transcript} |
{sentiment} feedback |
| |
| {keywords[0]} |
| {keywords[1]} |
| {keywords[2]} |
| {keywords[3]} |
|
|
顧客評論摘要:{summary} |
|
建議措施:{actions} |
|
建議回覆:{response} |
"""
print('The table has been created.')
這個儲存格有幾項重點需要留意:
- 儲存格的程式碼會建立 HTML 資料表字串。
- 請將轉錄稿、情緒、關鍵字、圖片、摘要、建議措施和回應的值插入資料表儲存格。
- 程式碼也會為資料表元素套用樣式。
- 執行儲存格後,輸出內容會指出資料表的建立時間。
-
找到含有 {summary} 輸出內容的 <td style="padding:10px;"> 標記,在標記前面新增一行程式碼。
-
貼上下列內容:<td rowspan="3" style="padding: 10px;"><img src="<authenticated url here>" alt="Customer Image" style="max-width: 300px;"></td>。
-
找出 image_7061.png 檔案的驗證網址:前往 Cloud Storage,選取其中唯一的 bucket、圖片資料夾,然後點選該圖片。
-
在結果頁面,複製圖片的驗證網址。
-
回到 BigQuery 的 Python 筆記本。在剛剛貼上的程式碼中,將 <authenticated url here> 改成實際的驗證網址。
-
執行儲存格。
同樣地,輸出內容不多,只有一些處理訊息,表示各步驟已確實完成。
-
使用下列程式碼建立新的儲存格,下載音訊檔案並載入播放器:
# 從 Google Cloud Storage 下載音訊檔案並載入播放器
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(f"{folder_name}/data-beans_review_7061.mp3")
audio_bytes = io.BytesIO(blob.download_as_bytes())
# 假設取樣率為 44100 Hz (MP3 檔案的常見值)
sample_rate = 44100
print('The audio file is loaded in the player.')
這個儲存格有幾項重點需要留意:
- 儲存格的程式碼會存取 Cloud Storage bucket,擷取特定音訊檔案 (data-beans_review_7061.mp3)。
- 程式碼會將檔案下載為位元組串流,判斷檔案的取樣率,方便直接在筆記本的播放器中播放。
- 執行儲存格後,輸出內容會顯示訊息,指出音訊檔案已載入播放器,隨時可以播放。
-
執行儲存格。
-
建立新的儲存格並輸入下列程式碼:
# 工作 7.5 - 建立模擬畫面來做為儲存格的輸出內容。
print('Analysis complete. Review the results below.')
display(HTML(html_string))
display(Audio(audio_bytes.read(), rate=sample_rate, autoplay=True))
- 執行儲存格。
在這裡,您將見識到神奇之處。系統會根據指定的顯示方法,呈現 HTML 資料表和載入至播放器的音訊檔案。請查看儲存格輸出內容,畫面應與下圖相同:

點選「Check my progress」,確認目標已達成。回應顧客評論
恭喜!
您已成功在 BigQuery 建立雲端資源連線、資料集、資料表和模型,並撰寫提示詞來指示 Gemini 分析顧客評論的情緒與關鍵字。最後,您使用 Gemini 分析顧客評論音訊檔案,據此生成摘要和關鍵字,並透過客服應用程式回覆顧客評論。
後續步驟/瞭解詳情
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2025 年 11 月 5 日
實驗室上次測試日期:2025 年 11 月 5 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。