วิธีใช้ฟังก์ชัน Cloud Run และ Gemini เพื่อสรุปไฟล์ข้อความที่อัปโหลดไปยังที่เก็บข้อมูล Cloud Storage

1. บทนำ

ภาพรวม

ฟังก์ชัน Cloud Run เป็นวิธีใหม่ในการทำให้เวิร์กโหลดใช้งานได้โดยใช้รูปแบบการแจ้งเตือนและลายเซ็นฟังก์ชัน GCF ที่คุ้นเคย ฟังก์ชัน Cloud Run ช่วยให้คุณควบคุมบริการพื้นฐานที่สร้างใน Cloud Run ได้โดยตรง แทนที่จะใช้กระบวนการบิลด์และการกําหนดค่าการทําให้ใช้งานได้ตามที่เรากำหนด

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

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

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

2. ตั้งค่าตัวแปรสภาพแวดล้อมและเปิดใช้ API

อัปเดต gcloud CLI

โค้ดแล็บนี้ต้องติดตั้ง gcloud CLI เวอร์ชันล่าสุด คุณอัปเดต CLI ได้โดยเรียกใช้

gcloud components update

เปิดใช้ API

คุณต้องเปิดใช้ API หลายรายการก่อนจึงจะเริ่มใช้ Codelab นี้ได้ โค้ดแล็บนี้ต้องใช้ API ต่อไปนี้ คุณเปิดใช้ API เหล่านั้นได้โดยเรียกใช้คําสั่งต่อไปนี้

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    storage.googleapis.com \
    artifactregistry.googleapis.com \
    eventarc.googleapis.com \
    aiplatform.googleapis.com

ตั้งค่าตัวแปรสภาพแวดล้อม

คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ในโค้ดแล็บนี้

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=<YOUR_REGION, e.g. us-central1>

gcloud config set project $PROJECT_ID
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
SERVICE_NAME=crf-vertexai-codelab
BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME
TRIGGER_NAME=$SERVICE_NAME-trigger

3. สร้างที่เก็บข้อมูลและบัญชีบริการ

สร้างที่เก็บข้อมูลของพื้นที่เก็บข้อมูล

คุณสร้างที่เก็บข้อมูล Cloud Storage ได้โดยเรียกใช้คําสั่งต่อไปนี้

gsutil mb -l us-central1 gs://$BUCKET_NAME

สร้างบัญชีบริการ

ในตัวอย่างนี้ คุณจะต้องสร้างบัญชีบริการที่มีสิทธิ์ EventArc ที่จำเป็นและบทบาทผู้เรียกใช้ Cloud Run เพื่อรับเหตุการณ์จาก Cloud Storage และเรียกใช้ฟังก์ชัน Cloud Run

ขั้นแรก ให้สร้างบัญชีบริการ

SERVICE_ACCOUNT="crf-vertexai-codelab"
SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run functions Eventarc service account"

ถัดไป ให้มอบบทบาท Eventarc Event Receiver (roles/eventarc.eventReceiver) ในโปรเจ็กต์ให้กับบัญชีบริการที่เชื่อมโยงกับทริกเกอร์ Eventarc เพื่อให้ทริกเกอร์รับเหตุการณ์จากผู้ให้บริการเหตุการณ์ได้

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/eventarc.eventReceiver

จากนั้น มอบบทบาทผู้เรียกใช้ Cloud Run ให้กับบัญชีบริการเพื่อให้สามารถเรียกใช้ฟังก์ชันได้

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/run.invoker

ตอนนี้ให้มอบบทบาทผู้ใช้แพลตฟอร์ม AI ให้กับบัญชีบริการเพื่อให้เรียกใช้ Gemini ได้

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role="roles/aiplatform.user"

และมอบหมายบทบาทผู้ดูออบเจ็กต์พื้นที่เก็บข้อมูลให้กับบัญชีบริการเพื่อให้เข้าถึงไฟล์ได้

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role="roles/storage.objectViewer"

Cloud Pub/Sub ต้องมีบทบาท roles/iam.serviceAccountTokenCreator ในโปรเจ็กต์ของคุณเพื่อสร้างโทเค็นระบุตัวตน

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator

ทริกเกอร์ต้องมีบทบาทบทบาท/pubsub.publisher ซึ่งมอบให้กับบัญชีบริการ Google Cloud Storage เพื่อรับเหตุการณ์ผ่าน Cloud Storage

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
  --role=roles/pubsub.publisher

4. สร้างและทำให้ฟังก์ชันใช้งานได้

ก่อนอื่น ให้สร้างไดเรกทอรีสำหรับซอร์สโค้ดและ cd ไปยังไดเรกทอรีนั้น

mkdir $SERVICE_NAME && cd $_

จากนั้นสร้างไฟล์ requirements.txt ที่มีเนื้อหาต่อไปนี้

functions-framework==3.*
google-cloud-aiplatform==1.63.*
google-cloud-storage==2.16.*

จากนั้นสร้างไฟล์ main.py ที่มีเนื้อหาต่อไปนี้

import functions_framework
import vertexai
from vertexai.generative_models import GenerativeModel
from google.cloud import storage

vertexai.init(project="<YOUR_PROJECT_ID>", location="us-central1")

model = GenerativeModel(
    model_name="gemini-1.5-pro-001",
    system_instruction=[
        "Summarize the following document in a single sentence. Do not respond with more than one sentence.",
    ],
)

# Triggered by a change in a storage bucket
@functions_framework.cloud_event
def hello_gcs(cloud_event):
    data = cloud_event.data

    # download the file
    storage_client = storage.Client()
    blob = storage_client.bucket(data["bucket"]).get_blob(data["name"])
    #print(blob)

    doc = blob.download_as_text()
    contents = [doc]

    response = model.generate_content(contents)
    print(response.text)

    print(f"Response from Model: {response.text}")

ตอนนี้คุณทำให้ฟังก์ชัน Cloud Run ใช้งานได้โดยการเรียกใช้คำสั่งต่อไปนี้

gcloud beta run deploy $SERVICE_NAME \
      --source . \
      --function hello_gcs \
      --region $REGION \
      --no-allow-unauthenticated \
      --service-account $SERVICE_ACCOUNT_ADDRESS

โปรดทราบว่า

  • Flag --source ใช้เพื่อบอก Cloud Run ให้สร้างฟังก์ชันเป็นบริการแบบคอนเทนเนอร์ที่เรียกใช้ได้
  • Flag --function (ใหม่) ใช้เพื่อตั้งค่าจุดแรกเข้าของบริการใหม่ให้เป็นลายเซ็นฟังก์ชันที่คุณต้องการเรียกใช้
  • (ไม่บังคับ) --no-allow-unauthenticated เพื่อไม่ให้เรียกใช้ฟังก์ชันแบบสาธารณะได้

ระบบอาจถามคุณว่า "การทําให้ใช้งานได้จากแหล่งที่มาต้องใช้ที่เก็บ Docker ของ Artifact Registry เพื่อจัดเก็บคอนเทนเนอร์ที่สร้างขึ้น ระบบจะสร้างที่เก็บชื่อ [cloud-run-source-deploy] ในภูมิภาค [<YOUR_REGION>]" ยอมรับค่าเริ่มต้น "ใช่" เพื่อสร้างที่เก็บ

คุณสามารถดูบริการใหม่ crf-vertexai-codelab ได้โดยเรียกใช้คําสั่งต่อไปนี้

gcloud beta run services describe $SERVICE_NAME --region $REGION

5. สร้างเหตุการณ์

เราสามารถสร้างทริกเกอร์ Eventarc เพื่อส่งข้อความไปยังฟังก์ชันทุกครั้งที่มีการสร้างออบเจ็กต์ใน Google Cloud Storage เสร็จสมบูรณ์ ดังนี้

BUCKET_REGION=$REGION

gcloud eventarc triggers create $TRIGGER_NAME \
     --location=$REGION \
     --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$BUCKET_REGION \
     --event-filters="type=google.cloud.storage.object.v1.finalized" \
     --event-filters="bucket=$BUCKET_NAME" \
     --service-account=$SERVICE_ACCOUNT_ADDRESS

โปรดทราบว่าสำหรับ Flag --event-filters อย่าใช้คำนำหน้า gs:// ในชื่อที่เก็บข้อมูล

หากเห็นข้อผิดพลาด If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. โปรดรอสักครู่แล้วลองอีกครั้ง

ดูบทแนะนำโดยละเอียดเกี่ยวกับการตั้งค่าบริการทริกเกอร์จาก Cloud Storage โดยใช้ Eventarc ได้ในเอกสารประกอบของ Cloud Run ที่ https://cloud.google.com/run/docs/tutorials/eventarc

6. ทดสอบฟังก์ชัน

เมื่อติดตั้งใช้งานฟังก์ชันและสร้างทริกเกอร์แล้ว ตอนนี้เราก็พร้อมที่จะเรียกใช้ฟังก์ชัน

สร้างไฟล์และอัปโหลดไปยังที่เก็บข้อมูล Cloud Storage ซึ่งทำได้ผ่านเว็บอินเทอร์เฟซของ Cloud Console หรือใช้เครื่องมือ CLI ของ gsutil เช่น

gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME

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

คุณสามารถดูบันทึกใน Cloud Console สำหรับบริการ Cloud Run หรือจะเรียกใช้คำสั่งต่อไปนี้ก็ได้

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"

ตัวอย่างเช่น การอัปโหลดไฟล์ข้อความธรรมดาของคู่มือผู้ใช้ฟังก์ชัน Cloud Run สำหรับเวอร์ชันตัวอย่างแบบส่วนตัวจะส่งผลให้ระบบพิมพ์ข้อมูลต่อไปนี้ลงในบันทึก

Response from Model: Cloud Run functions offer a new way to deploy serverless workloads with familiar Google Cloud Functions paradigms while providing control over the underlying Cloud Run service. 

7. ยินดีด้วย

ยินดีด้วยที่ทํา Codelab จนเสร็จสมบูรณ์

เราขอแนะนําให้อ่านเอกสารประกอบเกี่ยวกับฟังก์ชัน Cloud Run

สิ่งที่เราได้พูดถึง

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

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

เพื่อหลีกเลี่ยงการเรียกเก็บเงินที่ไม่ตั้งใจ (เช่น หากมีการเรียกใช้บริการ Cloud Run นี้โดยไม่ได้ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในระดับฟรี) คุณจะลบบริการ Cloud Run หรือลบโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 ก็ได้

หากต้องการลบบริการ Cloud Run ให้ไปที่คอนโซล Cloud Run ที่ https://console.cloud.google.com/run/ แล้วลบบริการ crf-vertexai-codelab ที่คุณสร้างในโค้ดแล็บนี้

หากเลือกลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่ใช้ได้โดยการเรียกใช้ gcloud projects list