แอปพลิเคชัน RAG ที่ใช้เอเจนต์ของ AlloyDB พร้อมกล่องเครื่องมือ MCP

1. บทนำ

e71e051395674233.gif

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

f753f71c7116358a.png

ดูข้อมูลเพิ่มเติมเกี่ยวกับกล่องเครื่องมือ MCP ได้ในหน้าเอกสารประกอบ และดูตัวอย่างแอปพลิเคชัน Cymbal Air ได้ที่นี่

ห้องทดลองนี้เป็นส่วนหนึ่งของคอลเล็กชันห้องทดลองที่มุ่งเน้นฟีเจอร์ AlloyDB AI อ่านเพิ่มเติมได้ในหน้า AlloyDB AI ในเอกสารประกอบ และดูแล็บอื่นๆ

ข้อกำหนดเบื้องต้น

  • ความเข้าใจพื้นฐานเกี่ยวกับ Google Cloud Console
  • ทักษะพื้นฐานในอินเทอร์เฟซบรรทัดคำสั่งและ Google Cloud Shell

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

  • วิธีติดตั้งใช้งานคลัสเตอร์ AlloyDB ที่ผสานรวมกับ Vertex AI
  • วิธีเชื่อมต่อกับ AlloyDB
  • วิธีกำหนดค่าและติดตั้งใช้งานบริการ MCP Tooolbox
  • วิธีทําให้แอปพลิเคชันตัวอย่างใช้งานได้โดยใช้บริการที่ทําให้ใช้งานได้

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

  • บัญชี Google Cloud และโปรเจ็กต์ Google Cloud
  • เว็บเบราว์เซอร์ เช่น Chrome

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่เสียค่าใช้จ่ายมากนัก หรืออาจไม่เสียเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

เปิดใช้งาน Cloud Shell

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

ภาพหน้าจอของเทอร์มินัล Google Cloud Shell ที่แสดงว่าสภาพแวดล้อมเชื่อมต่อแล้ว

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร

3. ก่อนเริ่มต้น

เปิดใช้ API

เอาต์พุต:

ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว

โดยปกติแล้ว รหัสโปรเจ็กต์จะแสดงในวงเล็บในพรอมต์คำสั่งใน Cloud Shell ดังที่แสดงในรูปภาพ

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

จากนั้นตั้งค่าตัวแปรสภาพแวดล้อม PROJECT_ID เป็นรหัสโปรเจ็กต์ Google Cloud ของคุณ

PROJECT_ID=$(gcloud config get-value project)

เปิดใช้บริการที่จำเป็นทั้งหมด

gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com

ผลลัพธ์ที่คาดหวัง

student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.

4. ติดตั้งใช้งานคลัสเตอร์ AlloyDB

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

ก่อนสร้างคลัสเตอร์ AlloyDB เราต้องมีช่วง IP ส่วนตัวที่พร้อมใช้งานใน VPC เพื่อให้อินสแตนซ์ AlloyDB ในอนาคตใช้ หากเราไม่มี เราจะต้องสร้าง กำหนดให้ใช้โดยบริการภายในของ Google หลังจากนั้นเราจะสร้างคลัสเตอร์และอินสแตนซ์ได้

สร้างช่วง IP ส่วนตัว

เราต้องกำหนดค่าการเข้าถึงบริการส่วนตัวใน VPC สำหรับ AlloyDB สมมติว่าเรามีเครือข่าย VPC "เริ่มต้น" ในโปรเจ็กต์และจะใช้สำหรับการดำเนินการทั้งหมด

สร้างช่วง IP ส่วนตัว

gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default

สร้างการเชื่อมต่อส่วนตัวโดยใช้ช่วง IP ที่จัดสรร

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].

student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.

student@cloudshell:~ (test-project-402417)$

สร้างคลัสเตอร์ AlloyDB

ในส่วนนี้ เราจะสร้างคลัสเตอร์ AlloyDB ในภูมิภาค us-central1

กำหนดรหัสผ่านสำหรับผู้ใช้ postgres คุณกำหนดรหัสผ่านเองหรือใช้ฟังก์ชันแบบสุ่มเพื่อสร้างรหัสผ่านก็ได้

export PGPASSWORD=`openssl rand -hex 12`

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`

จดรหัสผ่าน PostgreSQL ไว้ใช้ในอนาคต

echo $PGPASSWORD

คุณจะต้องใช้รหัสผ่านดังกล่าวในอนาคตเพื่อเชื่อมต่อกับอินสแตนซ์ในฐานะผู้ใช้ postgres เราขอแนะนำให้คุณจดหรือคัดลอกรหัสนี้ไว้ที่ใดที่หนึ่งเพื่อใช้ในภายหลัง

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD
bbefbfde7601985b0dee5723

สร้างคลัสเตอร์ช่วงทดลองใช้ฟรี

หากยังไม่เคยใช้ AlloyDB มาก่อน คุณสามารถสร้างคลัสเตอร์ทดลองใช้ฟรีได้โดยทำดังนี้

กำหนดชื่อภูมิภาคและคลัสเตอร์ AlloyDB เราจะใช้ภูมิภาค us-central1 และ alloydb-aip-01 เป็นชื่อคลัสเตอร์

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

เรียกใช้คำสั่งเพื่อสร้างคลัสเตอร์

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL

เอาต์พุตของคอนโซลที่คาดไว้

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

สร้างอินสแตนซ์หลักของ AlloyDB สำหรับคลัสเตอร์ในเซสชัน Cloud Shell เดียวกัน หากการเชื่อมต่อถูกตัด คุณจะต้องกำหนดตัวแปรสภาพแวดล้อมของภูมิภาคและชื่อคลัสเตอร์อีกครั้ง

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

สร้างคลัสเตอร์มาตรฐาน AlloyDB

หากไม่ใช่คลัสเตอร์ AlloyDB แรกในโปรเจ็กต์ ให้สร้างคลัสเตอร์มาตรฐานต่อไป

กำหนดชื่อภูมิภาคและคลัสเตอร์ AlloyDB เราจะใช้ภูมิภาค us-central1 และ alloydb-aip-01 เป็นชื่อคลัสเตอร์

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

เรียกใช้คำสั่งเพื่อสร้างคลัสเตอร์

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION

เอาต์พุตของคอนโซลที่คาดไว้

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION 
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

สร้างอินสแตนซ์หลักของ AlloyDB สำหรับคลัสเตอร์ในเซสชัน Cloud Shell เดียวกัน หากการเชื่อมต่อถูกตัด คุณจะต้องกำหนดตัวแปรสภาพแวดล้อมของภูมิภาคและชื่อคลัสเตอร์อีกครั้ง

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

ให้สิทธิ์ที่จำเป็นแก่ AlloyDB

เพิ่มสิทธิ์ Vertex AI ให้กับ Agent บริการ AlloyDB

เปิดแท็บ Cloud Shell อีกแท็บโดยใช้เครื่องหมาย "+" ที่ด้านบน

4ca978f5142bb6ce.png

ในแท็บ Cloud Shell ใหม่ ให้เรียกใช้คำสั่งต่อไปนี้

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-11039]
student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"
Updated IAM policy for project [test-project-001-402417].
bindings:
- members:
  - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com
  role: roles/aiplatform.user
- members:
...
etag: BwYIEbe_Z3U=
version: 1
 

ปิดแท็บโดยใช้คำสั่งการดำเนินการ "exit" ในแท็บ

exit

5. เตรียมเครื่องเสมือน GCE

เราจะใช้ VM ของ Google Compute Engine (GCE) เป็นแพลตฟอร์มในการทำงานกับฐานข้อมูลและติดตั้งใช้งานส่วนต่างๆ ของแอปพลิเคชันตัวอย่าง การใช้ VM ช่วยให้เรามีความยืดหยุ่นมากขึ้นในคอมโพเนนต์ที่ติดตั้งและเข้าถึง IP ของ AlloyDB แบบส่วนตัวได้โดยตรงสำหรับขั้นตอนการเตรียมข้อมูล

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

เนื่องจากเราจะใช้ VM เพื่อติดตั้งใช้งาน MCP Toolbox เป็นบริการ และติดตั้งใช้งานหรือโฮสต์แอปพลิเคชันตัวอย่าง ขั้นตอนแรกคือการสร้างบัญชีบริการของ Google (GSA) GCE VM จะใช้ GSA และเราจะต้องให้สิทธิ์ที่จำเป็นแก่ GSA เพื่อให้ทำงานร่วมกับบริการอื่นๆ ได้

ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create compute-aip --project $PROJECT_ID

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudbuild.builds.editor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/artifactregistry.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/storage.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/run.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.viewer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.client"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com \
    --role roles/secretmanager.admin

ติดตั้งใช้งาน GCE VM

สร้าง VM ของ GCE ในภูมิภาคและ VPC เดียวกันกับคลัสเตอร์ AlloyDB

ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
Your active configuration is: [cloudshell-10282]
Created [https://www.googleapis.com/compute/v1/projects/gleb-test-short-002-470613/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE: 
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.28.55.32
STATUS: RUNNING

ติดตั้งไคลเอ็นต์ Postgres

ติดตั้งซอฟต์แวร์ไคลเอ็นต์ PostgreSQL ใน VM ที่ติดตั้งใช้งาน

เชื่อมต่อกับ VM โดยใช้คำสั่งต่อไปนี้

gcloud compute ssh instance-1 --zone=us-central1-a

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417].                                                                                                                                                         
Updating project ssh metadata...done.                                                                                                                                                                                                                                              
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts.
Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$ 

ติดตั้งคำสั่งเรียกใช้ซอฟต์แวร์ภายใน VM โดยทำดังนี้

sudo apt-get update
sudo apt-get install --yes postgresql-client

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ sudo apt-get update
sudo apt-get install --yes postgresql-client
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
Get:4 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]
Hit:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease
Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [1652 B]
Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB]
Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
...redacted...
update-alternatives: using /usr/share/postgresql/15/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (15+248) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u7) ...

เชื่อมต่อกับอินสแตนซ์ AlloyDB

เชื่อมต่อกับอินสแตนซ์หลักจาก VM โดยใช้ psql

ดำเนินการต่อด้วยเซสชัน SSH ที่เปิดอยู่ไปยัง VM หากระบบตัดการเชื่อมต่อ ให้เชื่อมต่ออีกครั้งโดยใช้คำสั่งเดียวกับด้านบน

ใช้ $PGASSWORD และชื่อคลัสเตอร์ที่จดไว้ก่อนหน้านี้เพื่อเชื่อมต่อกับ AlloyDB จาก VM ของ GCE โดยทำดังนี้

export PGPASSWORD=<Noted password>
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (15.13 (Debian 15.13-0+deb12u1), server 16.8)
WARNING: psql major version 15, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=>

ออกจากเซสชัน psql โดยคงการเชื่อมต่อ SSH ไว้ด้วยคำสั่งต่อไปนี้

exit

เอาต์พุตของคอนโซลที่คาดไว้

postgres=> exit
student@instance-1:~$ 

6. เริ่มต้นฐานข้อมูล

เราจะใช้ VM ของไคลเอ็นต์เป็นแพลตฟอร์มเพื่อป้อนข้อมูลลงในฐานข้อมูลและโฮสต์แอปพลิเคชัน ขั้นตอนแรกคือการสร้างฐานข้อมูลและป้อนข้อมูลลงในฐานข้อมูล

สร้างฐานข้อมูล

สร้างฐานข้อมูลชื่อ "assistantdemo"

ในเซสชัน GCE VM ให้เรียกใช้คำสั่งต่อไปนี้

psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"  

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
CREATE DATABASE
student@instance-1:~$  

เตรียมสภาพแวดล้อม Python

หากต้องการดำเนินการต่อ เราจะใช้สคริปต์ Python ที่เตรียมไว้จากที่เก็บ GitHub แต่ก่อนที่จะดำเนินการดังกล่าว เราต้องติดตั้งซอฟต์แวร์ที่จำเป็นก่อน

ใน GCE VM ให้เรียกใช้คำสั่งต่อไปนี้

sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
The following NEW packages will be installed:
  git git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl python3.11-venv
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 52.2 MB of additional disk space will be used.
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
...redacted...
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed pip-24.0
(.venv) student@instance-1:~$

ยืนยันเวอร์ชัน Python

ใน GCE VM ให้เรียกใช้คำสั่งต่อไปนี้

python -V

เอาต์พุตของคอนโซลที่คาดไว้

(.venv) student@instance-1:~$ python -V
Python 3.11.2
(.venv) student@instance-1:~$ 

ติดตั้งกล่องเครื่องมือ MCP ในเครื่อง

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

เราจะใช้กล่องเครื่องมือ MCP เพื่อเริ่มต้นชุดข้อมูลตัวอย่าง และต่อมาจะใช้เป็นเซิร์ฟเวอร์ MCP เพื่อจัดการคำขอแหล่งข้อมูลจากแอปพลิเคชันของเราในระหว่างโฟลว์การสร้างแบบดึงข้อมูลเสริม (RAG)

มาติดตั้งกล่องเครื่องมือ MCP ในเครื่องเพื่อป้อนข้อมูลลงในฐานข้อมูล assistantdemo กัน

ใน GCE VM ให้เรียกใช้คำสั่งต่อไปนี้

export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

เอาต์พุตของคอนโซลที่คาดไว้

(.venv) student@instance-1:~$ export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  133M  100  133M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M

เรียกใช้กล่องเครื่องมือเพื่อเริ่มต้นข้อมูล

ใน GCE VM ให้เรียกใช้คำสั่งต่อไปนี้

ส่งออกตัวแปรสภาพแวดล้อมสำหรับการสร้างฐานข้อมูล

export ALLOYDB_POSTGRES_PROJECT=$(gcloud config get-value project)
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"

เริ่มกล่องเครื่องมือเพื่อเริ่มต้นฐานข้อมูล โดยจะเริ่มกระบวนการในเครื่อง ซึ่งจะช่วยให้คุณเชื่อมต่อกับฐานข้อมูลปลายทางใน AlloyDB ได้อย่างราบรื่นเพื่อเติมข้อมูลตัวอย่าง

./toolbox --prebuilt alloydb-postgres

เอาต์พุตของคอนโซลที่คาดไว้ คุณควรเห็นข้อความ "Server ready to serve!" ในบรรทัดสุดท้ายของเอาต์พุต

student@instance-1:~$ cexport ALLOYDB_POSTGRES_PROJECT=$PROJECT_ID
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"
student@instance-1:~$ ./toolbox --prebuilt alloydb-postgres
2025-09-02T18:30:58.957655886Z INFO "Using prebuilt tool configuration for alloydb-postgres" 
2025-09-02T18:30:59.507306664Z INFO "Initialized 1 sources." 
2025-09-02T18:30:59.50748379Z INFO "Initialized 0 authServices." 
2025-09-02T18:30:59.507618807Z INFO "Initialized 2 tools." 
2025-09-02T18:30:59.507726704Z INFO "Initialized 2 toolsets." 
2025-09-02T18:30:59.508258894Z INFO "Server ready to serve!" 

อย่าออกจากหรือปิดแท็บนี้ของ Cloud Shell จนกว่าการสร้างข้อมูลจะเสร็จสมบูรณ์

ป้อนข้อมูลในฐานข้อมูล

เปิดแท็บ Cloud Shell อีกแท็บโดยใช้เครื่องหมาย "+" ที่ด้านบน

4ca978f5142bb6ce.png

และเชื่อมต่อกับ VM instance-1 โดยใช้คำสั่งต่อไปนี้

gcloud compute ssh instance-1 --zone=us-central1-a

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Linux instance-1 6.1.0-37-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep  2 21:44:07 2025 from 35.229.111.9
student@instance-1:~$ 

โคลนที่เก็บ GitHub ที่มีโค้ดสำหรับบริการดึงข้อมูลและแอปพลิเคชันตัวอย่าง

ใน GCE VM ให้เรียกใช้คำสั่งต่อไปนี้

git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git
Cloning into 'cymbal-air-toolbox-demo'...
remote: Enumerating objects: 3481, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 3481 (delta 16), reused 7 (delta 5), pack-reused 3434 (from 3)
Receiving objects: 100% (3481/3481), 57.96 MiB | 6.04 MiB/s, done.
Resolving deltas: 100% (2549/2549), done.
student@instance-1:~

โปรดสังเกตหากมีข้อผิดพลาด

เตรียมสภาพแวดล้อม Python และติดตั้งแพ็กเกจที่จำเป็น

source .venv/bin/activate
cd cymbal-air-toolbox-demo
pip install -r requirements.txt

ตั้งค่าเส้นทาง Python ไปยังโฟลเดอร์รูทของที่เก็บและเรียกใช้สคริปต์เพื่อป้อนข้อมูลชุดข้อมูลตัวอย่างลงในฐานข้อมูล คำสั่งแรกคือการเพิ่มเส้นทางไปยังโมดูล Python ในสภาพแวดล้อมของเรา และคำสั่งที่ 2 คือการป้อนข้อมูลลงในฐานข้อมูล

export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py

เอาต์พุตของคอนโซลที่คาดไว้(แก้ไข) คุณควรเห็นข้อความ "database init done" ที่ส่วนท้าย

student@instance-1:~$ source .venv/bin/activate
(.venv) student@instance-1:~$ 
(.venv) student@instance-1:~$ cd cymbal-air-toolbox-demo/
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ pip install -r requirements.txt
python run_database_init.py
Collecting fastapi==0.115.0 (from -r requirements.txt (line 1))
  Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB)
Collecting google-auth==2.40.3 (from -r requirements.txt (line 2))
  Downloading google_auth-2.40.3-py2.py3-none-any.whl.metadata (6.2 kB)
Collecting google-cloud-aiplatform==1.97.0 (from google-cloud-aiplatform[evaluation]==1.97.0->-r requirements.txt (line 3))
  Downloading google_cloud_aiplatform-1.97.0-py2.py3-none-any.whl.metadata (36 kB)
Collecting itsdangerous==2.2.0 (from -r requirements.txt (line 4))
  Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting jinja2==3.1.5 (from -r requirements.txt (line 5))
  Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)
Collecting langchain-community==0.3.25 (from -r requirements.txt (line 6))
  Downloading langchain_community-0.3.25-py3-none-any.whl.metadata (2.9 kB)
Collecting langchain==0.3.25 (from -r requirements.txt (line 7))
...

(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py
Airports table initialized
Amenities table initialized
Flights table initialized
Tickets table initialized
Policies table initialized
database init done.
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 

คุณปิดแท็บนี้ได้เลย

ในเซสชัน VM ให้ดำเนินการดังนี้

exit

และในเซสชัน Cloud Shell ให้กด Ctrl+D หรือเรียกใช้คำสั่งต่อไปนี้

exit

ในแท็บแรกที่มี MCP Toolbox ที่กำลังทำงาน ให้กด Ctrl+c เพื่อออกจากเซสชันการทำงานของกล่องเครื่องมือ

ระบบได้ป้อนข้อมูลตัวอย่างสำหรับแอปพลิเคชันลงในฐานข้อมูลแล้ว

คุณยืนยันได้โดยเชื่อมต่อกับฐานข้อมูลและตรวจสอบจำนวนแถวในตารางสนามบิน คุณสามารถใช้ยูทิลิตี psql เหมือนที่เราเคยใช้ก่อนหน้านี้หรือ AlloyDB Studio วิธีตรวจสอบโดยใช้ psql

ในเซสชัน SSH ไปยัง VM ของ instance-1 ให้เรียกใช้คำสั่งต่อไปนี้

export PGPASSWORD=<Noted AlloyDB password>
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"  

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"
 count 
-------
  7698
(1 row)

ฐานข้อมูลพร้อมแล้ว และเราสามารถดำเนินการติดตั้งใช้งาน MCP Toolbox ต่อไปได้

7. ติดตั้งใช้งานกล่องเครื่องมือ MCP ใน Cloud Run

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

เตรียมรหัสไคลเอ็นต์

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

ใน Cloud Console ให้ไปที่ API และบริการ แล้วคลิก "หน้าจอขอความยินยอม OAuth" ลิงก์ไปยังหน้าเว็บ ระบบจะเปิดหน้าภาพรวมของ Oauth ซึ่งเราจะคลิก "เริ่มต้นใช้งาน"

2f13a26289362f20.png

ในหน้าถัดไป เราจะระบุชื่อแอปพลิเคชัน อีเมลสนับสนุนผู้ใช้ แล้วคลิกถัดไป

dd3721c042db26ae.png

ในหน้าจอถัดไป เราเลือก "ภายใน" สำหรับแอปพลิเคชันของเรา แล้วคลิก "ถัดไป" อีกครั้ง

71b6d11179ed872b.png

จากนั้นเราจะระบุอีเมลติดต่อและคลิกถัดไป

8ff29dfd959b41f0.png

จากนั้นเรายอมรับนโยบายบริการ Google API แล้วกดปุ่มสร้าง

ca87d1200662b7f7.png

ซึ่งจะนำเราไปยังหน้าที่เราสร้างไคลเอ็นต์ OAuth ได้

56e5040805632a53.png

ในหน้าจอ เราเลือก "เว็บแอปพลิเคชัน" จากเมนูแบบเลื่อนลง ใส่ "Cymbal Air" เป็นแอปพลิเคชัน แล้วกดปุ่มเพิ่ม URI

4e28c6700426735a.png

URI แสดงถึงแหล่งที่มาที่เชื่อถือได้สำหรับแอปพลิเคชัน และจะขึ้นอยู่กับว่าคุณพยายามเข้าถึงแอปพลิเคชันจากที่ใด เราใส่ "http://localhost:8081" เป็น URI ที่ได้รับอนุญาต และ "http://localhost:8081/login/google" เป็น URI การเปลี่ยนเส้นทาง ค่าเหล่านั้นจะใช้ได้หากคุณป้อน "http://localhost:8081" ในเบราว์เซอร์เป็น URI สำหรับการเชื่อมต่อ เช่น เมื่อคุณเชื่อมต่อผ่านอุโมงค์ SSH จากคอมพิวเตอร์ ฉันจะแสดงวิธีทำในภายหลัง

9dc25f2d318097e2.png

หลังจากกดปุ่ม "สร้าง" คุณจะได้รับหน้าต่างป๊อปอัปพร้อมข้อมูลเข้าสู่ระบบของไคลเอ็นต์ และระบบจะบันทึกข้อมูลเข้าสู่ระบบ คุณสามารถคัดลอกรหัสไคลเอ็นต์เพื่อใช้เมื่อเริ่มแอปพลิเคชันได้เสมอ

f5a7b6ad0858d95c.png

ในภายหลัง คุณจะเห็นตำแหน่งที่คุณระบุรหัสไคลเอ็นต์ดังกล่าว

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

เราต้องการบัญชีบริการเฉพาะสำหรับบริการ Cloud Run ที่มีสิทธิ์ทั้งหมดที่จำเป็น สำหรับบริการของเรา เราต้องมีสิทธิ์เข้าถึง AlloyDB และ Cloud Secret Manager ส่วนชื่อบัญชีบริการที่เราจะใช้คือ toolbox-identity

เปิดแท็บ Cloud Shell อีกแท็บโดยใช้เครื่องหมาย "+" ที่ด้านบน

4ca978f5142bb6ce.png

ในแท็บ Cloud Shell ใหม่ ให้เรียกใช้คำสั่งต่อไปนี้

export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create toolbox-identity

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/secretmanager.secretAccessor"

โปรดสังเกตหากมีข้อผิดพลาด คำสั่งนี้ควรสร้างบัญชีบริการสำหรับบริการ Cloud Run และให้สิทธิ์ในการทำงานกับ Secret Manager, ฐานข้อมูล และ Vertex AI

ปิดแท็บโดยกด Ctrl+D หรือเรียกใช้คำสั่ง "exit" ในแท็บ

exit

เตรียมการกำหนดค่ากล่องเครื่องมือ MCP

เตรียมไฟล์การกำหนดค่าสำหรับกล่องเครื่องมือ MCP คุณสามารถอ่านตัวเลือกการกำหนดค่าทั้งหมดได้ในเอกสารประกอบ แต่ในที่นี้เราจะใช้ไฟล์ตัวอย่าง tools.yaml และแทนที่ค่าบางอย่าง เช่น ชื่อคลัสเตอร์และอินสแตนซ์ รหัสผ่าน AlloyDB และรหัสโปรเจ็กต์ด้วยค่าจริงของเรา

ส่งออกรหัสผ่าน AlloyDB

export PGPASSWORD=<noted AlloyDB password>

ส่งออกรหัสไคลเอ็นต์ที่เราเตรียมไว้ในขั้นตอนก่อนหน้า

export CLIENT_ID=<noted OAuth 2.0 client ID for our application>

เตรียมไฟล์การกำหนดค่า

PROJECT_ID=$(gcloud config get-value project)
ADBCLUSTER=alloydb-aip-01
sed -e "s/project: retrieval-app-testing/project: $(gcloud config get-value project)/g" \
-e "s/cluster: my-alloydb-cluster/cluster: $ADBCLUSTER/g" \
-e "s/instance: my-alloydb-instance/instance: $ADBCLUSTER-pr/g" \
-e "s/password: postgres/password: $PGPASSWORD\\n    ipType: private/g" \
-e "s/^ *clientId: .*/    clientId: $CLIENT_ID/g" \
cymbal-air-toolbox-demo/tools.yaml >~/tools.yaml

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

sources:
  my-pg-instance:
    kind: alloydb-postgres
    project: gleb-test-short-003-471020
    region: us-central1
    cluster: alloydb-aip-01
    instance: alloydb-aip-01-pr
    database: assistantdemo
    user: postgres
    password: L23F...
    ipType: private
authServices:
  my_google_service:
    kind: google
    clientId: 96828*******-***********.apps.googleusercontent.com

สร้าง Secret โดยใช้การกำหนดค่า tools.yaml เป็นแหล่งที่มา

ในคอนโซล SSH ของ VM ให้เรียกใช้คำสั่งต่อไปนี้

gcloud secrets create tools --data-file=tools.yaml

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ gcloud secrets create tools --data-file=tools.yaml
Created version [1] of the secret [tools].

ติดตั้งใช้งานกล่องเครื่องมือ MCP เป็นบริการ Cloud Run

ตอนนี้ทุกอย่างพร้อมแล้วที่จะทำให้ MCP Toolbox ใช้งานได้เป็นบริการใน Cloud Run สำหรับการทดสอบในเครื่อง คุณสามารถเรียกใช้ "./toolbox –tools-file=./tools.yaml" ได้ แต่หากต้องการให้แอปพลิเคชันทำงานในระบบคลาวด์ การทำให้ใช้งานได้ใน Cloud Run จะสมเหตุสมผลกว่ามาก

ในเซสชัน SSH ของ VM ให้เรียกใช้คำสั่งต่อไปนี้

export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated
Deploying container to Cloud Run service [toolbox] in project [gleb-test-short-002-470613] region [us-central1]
✓ Deploying new service... Done.                                                                                                                                                                                                
  ✓ Creating Revision...                                                                                                                                                                                                        
  ✓ Routing traffic...                                                                                                                                                                                                          
Done.                                                                                                                                                                                                                           
Service [toolbox] revision [toolbox-00001-l9c] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-868691532292.us-central1.run.app

student@instance-1:~$

ยืนยันบริการ

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

dd1a16ee00a861a0.png

คุณสามารถคัดลอกค่าและแทนที่ส่วน "$(gcloud run services list –filter="(toolbox)" –format="value(URL)" ในคำสั่ง curl ได้

วิธีรับ URL แบบไดนามิกจากบรรทัดคำสั่งมีดังนี้

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

เอาต์พุตของคอนโซลที่คาดไว้

student@instance-1:~$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")
🧰 Hello, World! 🧰student@instance-1:~$

หากเห็นข้อความ "Hello World" แสดงว่าบริการของเราพร้อมใช้งานและตอบสนองต่อคำขอ

8. ทำให้แอปพลิเคชันตัวอย่างใช้งานได้

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

คุณสามารถทําให้แอปพลิเคชันใช้งานได้ในเครื่อง บน VM ในระบบคลาวด์ หรือบริการอื่นๆ เช่น Cloud Run หรือ Kubernetes ในที่นี้เราจะแสดงวิธีติดตั้งใช้งานใน VM ก่อน

เตรียมสภาพแวดล้อม

เราจะทำงานบน VM ต่อไปโดยใช้เซสชัน SSH เดิม เราต้องใช้โมดูล Python บางอย่างเพื่อเรียกใช้แอปพลิเคชัน และเราได้เพิ่มโมดูลเหล่านั้นไปแล้วเมื่อเริ่มต้นฐานข้อมูลก่อนหน้านี้ มาเปลี่ยนไปใช้สภาพแวดล้อมเสมือนของ Python และเปลี่ยนตำแหน่งไปยังไดเรกทอรีแอปกัน

ในเซสชัน SSH ของ VM ให้เรียกใช้คำสั่งต่อไปนี้

source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo

ผลลัพธ์ที่คาดหวัง (แก้ไข)

student@instance-1:~$ source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$

เรียกใช้แอปพลิเคชัน Assistant

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

ในเซสชัน SSH ของ VM ให้เรียกใช้คำสั่งต่อไปนี้

export TOOLBOX_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

ผลลัพธ์ที่คาดหวัง (แก้ไข)

student@instance-1:~/cymbal-air-toolbox-demo$ export BASE_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

หากต้องการใช้ความสามารถขั้นสูงเพิ่มเติมของแอปพลิเคชัน เช่น การจองและการเปลี่ยนเที่ยวบิน เราต้องลงชื่อเข้าใช้แอปพลิเคชันโดยใช้บัญชี Google และเพื่อจุดประสงค์ดังกล่าว เราต้องระบุตัวแปรสภาพแวดล้อม CLIENT_ID โดยใช้รหัสไคลเอ็นต์ OAuth จากบท "เตรียมรหัสไคลเอ็นต์"

export CLIENT_ID=215....apps.googleusercontent.com

ผลลัพธ์ที่คาดหวัง (แก้ไข)

student@instance-1:~/cymbal-air-toolbox-demo$ export CLIENT_ID=215....apps.googleusercontent.com

ตอนนี้เราสามารถเรียกใช้แอปพลิเคชันได้แล้ว

python run_app.py

ผลลัพธ์ที่คาดไว้

student@instance-1:~/cymbal-air-toolbox-demo/llm_demo$ python run_app.py
INFO:     Started server process [2900]
INFO:     Waiting for application startup.
Loading application...
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)

เชื่อมต่อกับแอปพลิเคชัน

คุณเชื่อมต่อกับแอปพลิเคชันที่ทำงานใน VM ได้หลายวิธี เช่น คุณสามารถเปิดพอร์ต 8081 ใน VM โดยใช้กฎไฟร์วอลล์ใน VPC หรือสร้างตัวจัดสรรภาระงานที่มี IP สาธารณะ ในที่นี้เราจะใช้อุโมงค์ข้อมูล SSH กับ VM โดยแปลพอร์ต 8080 ในเครื่องเป็นพอร์ต 8081 ของ VM

การเชื่อมต่อจากเครื่องในพื้นที่

เมื่อต้องการเชื่อมต่อจากเครื่องในพื้นที่ เราต้องเรียกใช้อุโมงค์ SSH โดยทำได้โดยใช้ gcloud compute ssh ดังนี้

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081

ผลลัพธ์ที่คาดไว้

student-macbookpro:~ student$ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Warning: Permanently added 'compute.7064281075337367021' (ED25519) to the list of known hosts.
Linux instance-1.us-central1-c.c.gleb-test-001.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$

ตอนนี้เราสามารถเปิดเบราว์เซอร์และใช้ http://localhost:8081 เพื่อเชื่อมต่อกับแอปพลิเคชันได้แล้ว เราควรเห็นหน้าจอแอปพลิเคชัน

c667b9013afac3f9.png

การเชื่อมต่อจาก Cloud Shell

หรือจะใช้ Google Cloud Shell เพื่อเชื่อมต่อก็ได้ เปิดแท็บ Cloud Shell อีกแท็บโดยใช้เครื่องหมาย "+" ที่ด้านบน

4ca978f5142bb6ce.png

ในแท็บใหม่ ให้รับต้นทางและ URI การเปลี่ยนเส้นทางสำหรับไคลเอ็นต์เว็บที่เรียกใช้คำสั่ง gcloud โดยทำดังนี้

echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"

ผลลัพธ์ที่คาดไว้มีดังนี้

student@cloudshell:~ echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
origin:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev
redirect:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev/login/google

และใช้ต้นทางและการเปลี่ยนเส้นทางของ URI เป็น "ต้นทางของ JavaScript ที่ได้รับอนุญาต" และ "URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต" สำหรับข้อมูลเข้าสู่ระบบที่เราสร้างขึ้นในบท "เตรียมรหัสไคลเอ็นต์" โดยแทนที่หรือเพิ่มค่า http://localhost:8080 ที่ระบุไว้เดิม

คลิก "Cymbal Air" ในหน้า "รหัสไคลเอ็นต์ OAuth 2.0"

b4c1430329886d9c.png

ป้อนต้นทางและ URI การเปลี่ยนเส้นทางสำหรับ Cloud Shell แล้วกดปุ่มบันทึก

5651bdd6d0d1c88.png

ในแท็บ Cloud Shell ใหม่ ให้เริ่มอุโมงค์ไปยัง VM โดยการเรียกใช้คำสั่ง gcloud ดังนี้

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081

หากแสดงข้อผิดพลาด "กำหนดที่อยู่ที่ขอไม่ได้" โปรดอย่าสนใจ

ผลลัพธ์ที่คาดไว้มีดังนี้

student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
bind [::1]:8081: Cannot assign requested address
inux instance-1.us-central1-a.c.gleb-codelive-01.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat May 25 19:15:46 2024 from 35.243.235.73
student@instance-1:~$

ซึ่งจะเปิดพอร์ต 8080 ใน Cloud Shell ที่ใช้สำหรับ "ตัวอย่างเว็บ" ได้

คลิกปุ่ม "ตัวอย่างเว็บ" ที่ด้านขวาบนของ Cloud Shell แล้วเลือก "แสดงตัวอย่างบนพอร์ต 8080" จากเมนูแบบเลื่อนลง

444fbf54dcd4d160.png

ซึ่งจะเปิดแท็บใหม่ในเว็บเบราว์เซอร์พร้อมอินเทอร์เฟซของแอปพลิเคชัน คุณควรจะเห็นหน้า "ผู้ช่วยฝ่ายบริการลูกค้าของ Cymbal Air"

389f0ae2945beed5.png

ลงชื่อเข้าใช้แอปพลิเคชัน

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

a1f571371b957129.png

ระบบจะเปิดหน้าต่างป๊อปอัปให้เราเลือกข้อมูลเข้าสู่ระบบ

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

การสาธิตนี้แสดงผู้ช่วยฝ่ายบริการลูกค้าของ Cymbal Air Cymbal Air เป็นสายการบินโดยสารสมมติ ผู้ช่วยนี้เป็นแชทบอท AI ที่ช่วยนักเดินทางจัดการเที่ยวบินและค้นหาข้อมูลเกี่ยวกับฮับของ Cymbal Air ที่สนามบินนานาชาติซานฟรานซิสโก (SFO)

หากไม่ได้ลงชื่อเข้าใช้ (ไม่มี CLIENT_ID) ก็จะช่วยตอบคำถามของผู้ใช้ได้ เช่น

เที่ยวบินถัดไปที่ไปเดนเวอร์คือเมื่อไร

มีร้านค้าหรูๆ แถวประตู C28 ไหม

ฉันจะซื้อกาแฟใกล้ประตู A6 ได้ที่ไหน

ฉันจะซื้อของขวัญได้ที่ไหน

โปรดค้นหาเที่ยวบินจาก SFO ไปยังเดนเวอร์ที่ออกเดินทางวันนี้

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

6e7758f707c67c3e.png

แอปพลิเคชันใช้โมเดลพื้นฐานล่าสุดของ Google เพื่อสร้างคำตอบและเสริมด้วยข้อมูลเกี่ยวกับเที่ยวบินและสิ่งอำนวยความสะดวกจากฐานข้อมูล AlloyDB ที่ใช้งานอยู่ ดูข้อมูลเพิ่มเติมเกี่ยวกับแอปพลิเคชันเดโมนี้ได้ในหน้า Github ของโปรเจ็กต์

9. ล้างข้อมูลในสภาพแวดล้อม

ตอนนี้เมื่อทำงานทั้งหมดเสร็จแล้ว เราก็สามารถล้างข้อมูลในสภาพแวดล้อมได้

ลบบริการ Cloud Run

ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

gcloud run services delete toolbox --region us-central1

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (gleb-test-short-004)$ gcloud run services delete retrieval-service --region us-central1
Service [retrieval-service] will be deleted.

Do you want to continue (Y/n)?  Y

Deleting [retrieval-service]...done.                                                                                                                                                                                                                 
Deleted service [retrieval-service].

ลบบัญชีบริการสำหรับบริการ Cloud Run

ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-222]
student@cloudshell:~ (gleb-test-short-004)$ gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
deleted service account [retrieval-identity@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$

ทำลายอินสแตนซ์และคลัสเตอร์ AlloyDB เมื่อคุณทำแล็บเสร็จแล้ว

ลบคลัสเตอร์ AlloyDB และอินสแตนซ์ทั้งหมด

หากคุณเคยใช้ AlloyDB เวอร์ชันทดลองใช้ อย่าลบคลัสเตอร์ทดลองหากคุณวางแผนที่จะทดสอบห้องทดลองและทรัพยากรอื่นๆ โดยใช้คลัสเตอร์ทดลอง คุณจะสร้างคลัสเตอร์ทดลองอื่นในโปรเจ็กต์เดียวกันไม่ได้

คลัสเตอร์จะถูกทำลายด้วยตัวเลือก force ซึ่งจะลบอินสแตนซ์ทั้งหมดที่เป็นของคลัสเตอร์ด้วย

ใน Cloud Shell ให้กำหนดตัวแปรโปรเจ็กต์และตัวแปรสภาพแวดล้อมหากคุณถูกตัดการเชื่อมต่อและสูญเสียการตั้งค่าก่อนหน้านี้ทั้งหมด

gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)

ลบคลัสเตอร์

gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
All of the cluster data will be lost when the cluster is deleted.

Do you want to continue (Y/n)?  Y

Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f
Deleting cluster...done.   

ลบข้อมูลสำรองของ AlloyDB

ลบข้อมูลสำรอง AlloyDB ทั้งหมดสำหรับคลัสเตอร์

for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f
Deleting backup...done.                                                                                                                                                                                                                                                            

ตอนนี้เราสามารถทำลาย VM ได้แล้ว

ลบ VM ใน GCE

ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet
Deleted 

ลบบัญชีบริการสำหรับ VM ของ GCE และบริการดึงข้อมูล

ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet

เอาต์พุตของคอนโซลที่คาดไว้

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Your active configuration is: [cloudshell-222]
deleted service account [compute-aip@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$ 

10. ขอแสดงความยินดี

ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์

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

  • วิธีติดตั้งใช้งานคลัสเตอร์ AlloyDB
  • วิธีเชื่อมต่อกับ AlloyDB
  • วิธีกำหนดค่าและติดตั้งใช้งานบริการกล่องเครื่องมือ MCP
  • วิธีทําให้แอปพลิเคชันตัวอย่างใช้งานได้โดยใช้บริการที่ทําให้ใช้งานได้

11. แบบสำรวจ

เอาต์พุต:

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านผ่านๆ อ่านและทำแบบฝึกหัด