使用 Gemini CodeLab 排解問題

1. 簡介

在本實驗室中,您將使用 Google Cloud 的 AI 輔助協作工具 Gemini,分析錯誤記錄檔、找出問題的根本原因,並瞭解如何修正問題,藉此排解 Cloud Functions 部署作業的問題。

做法如下:

  • 您將使用 Cloud Shell 終端機和 gcloud CLI 設定環境,包括啟用相關 Google API,以及從提供的程式碼建立 Cloud 函式
  • 您可以使用 Cloud Logging 記錄摘要功能產生記錄摘要,瞭解擷取的資訊。
  • 與 Gemini 對話,取得 Gemini 輔助功能,排解及解決問題。

課程內容...

  • 如何搭配使用 Gemini 與 Google Cloud Observability,以及如何排解問題。
  • 如何在 Gemini 的協助下,尋找及解讀 Cloud Functions 記錄。

事前準備

  • Chrome 網路瀏覽器
  • 已啟用計費功能的 Google Cloud 專案
  • 具備專案存取權的 Google 帳戶,可啟用 API 及操控資源

本實驗室適合各種程度的 DevOps 和平台工程師,以及軟體開發人員 (包括初學者) 參加。我們將著重於實際操作 Gemini 的功能,以排解疑難。

2. 設定

本節說明如何開始進行這個實驗室。

設定環境

1. 開啟 https://console.cloud.google.com,登入 Cloud Console。

2. 選取您打算在本實驗室中使用的 Google Cloud 專案。

22170459a4f3ba59.png

3. 在控制台中開啟 Cloud Functions 頁面。方法是從導覽選單 (Console 視窗左上角的 ☰ 圖示) 選取 Cloud Functions。

9d27c844c16ad3e4.png

或者,您也可以在控制台的搜尋區域中搜尋「cloud functions」:

35f23e52875b26cd.png

按一下函式清單頂端的「建立函式」按鈕 34b5e7e36f4e48e9.png

如果您先前未在此專案中使用 Cloud Functions,系統會要求您啟用 Google API,才能繼續作業。

5b7978521d6f56f7.png

按一下「啟用」繼續。

4. 定義新 Cloud Function 的基本屬性。

  • 將名稱設為「codelab-cf
  • 選取「允許未經驗證的叫用」選項

6a2aaf9bedd161d9.png

如要完成這個步驟,請按一下視窗左下區域的「下一步」按鈕:

f4e76470dbdf6854.png

點選「下一步」後,系統可能會提示您啟用其他 Google API。如步驟 4 所示,按一下「啟用」。

1ad7bf15c07eda49.png

設定 Cloud 函式的執行階段和程式碼

本程式碼研究室使用 Python 做為程式設計語言。如果您不熟悉 Python,也不必擔心。完成本程式碼研究室不需要具備 Python 知識。

5. 選取 Python 3.11 做為函式的執行階段

9a3cd8bf272b4d02.png

請注意,變更執行階段會改變內嵌編輯器中顯示的原始碼。

6. 將下方程式碼複製到內嵌編輯器,修改自動生成的快速入門範例。

from google.cloud import storage
import json
import re

client = storage.Client()

def get_object_list(request):
    if request.args and 'path' in request.args:
        path = request.args['path']
    else:
        return '{}'
    parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
    bucket, prefix = parsed.group(1), parsed.group(2)
    blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
    objects = []
    if (blobs):
        for blob in blobs:
            objects.append(blob.name)
    return json.dumps(objects)

這段程式碼會從 GET 要求讀取 path 屬性、剖析路徑以擷取值區名稱,並呼叫 Google Cloud Storage API,取得儲存在這個路徑的物件清單。此函式 (get_object_list) 會接受 Flask 物件做為輸入引數,並以 JSON 陣列形式傳回物件名稱。

7. 從內嵌編輯器左側的檔案清單中選取 requirements.txt 檔案。將下列程式碼複製到內嵌編輯器,即可用新清單取代目前的依附元件清單。

google-cloud-storage

8. 如要部署 Cloud 函式,請按一下左下方的「DEPLOY」。

17c4828702a32cd9.png

部署程序可能需要幾分鐘才能完成。如果您確實按照設定操作說明執行操作,應該會看到部署作業回報為失敗。

3. 找出並解決問題

在本節中,您將使用記錄說明功能和其他 Gemini 輔助功能,找出問題和解決方法。

1. 部署失敗。您應該會看到錯誤訊息,其中包含額外資訊和查看部署記錄的選項。按一下「查看記錄」,即可查看部署作業的記錄。

bc62db6ef3b35420.png

請注意,部署記錄會在同一個瀏覽器的另一個分頁中開啟。您需要切換分頁,才能完成本程式碼研究室。

請注意,點選「查看記錄」時,您可能不會看到記錄行,或只看到幾行。在這種情況下,請使用記錄檢視器查詢窗格中的時間範圍選取器,然後選取「過去 30 分鐘」

e24856920201ebf8.png

2. 查看開啟分頁中的記錄。請注意,記錄摘要看起來像是例外狀況呼叫堆疊的多行內容。這是因為 Cloud Functions 會擷取列印至 stdoutstderr 的文字,並將每行文字寫入為個別記錄項目。其他記錄行則會彙整結束錯誤代碼的相關資訊,以及 Cloud Functions 和 Cloud Run API 回報的其他資訊。

b49e41594173b57c.png

點選任一行即可查看特定記錄的詳細資訊。展開的記錄含有額外的 UI 元素,點選這些元素即可複製記錄的所有資訊、展開所有欄位以顯示記錄項目的所有資料,以及使用 Gemini 說明記錄項目。

4. 例外狀況呼叫堆疊提供的資訊不多。查看記錄,找出例外狀況堆疊追蹤記錄的結尾。也就是「Container called exit(1)」這一行。以下是記錄摘要:

functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...

這似乎是值得調查的候選項目。按一下這行即可展開記錄項目。然後按一下「說明這個記錄項目」按鈕,即可查看所選記錄的額外資訊。

b815de46d1b4597c.png

如果這項專案先前未使用 Gemini,系統會提示您啟用必要的 API。如果系統提示您啟用 API,請按一下「啟用」繼續操作。

7ca90e087a2e99d1.png

請注意,有時提示 Gemini 時可能會發生錯誤。發生這類事件時,請再次重複提示詞作業,即可取得回覆。舉例來說,再次點選「說明這個記錄項目」按鈕。

5. 查看 Gemini 提供的說明。如果 Gemini 提供的說明不夠詳盡或不清楚,請使用下列任一提示或自行撰寫問題,要求 Gemini 提供更多資訊

可以提供更多有關這項記錄的資訊嗎?
可以提供更多有關這項錯誤的資訊嗎?

6. 接著,請 Gemini 提供解決問題的建議。例如,你可以要求 Gemini

如何解決這個問題?
建議解決這項錯誤的方法
建議修正這項錯誤的方法

Gemini 回覆內容可能會因當下情境,以及提示詞的措辭和格式而異。Gemini 應會建議您確保 Cloud 函式的原始碼含有名為 hello_http 的函式。

7. 您目前看到的頁面分頁會顯示 Cloud Functions 記錄。選取顯示 Cloud 函式部署頁面的前一個分頁,然後按一下「EDIT」(編輯)。

c3d9b207214a2240.png

8. 確認驗證仍設為「允許未經驗證的叫用」,並視需要更新選取項目。

6a2aaf9bedd161d9.png

9. 按一下底部的「下一步」,即可查看內嵌編輯器。按照 Gemini 的建議,將函式名稱從 get_order_list 變更為 hello_http

完成編輯後,按一下「DEPLOY」(部署)。

部署程序可能需要幾分鐘才能完成。確認部署作業順利完成,且未顯示任何錯誤訊息。

請注意,部署程序完成前,控制台可能會繼續顯示最後一則錯誤訊息。

10. 使用 curl 傳送下列 HTTPS 要求,確認 Cloud 函式是否正常運作。您可以使用 Cloud Shell,或從安裝 curlgcloud CLI 的任何終端機執行下列指令。

curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"

請注意,如要從終端機執行這項指令,您必須使用 gcloud CLI 進行驗證,並將專案 ID 的值設為環境變數 GOOGLE_CLOUD_PROJECT

獎勵

選取 Python 執行階段時,函式 hello_http 的名稱會定義為 HTTP 觸發 Cloud 函式的預設進入點。替代解決方案是保留原始碼中的函式名稱 get_order_list,並更新內嵌編輯器上方 Cloud Functions 的進入點欄位 (位於「執行階段」欄位右側):

9a3cd8bf272b4d02.png

將進入點從 hello_http 變更為 get_order_list,即可解決部署問題。

4. 清除

如要清除資源,可以關閉專案或刪除 Cloud Functions 執行個體。您可以使用控制台CLI 指令 (如下所示) 刪除 Cloud Functions:

gcloud functions delete codelab-cf --region=us-central1

5. 恭喜!

恭喜!您已成功使用 Gemini 排除及解決應用程式問題,並瞭解 Gemini 如何協助解讀記錄檔,以及取得 Google Cloud 相關問題的解答。

參考文件...