عیب یابی با Gemini CodeLab

عیب یابی با Gemini CodeLab

درباره این codelab

subjectآخرین به‌روزرسانی: آوریل ۳۰, ۲۰۲۴
account_circleنویسنده: Leonid Yankulin

1. مقدمه

در این آزمایشگاه، از Gemini ، یک همکار مبتنی بر هوش مصنوعی در Google Cloud، برای عیب‌یابی مشکل در استقرار عملکرد Cloud با تجزیه و تحلیل گزارش‌های خطا، شناسایی علت اصلی مشکل و یافتن نحوه رفع آن استفاده خواهید کرد.

کاری که خواهی کرد...

  • از Cloud Shell Terminal و gcloud CLI برای راه‌اندازی محیط از جمله فعال کردن APIهای مرتبط Google و ایجاد یک Cloud Function از کد ارائه شده استفاده خواهید کرد.
  • شما از خلاصه سازی گزارش Cloud Logging برای ایجاد خلاصه گزارش به منظور درک اطلاعات گرفته شده استفاده خواهید کرد.
  • برای عیب یابی و حل مشکل با Gemini چت خواهید کرد.

آنچه یاد خواهید گرفت...

  • نحوه استفاده از Gemini با Google Cloud Observability و برای عیب یابی.
  • نحوه یافتن و درک گزارش‌های Cloud Function با کمک Gemini.

آنچه شما نیاز خواهید داشت ...

  • مرورگر وب کروم
  • یک پروژه Google Cloud با فعال کردن صورت‌حساب
  • یک حساب Google با مجوزهای دسترسی به پروژه که به شما امکان می دهد API ها را فعال کنید و منابع را دستکاری کنید

این آزمایشگاه برای مهندسین DevOps و پلتفرم و توسعه دهندگان نرم افزار در تمام سطوح، از جمله مبتدیان، هدف قرار گرفته است. تمرکز ما بر کسب تجربه عملی با قابلیت‌های Gemini در عیب‌یابی خواهد بود.

2. راه اندازی

این بخش تمام کارهایی را که برای شروع کار با این آزمایشگاه باید انجام دهید را پوشش می دهد.

پیکربندی محیط

1. با باز کردن https://console.cloud.google.com وارد کنسول Cloud شوید.

2. یک پروژه Google Cloud را که قصد دارید با آن برای این آزمایشگاه کار کنید، انتخاب کنید.

22170459a4f3ba59.png

3. صفحه Cloud Functions را در کنسول باز کنید. می توانید این کار را با انتخاب Cloud Functions از منوی پیمایش (نماد بالا سمت چپ ☰ در پنجره Console) انجام دهید.

9d27c844c16ad3e4.png

همچنین، می‌توانید «عملکردهای ابری» را در قسمت جستجوی کنسول جستجو کنید:

35f23e52875b26cd.png

روی دکمه Create Function در بالای لیست توابع کلیک کنید 34b5e7e36f4e48e9.png

اگر قبلاً از توابع Cloud در این پروژه استفاده نکرده‌اید، برای کار از شما خواسته می‌شود Google API را فعال کنید.

5b7978521d6f56f7.png

برای ادامه روی ENABLE کلیک کنید.

4. ویژگی های اساسی تابع جدید ابر را تعریف کنید.

  • نام را به صورت " codelab-cf " تنظیم کنید
  • گزینه Allow unauthenticated invocations را انتخاب کنید

6a2aaf9bedd161d9.png

برای تکمیل مرحله، روی دکمه NEXT در قسمت پایین سمت چپ پنجره کلیک کنید:

f4e76470dbdf6854.png

پس از کلیک بر روی NEXT ممکن است از شما خواسته شود که API(های) اضافی Google را فعال کنید. مانند مرحله 4، روی ENABLE کلیک کنید.

1ad7bf15c07eda49.png

زمان اجرا و کد عملکرد Cloud را تنظیم کنید

این CodeLab از پایتون به عنوان یک زبان برنامه نویسی استفاده می کند. اگر با پایتون آشنایی ندارید نگران نباشید. برای تکمیل این CodeLab نیازی به دانش پایتون نخواهید داشت.

5. Python 3.11 را به عنوان Runtime تابع انتخاب کنید

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 می خواند، مسیر را برای انتخاب نام سطل تجزیه می کند و Google Cloud Storage API را فراخوانی می کند تا لیستی از اشیاء ذخیره شده در این مسیر را دریافت کند. تابع ( get_object_list ) درخواستی را که یک شی Flask است به عنوان آرگومان ورودی می پذیرد و نام اشیاء را به صورت آرایه JSON برمی گرداند.

7. فایل requirements.txt را از لیست فایل های باقی مانده در Inline Editor انتخاب کنید. با کپی کردن کد زیر در ویرایشگر داخلی، لیست فعلی وابستگی ها را با لیست جدید جایگزین کنید.

google-cloud-storage

8. برای استقرار Cloud Function، روی DEPLOY در پایین سمت چپ کلیک کنید.

17c4828702a32cd9.png

ممکن است لازم باشد چند دقیقه صبر کنید تا فرآیند استقرار کامل شود. اگر دستورالعمل‌های راه‌اندازی را به دقت دنبال کرده باشید، باید انتظار داشته باشید که استقرار گزارش شده به‌عنوان ناموفق گزارش شده است.

3. پیدا کردن و حل مشکل

در این بخش از ویژگی Log descriptions و سایر کمک های Gemini برای شناسایی مشکل و راه حل آن استفاده خواهید کرد.

1. استقرار با شکست مواجه می شود. باید پیام خطایی را مشاهده کنید که به شما در این مورد با اطلاعات اضافی و گزینه ای برای مشاهده گزارش های استقرار اطلاع می دهد. برای مشاهده گزارش‌های استقرار، روی VIEW LOGS کلیک کنید.

bc62db6ef3b35420.png

توجه داشته باشید که گزارش‌های استقرار در یک برگه جداگانه در همان مرورگر باز می‌شوند. برای تکمیل این CodeLab باید بین برگه ها حرکت کنید.

توجه داشته باشید که ممکن است هنگام کلیک کردن روی VIEW LOGS خطوط گزارش را نبینید یا فقط چند خط را ببینید. در چنین رویدادی، از انتخابگر محدوده زمانی در پنجره جستجوی Log explorer استفاده کنید و آخرین 30 دقیقه را انتخاب کنید.

e24856920201ebf8.png

2. گزارش های موجود در تب باز شده را مرور کنید. توجه داشته باشید که خلاصه‌های گزارش‌ها مانند چندین خط از callstack استثنا هستند. به این دلیل است که Cloud Function متن چاپ شده در stdout یا stderr را می گیرد و هر خط را به عنوان یک ورودی گزارش جداگانه می نویسد. سایر خطوط گزارش اطلاعات مربوط به کد خطای خروج و همچنین اطلاعات اضافی گزارش شده توسط Cloud Functions و Cloud Run API ها را خلاصه می کند.

b49e41594173b57c.png

برای مشاهده اطلاعات بیشتر در مورد یک گزارش خاص می توانید روی هر یک از خطوط کلیک کنید. گزارش‌های توسعه‌یافته دارای عناصر رابط کاربری اضافی هستند که روی آنها کلیک می‌کنید که به شما امکان می‌دهد تمام اطلاعات مربوط به گزارش را کپی کنید، همه فیلدها را برای نمایش همه داده‌های ورودی گزارش و توضیح ورودی گزارش با استفاده از Gemini گسترش دهید.

4. callstack استثنایی خیلی آموزنده نیست. لاگ‌ها را نگاه کنید تا انتهای فهرست ردیابی پشته استثنا را بیابید. این خطی است که می گوید " Container called exit(1) ". خلاصه گزارش زیر می گوید:

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

به نظر می رسد کاندیدای خوبی برای تحقیق باشد. روی این خط کلیک کنید تا ورودی گزارش گسترش یابد. سپس روی دکمه " توضیح این ورود گزارش " کلیک کنید تا اطلاعات بیشتری در مورد گزارش انتخاب شده مشاهده کنید.

b815de46d1b4597c.png

اگر Gemini قبلاً در این پروژه استفاده نشده بود، از شما خواسته می‌شود یک API مورد نیاز را فعال کنید. اگر از شما خواسته شد که API را فعال کنید، روی ENABLE کلیک کنید تا به جلو بروید.

7ca90e087a2e99d1.png

توجه داشته باشید که گاهی اوقات ممکن است هنگام درخواست Gemini با خطا مواجه شوید. در چنین رویدادی، عملیات سریع خود را یک بار دیگر تکرار کنید تا پاسخ را دریافت کنید. برای مثال، دوباره روی دکمه " توضیح این ورودی گزارش " کلیک کنید.

5. توضیحات ارائه شده توسط Gemini. اگر توضیح داده شده کافی یا نامشخص نیست، از Gemini بخواهید با استفاده از یکی از اعلان های زیر اطلاعات بیشتری ارائه دهد یا سؤال خود را بنویسید.

آیا می توانید اطلاعات بیشتری در مورد این لاگ ارائه دهید؟
آیا می توانید اطلاعات بیشتری در مورد خطا ارائه دهید؟

6. سپس از Gemini برای حل مشکل پیشنهاداتی بخواهید. به عنوان مثال از Gemini بپرسید

چگونه این مشکل را حل کنیم؟
راه حلی برای رفع این خطا پیشنهاد کنید
پیشنهاد دهید چگونه می توانم این خطا را برطرف کنم

پاسخ Gemini ممکن است بسته به زمینه فعلی و همچنین عبارت و قالب درخواست شما متفاوت باشد. انتظار می رود که Gemini توصیه کند که اطمینان حاصل شود که کد منبع Cloud Function دارای تابعی با نام hello_http است.

7. در حال حاضر برگه‌ای را مشاهده می‌کنید که گزارش‌های Cloud Functions را به شما نشان می‌دهد. تب قبلی را که صفحه استقرار عملکرد Cloud را با خطا نشان می دهد انتخاب کنید و روی EDIT کلیک کنید.

c3d9b207214a2240.png

8. تأیید کنید که احراز هویت همچنان روی Allow unauthenticated invocations تنظیم شده است و در صورت لزوم انتخاب را به روز کنید.

6a2aaf9bedd161d9.png

9. برای مشاهده Inline Editor روی NEXT در پایین کلیک کنید. توصیه Gemini را دنبال کنید و نام تابع را از get_order_list به hello_http تغییر دهید.

پس از اتمام ویرایش روی DEPLOY کلیک کنید.

ممکن است لازم باشد چند دقیقه صبر کنید تا فرآیند استقرار کامل شود. تأیید کنید که استقرار با موفقیت انجام شده و هیچ پیام خطایی ظاهر نمی شود.

توجه داشته باشید که کنسول ممکن است تا زمانی که فرآیند استقرار کامل شود، آخرین پیام خطا را به شما نشان می دهد.

10. با ارسال درخواست HTTPS زیر با استفاده از curl ، عملکرد Cloud Function را بررسی کنید. می توانید از Cloud Shell استفاده کنید یا این کار را از هر ترمینالی که curl و gcloud CLI نصب کرده است انجام دهید. دستور زیر را از ترمینال 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 احراز هویت کنید و مقدار ID پروژه خود را روی متغیر محیطی GOOGLE_CLOUD_PROJECT تنظیم کنید.

پاداش

هنگام انتخاب زمان اجرا پایتون، نام تابع hello_http به عنوان یک نقطه ورودی پیش‌فرض برای عملکرد ابری راه‌اندازی شده با HTTP تعریف شد. راه حل جایگزین می تواند نگه داشتن get_order_list به عنوان نام تابع در کد منبع و به روز رسانی فیلد نقطه ورودی تابع Cloud که در بالای ویرایشگر Inline در سمت راست از قسمت Runtime قرار دارد باشد:

9a3cd8bf272b4d02.png

با تغییر نقطه ورود از hello_http به get_order_list مشکل استقرار حل خواهد شد.

4. پاکسازی

برای پاکسازی، می‌توانید پروژه را خاموش کنید یا نمونه Cloud Function را حذف کنید. می توانید با استفاده از کنسول یا با دستور CLI مانند زیر، توابع Cloud را حذف کنید:

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

5. تبریک می گویم!

تبریک می‌گوییم - شما با موفقیت از Gemini برای عیب‌یابی و رفع مشکل برنامه‌تان استفاده کرده‌اید و اکنون متوجه شده‌اید که چگونه می‌تواند به درک گزارش‌ها و دریافت پاسخ به سؤالات مربوط به Google Cloud کمک کند.

اسناد مرجع ...