استفاده از Gemini Code Assist برای کاوش و بهبود راه حل شروع پرش خلاصه سازی هوش مصنوعی

۱. مقدمه

در این آزمایشگاه کد، به یک راهکار Jump Start موجود، یعنی خلاصه‌سازی هوش مصنوعی، نگاهی خواهیم انداخت که از مدل‌های هوش مصنوعی Vertex برای خلاصه‌سازی اسناد PDF آپلود شده در فضای ذخیره‌سازی ابری گوگل استفاده می‌کند.

سپس از Gemini Code Assist برای موارد زیر استفاده خواهیم کرد:

  • کد پایتونی که عملکرد Cloud را فعال می‌کند، درک کنید. این عملکرد، کار استخراج متن از سند PDF، خلاصه‌سازی آن و نوشتن نتایج در BigQuery را انجام می‌دهد.
  • ما در طول فرآیند از کمک Gemini Code Assist برای نوشتن قابلیت‌های جدید استفاده خواهیم کرد. ما یک برنامه وب (برنامه پایتون فلاسک) توسعه خواهیم داد و برنامه را به صورت محلی اجرا خواهیم کرد تا کد ما تأیید شود.
  • به صورت اختیاری، می‌توانیم به بررسی استقرار این برنامه در Cloud Run و بهبود طراحی (زیبایی‌شناسی) برنامه وب با استفاده از Material Design نیز بپردازیم.

کاری که انجام خواهی داد...

  • شما راهکار شروع سریع خلاصه‌سازی هوش مصنوعی را مستقر کرده و جریان فرآیند را برای درک نحوه عملکرد آن آغاز خواهید کرد.
  • سپس از Cloud Shell IDE برای دانلود کد موجود برای Jump Start Solution استفاده خواهید کرد و از Gemini Code Assist برای درک کد استفاده خواهید کرد.
  • شما از Gemini Code Assist Cloud Shell IDE برای تولید کد برای یک قابلیت جدید استفاده خواهید کرد.

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

  • نحوه عملکرد راهکار خلاصه‌سازی هوش مصنوعی (AI Summarization Jump Start Solution)
  • نحوه استفاده از Gemini Code Assist برای چندین کار توسعه‌دهنده مانند تولید کد، تکمیل کد و خلاصه‌سازی کد.

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

  • مرورگر وب کروم
  • یک حساب جیمیل
  • یک پروژه ابری با قابلیت پرداخت صورتحساب
  • Gemini Code Assist برای پروژه ابری شما فعال شده است

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

۲. راه‌اندازی

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

فعال کردن Gemini برای فضای ابری در پروژه فضای ابری گوگل

اکنون Gemini را برای Cloud در پروژه Google Cloud خود فعال خواهیم کرد. مراحل زیر را دنبال کنید:

  1. به آدرس https://console.cloud.google.com مراجعه کنید و مطمئن شوید که پروژه ابری گوگل (Google Cloud Project) مورد نظر خود را برای این آزمایشگاه انتخاب کرده‌اید. روی آیکون Open Gemini که در بالا سمت راست می‌بینید کلیک کنید.

28f084ec1e159938.png

  1. پنجره چت Gemini for Cloud در سمت راست کنسول باز می‌شود. مطابق شکل زیر، روی دکمه فعال‌سازی کلیک کنید. اگر دکمه فعال‌سازی را نمی‌بینید و به جای آن رابط چت را می‌بینید، احتمالاً قبلاً Gemini for Cloud را برای پروژه فعال کرده‌اید و می‌توانید مستقیماً به مرحله بعدی بروید.

e8df9adc4ea43a37.png

  1. پس از فعال شدن، می‌توانید با پرسیدن یک یا دو سوال، Gemini for Cloud را امتحان کنید. چند سوال نمونه نشان داده می‌شود، اما می‌توانید چیزی شبیه به این را امتحان کنید What is Cloud Run?

۹۸۵۹ea۸۶a۸۳۱۰cb.png

جمینی برای فضای ابری به سوال شما پاسخ خواهد داد. می‌توانید روی آن کلیک کنید f68286b2b2ea5c0a.png برای بستن پنجره چت Gemini for Cloud، روی نماد در گوشه بالا سمت راست کلیک کنید.

فعال کردن دستیار کد Gemini در Cloud Shell IDE

ما برای ادامه‌ی آزمایشگاه کد از Cloud Shell IDE، یک محیط توسعه‌ی کاملاً مدیریت‌شده مبتنی بر Code OSS ، استفاده خواهیم کرد. باید Code Assist را در Cloud Shell IDE فعال و پیکربندی کنیم و مراحل آن در زیر آمده است:

  1. به ide.cloud.google.com مراجعه کنید. ممکن است نمایش IDE کمی طول بکشد، بنابراین لطفاً صبور باشید.
  2. همانطور که نشان داده شده است، روی دکمه Cloud Code - Sign in در نوار وضعیت پایین کلیک کنید. افزونه را طبق دستورالعمل تأیید کنید. اگر عبارت "Cloud Code - بدون پروژه" را در نوار وضعیت مشاهده کردید، آن را انتخاب کنید و سپس پروژه خاص Google Cloud را از لیست پروژه‌هایی که قصد دارید با آنها کار کنید، انتخاب کنید.

6f5ce865fc7a3ef5.png

  1. همانطور که نشان داده شده است، روی دکمه Gemini در گوشه پایین سمت راست کلیک کنید و برای آخرین بار پروژه صحیح Google Cloud را انتخاب کنید. اگر از شما خواسته شد که Cloud AI Companion API را فعال کنید، لطفاً این کار را انجام دهید و به مرحله بعد بروید.
  2. پس از انتخاب پروژه گوگل کلود خود، مطمئن شوید که می‌توانید آن را در پیام وضعیت Cloud Code در نوار وضعیت مشاهده کنید و همچنین Code Assist را در سمت راست، در نوار وضعیت، مطابق شکل زیر فعال کرده باشید:

709e6c8248ac7d88.png

دستیار کد Gemini آماده استفاده است!

اختیاری: اگر Gemini را در نوار وضعیت در پایین سمت راست نمی‌بینید، باید Gemini را در Cloud Code فعال کنید. قبل از انجام این کار، با رفتن به Cloud Code Extension → Settings و وارد کردن متن Gemini مطابق شکل زیر، مطمئن شوید که Gemini در IDE فعال شده است. مطمئن شوید که کادر انتخاب انتخاب شده است. باید IDE خود را دوباره بارگذاری کنید. این کار Gemini را در Cloud Code فعال می‌کند و نماد Gemini در نوار وضعیت در IDE شما ظاهر می‌شود.

۲۲۸c۹c۹c۶b۹۵۶c۸e.png

۳. راهکار شروع سریع خلاصه‌سازی هوش مصنوعی را مستقر کنید

  1. به راهکار خلاصه‌سازی اسناد Genative AI بروید
  2. روی استقرار کلیک کنید
  • اگر پروژه شما قابلیت پرداخت صورتحساب را فعال نکرده است، آن را فعال کنید.
  • us-central1 را به عنوان منطقه انتخاب کنید.
  • روی استقرار کلیک کنید.
  • این کار می‌تواند تا ۱۵ دقیقه طول بکشد.
  • نیازی به ایجاد هیچ تغییری نیست، اما می‌توانید با کلیک بر روی دکمه «این راه‌حل را بررسی کنید» در صفحه جزئیات استقرار راه‌حل، استقرار «راهکار شروع پرش» را بررسی کنید.

۴. با جمینی چت کنید

ما قصد داریم با یادگیری نحوه چت با Gemini شروع کنیم. Gemini به عنوان دستیار چت در Cloud Shell IDE به عنوان بخشی از افزونه Cloud Code در VS Code در دسترس است. می‌توانید با کلیک بر روی دکمه Gemini در نوار ناوبری سمت چپ، آن را اجرا کنید. به دنبال آیکون Gemini بگردید. a489f98a34898727.png در نوار ابزار ناوبری سمت چپ و روی آن کلیک کنید.

این کار باعث نمایش پنجره Chat: GeminiI در Cloud Shell IDE می‌شود و می‌توانید با Gemini چت کنید و در مورد Google Cloud کمک بگیرید.

۱۴ad103efaa0ddaa.png

بیایید از پنجره چت Gemini برای وارد کردن یک اعلان و مشاهده پاسخ از Gemini استفاده کنیم. اعلان زیر را وارد کنید:

What is Cloud Run? 

Gemini باید جزئیات مربوط به Cloud Run را ارائه دهد. Prompts سوالات یا جملاتی هستند که کمکی را که نیاز دارید توصیف می‌کنند. Prompts می‌توانند شامل زمینه‌ای از کد موجود باشند که Google Cloud آن را تجزیه و تحلیل می‌کند تا پاسخ‌های مفیدتر یا کامل‌تری ارائه دهد. برای اطلاعات بیشتر در مورد نوشتن Prompts برای تولید پاسخ‌های خوب، به بخش «نوشتن Prompts بهتر برای Gemini در Google Cloud» مراجعه کنید.

برای پرسیدن سوال در مورد Google Cloud، از نمونه سوالات زیر یا هر یک از سوالات خودتان استفاده کنید:

  • What is the difference between Cloud Run and Cloud Functions?
  • What services are available on Google Cloud to run containerized workloads?
  • What are the best practices to optimize costs while working with Google Cloud Storage?

به آیکون سطل زباله در بالا توجه کنید - این روش شما برای تنظیم مجدد زمینه برای تاریخچه چت Code Assist است. همچنین توجه داشته باشید که این تعامل چت وابسته به فایل(هایی) است که در IDE روی آنها کار می‌کنید.

۵. تابع ابری Jump Start Solution را در Cloud Code دانلود کنید.

با فرض اینکه در ویرایشگر Cloud Shell هستید، این مراحل را دنبال کنید:

  • روی کد ابری کلیک کنید c0231861cba4b5d2.png
  • توجه: بسته به اندازه صفحه نمایش شما، ممکن است یک یا دو مرحله طول بکشد.

4bf4e654a1749030.png یا a0baa1d1c1c30151.png

  • روی توابع ابری کلیک کنید.
  • در صورت درخواست، وارد حساب کاربری خود شوید یا آن را تأیید کنید.
  • روی تابع وب‌هوک کلیک کنید.
  • روی نماد «دانلود به فضای کاری جدید» کلیک کنید 21c63666e951f7b4.png
  • ۱۹۶۷۸۰f۸۵۲e۱a۹۹e.png
  • از webhook-1 به عنوان نام فضای کاری (که باید پیش‌فرض باشد) یا هر نام دیگری استفاده کنید و روی تأیید کلیک کنید.
  • این کار کد را در Cloud Shell IDE باز می‌کند.

۶. پروژه موجود را بررسی کنید

این راه حل Jump Start در زیر نشان داده شده است:

df9ee7ff5346f23.png

روند کار از قابلیت آپلود PDF به فضای ذخیره‌سازی ابری را بررسی کنید. تابع ابری که در صورت آپلود فایل PDF فراخوانی می‌شود، در فایل main.py آورده شده است.

روی آن فایل کلیک کنید. نقطه ورود برای تابع cloud، تابع entrypoint است که در نهایت تابع cloud_event_entrypoint را فراخوانی می‌کند که متن را از PDF استخراج می‌کند، سپس summarization_entrypoint را فراخوانی می‌کند که از مدل‌های هوش مصنوعی Vertex برای خلاصه کردن و نوشتن نتایج به ترتیب در GCS و BigQuery استفاده می‌کند.

تمام کد موجود در فایل main.py یا هر قطعه کد خاص را هایلایت کنید. روی گفتگوی Gemini کلیک کنید و دستور زیر را بدهید: Explain this .

این باید توضیحی در مورد کد به شما بدهد.

۷. اجرای یک نمونه آزمایشی

طبق نمودار معماری، ما قصد داریم یک فایل را در سطل <PROJECT_ID>_uploads آپلود کنیم تا تابع Cloud فراخوانی شود.

مطمئن شوید که یک نمونه PDF آماده دارید که می‌توانید آپلود کنید و خلاصه آن را می‌خواهید.

اگر فایل PDF نمونه‌ای ندارید، می‌توانید از یکی از نمونه‌هایی که ما ایجاد کرده‌ایم استفاده کنید. از Cloud Shell، دستور زیر را اجرا کنید:

gsutil cp \
    gs://arxiv-dataset/arxiv/cmp-lg/pdf/9410/9410009v1.pdf \
    gs://<PROJECT_ID>_uploads/

پس از آپلود موفقیت‌آمیز فایل، تابع webhook cloud فراخوانی شده و متن موجود در سند را خلاصه می‌کند. خروجی در یک مجموعه داده BigQuery به نام summary_dataset و در جدول summary_table نوشته خواهد شد.

برای مشاهده نتایج خلاصه، جدول را جستجو کنید.

f2ed627e3e96d84e.png

۸. یک کلاینت وب اپلیکیشن برای اپلیکیشن بسازید

فرآیند فوق یک فرآیند گام به گام دستی برای آپلود فایل PDF مورد نظر ما به صورت خلاصه است. در مورد ساخت یک رابط کاربری وب برای برنامه چطور؟

الزامات مربوط به رابط کاربری وب ساده است:

  1. یک فرم HTML پایه که به ما امکان انتخاب و آپلود فایل را می‌دهد، که باید خلاصه شود.
  2. فایل پس از آپلود موفقیت‌آمیز، باید در سطل <PROJECT_ID>_uploads نوشته شود تا بقیه‌ی قابلیت‌ها به همان شکل قبلی کار کنند.

ما با کمک Duet AI از پایتون و چارچوب Flask برای برنامه‌های وب برای ساخت این پروژه استفاده خواهیم کرد.

بیایید شروع کنیم. فرض می‌کنیم که شما هنوز همان فضای کاری را در Cloud Shell IDE باز دارید.

تمام فایل‌ها را ببندید و در پنجره چت جمینی، دستور زیر را اجرا کنید:

Write a Python Flask application that has a couple of routes:
The root route / should serve the index.html page using the render_template framework. The /upload route should accept a file being uploaded and write that file to a Cloud Storage bucket.

در حالت ایده‌آل، این باید کدی به شکل زیر تولید کند:

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = file.filename
    bucket = storage.Client().bucket('your-bucket-name')
    blob = bucket.blob(filename)
    blob.upload_from_string(
        file.read(),
        content_type=file.content_type
    )
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

کد بالا را با نام app.py در ریشه فضای کاری IDE ذخیره کنید.

ما می‌خواهیم برنامه روی پورت ۸۰۸۰ اجرا شود و از آدرس میزبان ۰.۰.۰.۰ استفاده کند، بنابراین بیایید از Gemini بخواهیم که عبارت app.run را تغییر دهد.

دستور زیر را بدهید:

Modify the app.py to run on port 8080 and host address 0.0.0.0

کد شما الان باید به این شکل باشه:

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = file.filename
    bucket = storage.Client().bucket('your-bucket-name')
    blob = bucket.blob(filename)
    blob.upload_from_string(
        file.read(),
        content_type=file.content_type
    )
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)

در مرحله بعد، می‌خواهیم فایل index.html نیز ایجاد شود. در پنجره چت Gemini، دستور زیر را اجرا کنید:

Provide the index.html file

باید کدی مانند کد زیر برای index.html ارائه دهد.

<!DOCTYPE html>
<html>
<head>
  <title>File Upload</title>
</head>
<body>
  <h1>File Upload</h1>
  <form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
  </form>
</body>
</html>

می‌توانیم از Gemini بخواهیم که محل ذخیره فایل index.html را به ما بگوید. برای این کار، دستور زیر را اجرا کنید:

Since this is using the render_template framework, where should this file be saved?

باید پاسخی مشابه موارد زیر بدهد:

c666ee4af5039728.png

یک پوشه به نام templates در پوشه ریشه ایجاد کنید و فایل index.html را در آن ذخیره کنید.

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

modify the app.py to have exception handling in the upload() function. The success or failure should be returned to the index page.

اکنون باید مقداری مدیریت خطا اضافه شود، همانطور که در زیر نشان داده شده است:

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    try:
        file = request.files['file']
        filename = file.filename
        bucket = storage.Client().bucket('your-bucket-name')
        blob = bucket.blob(filename)
        blob.upload_from_string(
            file.read(),
            content_type=file.content_type
        )
        return redirect(url_for('index'))
    except Exception as e:
        return render_template('index.html', error=str(e))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)

از آنجایی که باید پیام خطا را در فایل index.html نمایش دهیم، باید آن را نیز تغییر دهیم. بیایید از Gemini بخواهیم که این کار را از طریق خط فرمان زیر انجام دهد:

update the index.html to display the error message

این باید یک index.html به‌روزرسانی‌شده مانند زیر ارائه دهد:

<!DOCTYPE html>
<html>
<head>
  <title>File Upload</title>
</head>
<body>
  <h1>File Upload</h1>
  {% if error %}
    <p style="color: red;">{{ error }}</p>
  {% endif %}
  <form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
  </form>
</body>
</html>

مطمئن شوید که در هر یک از مراحل فوق، تغییرات را به ترتیب در فایل app.py و index.html ذخیره می‌کنید.

فایل app.py نام سطل صحیحی ندارد و از این رو می‌توانیم این اطلاعات را به Gemini بدهیم و از آن بخواهیم تغییرات را انجام دهد. علاوه بر این، باید شناسه پروژه را برای نمونه storage.Client() ارائه دهیم. از این رو، چند دستور زیر را در پنجره چت Gemini بدهید ( <PROJECT_ID> را با شناسه پروژه Google Cloud خود جایگزین کنید) و تغییرات را اعمال کنید:

نکته ۱

My bucket name is gemini-for-devs-demo_uploads, please change the code to use that.

نکته ۲

My project id is gemini-for-devs-demo, please change the storage.Client() to use that.

فایل app.py نهایی به این شکل است (شناسه پروژه من در زیر نشان داده شده است، اما در حالت ایده‌آل باید همانی باشد که شما با آن کار می‌کنید و در اعلان بالا داده‌اید):

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    try:
        file = request.files['file']
        filename = file.filename
        bucket = storage.Client(project='gcp-experiments-349209').bucket('gcp-experiments-349209_uploads')
        blob = bucket.blob(filename)
        blob.upload_from_string(
            file.read(),
            content_type=file.content_type
        )
        return redirect(url_for('index'))
    except Exception as e:
        return render_template('index.html', error=str(e))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)

۹. اجرای برنامه وب به صورت محلی

یک محیط پایتون با وابستگی‌های تعریف‌شده در فایل requirements.txt ایجاد کنید. مطابق شکل زیر به پالت فرمان در Cloud Shell IDE بروید:

55dffeed9fe6e9c0.png

عبارت Python: Create Environment تایپ کنید و سپس مراحل ایجاد یک محیط مجازی با استفاده از (venv)، سپس مفسر پایتون ۳.x و فایل requirements.txt را طی کنید. این کار محیط مورد نیاز را ایجاد می‌کند.

اکنون ترمینال را اجرا کنید، همانطور که در زیر نشان داده شده است:

6ede24cb97a4e9c5.png

دستور زیر را در ترمینال بدهید:

python app.py

برنامه Flask باید اجرا شود و چیزی شبیه به این را ببینید:

(.venv) romin@cloudshell:~/webhook-2 (gcp-experiments-349209)$ python app.py 
 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8080
 * Running on http://10.88.0.3:8080
Press CTRL+C to quit
 * Restarting with watchdog (inotify)
 * Debugger is active!
 * Debugger PIN: 989-296-833

به آدرس http://127.0.0.1:8080 مراجعه کنید، باید صفحه index.html نمایش داده شود.

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

می‌توانید با مراجعه به مجموعه داده و جدول BigQuery که قبلاً در تمرین دیدیم، خلاصه‌سازی را بررسی کنید. همچنین می‌توانید از مخزن ذخیره‌سازی ابری ( <PROJECT_ID>_output ) استفاده کنید.

۱۰. (اختیاری) اکتشاف باز - استقرار در Cloud Run

  • می‌توانید برنامه را روی Cloud Run مستقر کنید.
  • از دستیار کد Gemini با دستور زیر بپرسید (ممکن است لازم باشد چند تغییر در دستور بالا را امتحان کنید):
I don't want to build a container image but deploy directly from source. What is the gcloud command for that?

۱۱. (اختیاری) باز کردن کاوش - اضافه کردن استایل‌های CSS

  • از Gemini Code Assist و دستیار درون ویرایشگر برای اضافه کردن استایل‌های CSS به برنامه خود استفاده کنید و پس از اتمام کار، دوباره برنامه را مستقر کنید!
  • فایل index.html را باز کنید و در چت Gemini دستور زیر را بدهید: Can you apply material design styles to this index.html?
  • کد را بررسی کنید و ببینید که آیا کار می‌کند یا خیر.

۱۲. تبریک می‌گویم!

تبریک می‌گویم - شما با موفقیت با Gemini Code Assist روی یک پروژه نمونه کار کردید تا بفهمید که چگونه می‌تواند در تولید کد، تکمیل کد، خلاصه‌سازی کد به شما کمک کند و در یافتن پاسخ سوالات مربوط به Google Cloud به شما کمک کند.

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