แก้ปัญหาด้วย Gemini CodeLab

1. บทนำ

ในแล็บนี้ คุณจะได้ใช้ Gemini ซึ่งเป็นผู้ช่วยที่ทำงานด้วยระบบ AI ใน Google Cloud เพื่อแก้ปัญหาการทำให้ Cloud Function ใช้งานได้โดยการวิเคราะห์บันทึกข้อผิดพลาด ระบุสาเหตุที่แท้จริงของปัญหา และค้นหาวิธีแก้ไข

สิ่งที่คุณต้องทำ

  • คุณจะใช้เทอร์มินัล Cloud Shell และ gcloud CLI เพื่อตั้งค่าสภาพแวดล้อม รวมถึงเปิดใช้ Google API ที่เกี่ยวข้องและสร้าง Cloud Function จากโค้ดที่ให้ไว้
  • คุณจะใช้การสรุปบันทึกของ Cloud Logging เพื่อสร้างสรุปบันทึกเพื่อทำความเข้าใจข้อมูลที่บันทึกไว้
  • คุณจะแชทกับ Gemini เพื่อรับความช่วยเหลือจาก Gemini ในการแก้ปัญหาและแก้ไขปัญหา

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ Gemini กับ Google Cloud Observability และเพื่อการแก้ปัญหา
  • วิธีค้นหาและทำความเข้าใจบันทึกของ Cloud Functions ด้วยความช่วยเหลือจาก Gemini

สิ่งที่คุณต้องมี...

  • เว็บเบราว์เซอร์ Chrome
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
  • บัญชี Google ที่มีสิทธิ์เข้าถึงโปรเจ็กต์ซึ่งช่วยให้คุณเปิดใช้ API และจัดการทรัพยากรได้

แล็บนี้มีไว้สำหรับวิศวกร DevOps และแพลตฟอร์ม รวมถึงนักพัฒนาซอฟต์แวร์ทุกระดับ รวมถึงผู้เริ่มต้น เราจะมุ่งเน้นที่การได้รับประสบการณ์การใช้งานจริงเกี่ยวกับความสามารถของ Gemini ในการแก้ปัญหา

2. ตั้งค่า

ส่วนนี้จะครอบคลุมทุกอย่างที่คุณต้องทำเพื่อเริ่มต้นใช้งานแล็บนี้

กำหนดค่าสภาพแวดล้อม

1. เข้าสู่ระบบ Cloud Console โดยเปิด https://console.cloud.google.com

2. เลือกโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google ที่คุณวางแผนจะใช้ใน Lab นี้

22170459a4f3ba59.png

3. เปิดหน้า Cloud Functions ใน Console โดยคุณสามารถทำได้โดยเลือก Cloud Functions จากเมนูการนำทาง (ไอคอน ☰ ด้านซ้ายบนในหน้าต่างคอนโซล)

9d27c844c16ad3e4.png

หรือคุณจะค้นหา "Cloud Functions" ในพื้นที่ค้นหาของคอนโซลก็ได้

35f23e52875b26cd.png

คลิกปุ่มสร้างฟังก์ชันที่ด้านบนของรายการฟังก์ชัน 34b5e7e36f4e48e9.png

หากคุณไม่เคยใช้ Cloud Functions ในโปรเจ็กต์นี้มาก่อน ระบบจะขอให้คุณเปิดใช้ Google APIs เพื่อให้ทำงานได้

5b7978521d6f56f7.png

คลิกเปิดใช้เพื่อดำเนินการต่อ

4. กำหนดพร็อพเพอร์ตี้พื้นฐานของ Cloud Function ใหม่

  • ตั้งชื่อเป็น "codelab-cf"
  • เลือกตัวเลือกอนุญาตคำขอที่ไม่ผ่านการตรวจสอบสิทธิ์

6a2aaf9bedd161d9.png

หากต้องการทําขั้นตอนให้เสร็จสมบูรณ์ ให้คลิกปุ่มถัดไปที่ด้านล่างซ้ายของหน้าต่าง

f4e76470dbdf6854.png

หลังจากคลิกถัดไป คุณอาจได้รับแจ้งให้เปิดใช้ Google API เพิ่มเติม คลิกเปิดใช้เหมือนในขั้นตอนที่ 4

1ad7bf15c07eda49.png

ตั้งค่ารันไทม์และโค้ดของ Cloud Function

CodeLab นี้ใช้ Python เป็นภาษาโปรแกรม ไม่ต้องกังวลหากคุณไม่คุ้นเคยกับ Python คุณไม่จำเป็นต้องมีความรู้เกี่ยวกับ Python เพื่อทำ CodeLab นี้ให้เสร็จสมบูรณ์

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)

โค้ดนี้จะอ่านแอตทริบิวต์ path จากคำขอ GET แยกวิเคราะห์เส้นทางเพื่อเลือกชื่อ Bucket และเรียกใช้ Google Cloud Storage API เพื่อรับรายการออบเจ็กต์ที่จัดเก็บไว้ในเส้นทางนี้ ฟังก์ชัน (get_object_list) รับคำขอซึ่งเป็นออบเจ็กต์ Flask เป็นอาร์กิวเมนต์อินพุต และแสดงชื่อของออบเจ็กต์เป็นอาร์เรย์ JSON

7. เลือกไฟล์ requirements.txt จากรายการไฟล์ที่เหลืออยู่ในเครื่องมือแก้ไขในบรรทัด แทนที่รายการทรัพยากร Dependency ปัจจุบันด้วยรายการใหม่โดยคัดลอกโค้ดด้านล่างลงในเครื่องมือแก้ไขแบบอินไลน์

google-cloud-storage

8. หากต้องการทำให้ Cloud Function ใช้งานได้ ให้คลิก DEPLOY ที่ด้านซ้ายล่าง

17c4828702a32cd9.png

คุณอาจต้องรอ 2-3 นาทีจนกว่ากระบวนการติดตั้งใช้งานจะเสร็จสมบูรณ์ หากคุณทำตามวิธีการตั้งค่าอย่างละเอียด คุณควรเห็นว่าการติดตั้งใช้งานรายงานว่าล้มเหลว

3. การค้นหาและแก้ไขปัญหา

ในส่วนนี้ คุณจะใช้ฟีเจอร์คำอธิบายบันทึกและระบบช่วยเหลืออื่นๆ ของ Gemini เพื่อระบุปัญหาและวิธีแก้ไข

1. การทำให้ใช้งานได้ล้มเหลว คุณควรเห็นข้อความแสดงข้อผิดพลาดที่แจ้งให้คุณทราบเกี่ยวกับปัญหานี้ พร้อมข้อมูลเพิ่มเติมและตัวเลือกในการดูบันทึกการติดตั้งใช้งาน คลิกดูบันทึกเพื่อดูบันทึกของการทำให้ใช้งานได้

bc62db6ef3b35420.png

โปรดทราบว่าระบบจะเปิดบันทึกการติดตั้งใช้งานในแท็บแยกต่างหากในเบราว์เซอร์เดียวกัน คุณจะต้องไปยังส่วนต่างๆ ของแท็บเพื่อทำ CodeLab นี้ให้เสร็จสมบูรณ์

โปรดทราบว่าคุณอาจไม่เห็นบรรทัดบันทึกเมื่อคลิกดูบันทึก หรือเห็นเพียง 2-3 บรรทัด ในกรณีดังกล่าว ให้ใช้ตัวเลือกช่วงเวลาในแผงคําค้นหาของ Log Explorer แล้วเลือก30 นาทีที่ผ่านมา

e24856920201ebf8.png

2. ตรวจสอบบันทึกในแท็บที่เปิดอยู่ โปรดทราบว่าสรุปบันทึกจะมีลักษณะเหมือนหลายบรรทัดของ Call Stack ของข้อยกเว้น เนื่องจาก Cloud Functions จะบันทึกข้อความที่พิมพ์ไปยัง stdout หรือ stderr และเขียนแต่ละบรรทัดเป็นรายการบันทึกแยกกัน บรรทัดบันทึกอื่นๆ จะสรุปข้อมูลเกี่ยวกับรหัสข้อผิดพลาดในการออก รวมถึงข้อมูลเพิ่มเติมที่รายงานโดย Cloud Functions และ Cloud Run API

b49e41594173b57c.png

คุณคลิกที่บรรทัดใดก็ได้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับบันทึกที่ต้องการ บันทึกที่ขยายจะมีองค์ประกอบ UI เพิ่มเติม ซึ่งการคลิกจะช่วยให้คุณคัดลอกข้อมูลทั้งหมดเกี่ยวกับบันทึก ขยายช่องทั้งหมดเพื่อแสดงข้อมูลทั้งหมดของรายการบันทึก และอธิบายรายการบันทึกโดยใช้ Gemini ได้

4. Callstack ของข้อยกเว้นไม่ได้ให้ข้อมูลมากนัก ดูบันทึกเพื่อค้นหาจุดสิ้นสุดของบันทึกสแต็กเทรซของข้อยกเว้น ซึ่งเป็นบรรทัดที่ระบุว่า "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 เพื่อขอข้อมูลเพิ่มเติมโดยใช้พรอมต์ต่อไปนี้หรือเขียนคำถามของคุณเอง

คุณให้ข้อมูลเพิ่มเติมเกี่ยวกับบันทึกนี้ได้ไหม
คุณให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดได้ไหม

6. จากนั้นแจ้ง Gemini เพื่อขอคำแนะนำในการแก้ปัญหา ตัวอย่างเช่น ขอความช่วยเหลือจาก Gemini

ฉันจะแก้ปัญหานี้ได้อย่างไร
แนะนำวิธีแก้ไขข้อผิดพลาดนี้
แนะนำวิธีแก้ไขข้อผิดพลาดนี้

คำตอบของ Gemini อาจแตกต่างกันไปตามบริบทปัจจุบัน รวมถึงคำและรูปแบบของพรอมต์ คาดว่า Gemini จะแนะนำเพื่อให้แน่ใจว่าซอร์สโค้ดของ Cloud Function มีฟังก์ชันที่มีชื่อ hello_http

7. ขณะนี้คุณกำลังดูแท็บที่แสดงบันทึกของ Cloud Functions เลือกแท็บก่อนหน้าซึ่งแสดงหน้าการติดตั้งใช้งาน Cloud Functions ที่มีข้อผิดพลาด แล้วคลิกแก้ไข

c3d9b207214a2240.png

8. ยืนยันว่าการตรวจสอบสิทธิ์ยังคงตั้งค่าเป็นอนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์ และอัปเดตการเลือกหากจำเป็น

6a2aaf9bedd161d9.png

9. คลิกถัดไปที่ด้านล่างเพื่อดูเครื่องมือแก้ไขในหน้า ทำตามคำแนะนำของ Gemini แล้วเปลี่ยนชื่อฟังก์ชันจาก get_order_list เป็น hello_http

หลังจากแก้ไขเสร็จแล้ว ให้คลิก "DEPLOY"

คุณอาจต้องรอ 2-3 นาทีจนกว่ากระบวนการติดตั้งใช้งานจะเสร็จสมบูรณ์ ยืนยันว่าการติดตั้งใช้งานเสร็จสมบูรณ์และไม่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้น

โปรดทราบว่า Console อาจยังแสดงข้อความแสดงข้อผิดพลาดล่าสุดจนกว่ากระบวนการติดตั้งใช้งานจะเสร็จสมบูรณ์

10. ตรวจสอบว่า Cloud Function ทำงานได้โดยส่งคำขอ HTTPS ต่อไปนี้โดยใช้ curl คุณใช้ Cloud Shell หรือดำเนินการจากเทอร์มินัลใดก็ได้ที่มีการติดตั้ง CLI ของ curl และ gcloud โดยเรียกใช้คำสั่งต่อไปนี้จากเทอร์มินัล Cloud Shell

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 และตั้งค่ารหัสโปรเจ็กต์เป็นตัวแปรสภาพแวดล้อม GOOGLE_CLOUD_PROJECT

โบนัส

ชื่อฟังก์ชัน hello_http ได้รับการกำหนดเป็นจุดแรกเข้าเริ่มต้นสำหรับ Cloud Function ที่ทริกเกอร์ HTTP เมื่อเลือกใช้รันไทม์ Python อีกทางเลือกหนึ่งคือการใช้ get_order_list เป็นชื่อฟังก์ชันในซอร์สโค้ดและอัปเดตช่องจุดแรกเข้าของ Cloud Function ที่อยู่เหนือตัวแก้ไขแบบอินไลน์ทางด้านขวาจากช่องรันไทม์

9a3cd8bf272b4d02.png

การเปลี่ยนจุดแรกเข้าจาก hello_http เป็น get_order_list จะช่วยแก้ปัญหาเกี่ยวกับการติดตั้งใช้งานได้

4. ล้างข้อมูล

หากต้องการล้างข้อมูล คุณจะปิดโปรเจ็กต์หรือลบอินสแตนซ์ Cloud Functions ก็ได้ คุณลบ Cloud Functions ได้โดยใช้คอนโซลหรือคำสั่ง CLI ดังนี้

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

5. ยินดีด้วย

ขอแสดงความยินดี คุณใช้ Gemini เพื่อแก้ปัญหาและแก้ไขปัญหาเกี่ยวกับแอปพลิเคชันได้สำเร็จแล้ว และตอนนี้คุณเข้าใจแล้วว่า Gemini ช่วยในการทำความเข้าใจบันทึกและรับคำตอบสำหรับคำถามเกี่ยวกับ Google Cloud ได้อย่างไร

เอกสารอ้างอิง...