MCP ของ Google Cloud สำหรับ AlloyDB สำหรับเอเจนต์ AI

1. บทนำ

23518f986c1cab33.jpeg

Codelab นี้มีคำแนะนำเกี่ยวกับวิธีเริ่มต้นใช้งานเซิร์ฟเวอร์ MCP ของ Google Cloud สำหรับ AlloyDB และเปิดใช้เป็นส่วนหนึ่งของชุดเครื่องมือสำหรับ AI Agent รวมถึงใช้เป็นส่วนหนึ่งของแอปพลิเคชัน

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

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

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

  • วิธีสร้างคลัสเตอร์ AlloyDB และนำเข้าข้อมูลตัวอย่าง
  • วิธีเปิดใช้ AlloyDB Data Access API
  • วิธีเปิดใช้ Google Cloud MCP สำหรับ AlloyDB NL
  • วิธีเพิ่ม Google Cloud MCP สำหรับ AlloyDB ลงในเอเจนต์ ADK
  • วิธีใช้ Google Cloud MCP สำหรับ AlloyDB ในแอปพลิเคชัน
  • วิธีใช้เอเจนต์กับ AlloyDBMCP สำหรับการวิเคราะห์

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

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

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

การตั้งค่าโปรเจ็กต์

  1. ลงชื่อเข้าใช้ คอนโซล Google Cloud หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

ใช้บัญชีส่วนตัวแทนบัญชีงานหรือบัญชีโรงเรียน

  1. สร้างโปรเจ็กต์ใหม่หรือนำโปรเจ็กต์ที่มีอยู่มาใช้ซ้ำ หากต้องการสร้างโปรเจ็กต์ใหม่ในคอนโซล Google Cloud ให้คลิกปุ่มเลือกโปรเจ็กต์ในส่วนหัว ซึ่งจะเปิดหน้าต่างป๊อปอัป

295004821bab6a87.png

ในหน้าต่างเลือกโปรเจ็กต์ ให้กดปุ่มโปรเจ็กต์ใหม่ ซึ่งจะเปิดกล่องโต้ตอบสำหรับโปรเจ็กต์ใหม่

37d264871000675d.png

ในกล่องโต้ตอบ ให้ป้อนชื่อโปรเจ็กต์ที่ต้องการและเลือกตำแหน่ง

96d86d3d5655cdbe.png

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

เปิดใช้การเรียกเก็บเงิน

ตั้งค่าบัญชีสำหรับการเรียกเก็บเงินส่วนตัว

หากตั้งค่าการเรียกเก็บเงินโดยใช้เครดิต Google Cloud คุณจะข้ามขั้นตอนนี้ได้

หากต้องการตั้งค่าบัญชีสำหรับการเรียกเก็บเงินส่วนตัว ให้ไปที่นี่เพื่อเปิดใช้การเรียกเก็บเงินใน Cloud Console

ข้อควรทราบ

  • การทำ Lab นี้ให้เสร็จสมบูรณ์ควรมีค่าใช้จ่ายน้อยกว่า $3 USD ในทรัพยากรระบบคลาวด์
  • คุณสามารถทำตามขั้นตอนที่ส่วนท้ายของแล็บนี้เพื่อลบทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินเพิ่มเติม
  • ผู้ใช้ใหม่มีสิทธิ์ใช้ช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

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

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

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

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

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

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

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

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

เปิดใช้ API

หากต้องการใช้ AlloyDB, Compute Engine, บริการระบบเครือข่าย และ Vertex AI คุณต้องเปิดใช้ API ที่เกี่ยวข้องในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google

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

gcloud config get-value project

ซึ่งควรแสดงรหัสโปรเจ็กต์ Google ของคุณ

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

PROJECT_ID=$(gcloud config get-value project)

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

gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com \
                       discoveryengine.googleapis.com

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

student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com \
                       discoveryengine.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

4. ติดตั้งใช้งาน AlloyDB

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

ติดตั้งใช้งาน AlloyDB โดยใช้สคริปต์อัตโนมัติ

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

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

REPO_NAME="codelabs"
REPO_URL="https://github.com/GoogleCloudPlatform/$REPO_NAME"
SOURCE_DIR="alloydb-ai-mcp"

git clone --no-checkout --filter=blob:none --depth=1 $REPO_URL

cd $REPO_NAME
git sparse-checkout set $SOURCE_DIR
git checkout
cd $SOURCE_DIR

เรียกใช้สคริปต์การติดตั้งใช้งาน

./deploy_alloydb.sh

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

...
<redacted>
...
Creating primary instance: alloydb-aip-01-pr (8 vCPUs for TRIAL cluster)
Operation ID: operation-1765988049916-646282264938a-bddce198-9f248715
Creating instance...done.                                                                                                                                                                                                             
----------------------------------------
Deployment Process Completed
Cluster:  alloydb-aip-01 (TRIAL)
Instance: alloydb-aip-01-pr
Region:   us-central1
Initial Password: JBBoDTgixzYwYpkF (if new cluster)
----------------------------------------
 

นอกจากนี้ คุณยังดูคลัสเตอร์ใหม่และอินสแตนซ์หลักในคอนโซลบนเว็บได้ด้วย

4271eb55bcc9ec84.png

5. เตรียมฐานข้อมูล

คุณต้องเปิดใช้การผสานรวม Vertex AI เพื่อใช้ฟังก์ชันและตัวดำเนินการ AI, เปิดใช้ Data Access API และสร้างฐานข้อมูลสำหรับชุดข้อมูลตัวอย่าง

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

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

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

abc505ac4d41f24e.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"

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/discoveryengine.viewer"

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

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:
... < redacted > 
etag: BwYIEbe_Z3U=
version: 1
 

เปิดใช้ Data Access API

คุณต้องเปิดใช้ Data Access API ในคลัสเตอร์ AlloyDB เพื่อให้ใช้เครื่องมือ MCP เช่น execute_sql ได้

ในแท็บเทอร์มินัลเดียวกัน ให้เรียกใช้

PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
curl -X PATCH \
 -H "Authorization: Bearer $(gcloud auth print-access-token)" \
 -H "Content-Type: application/json" \
 https://alloydb.googleapis.com/v1alpha/projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER/instances/$ADBCLUSTER-pr?updateMask=dataApiAccess \
 -d '{
   "dataApiAccess": "ENABLED",
 }'

อัปเดตแฟล็กอินสแตนซ์

หากต้องการใช้ฟังก์ชัน AI ขั้นสูงใน AlloyDB เราต้องเปิดใช้แฟล็กฐานข้อมูลบางรายการ หลังจากเปิดใช้ Data Access API แล้ว ระบบอาจใช้เวลา 2-3 นาทีในการแสดงอินสแตนซ์ว่าพร้อมสำหรับการเปลี่ยนแปลงครั้งถัดไป โปรดดูสถานะของอินสแตนซ์ในคอนโซลเพื่อให้แน่ใจว่ามีเครื่องหมายถูกสีเขียว

ในแท็บเทอร์มินัลเดียวกัน ให้เรียกใช้

PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
   --database-flags=google_ml_integration.enable_model_support=on,google_ml_integration.enable_ai_query_engine=on,google_ml_integration.enable_preview_ai_functions=on \
   --region=$REGION \
   --cluster=$ADBCLUSTER \
   --project=$PROJECT_ID \
   --update-mode=FORCE_APPLY

เปิดใช้ MCP

ขั้นตอนถัดไปคือการเปิดใช้เซิร์ฟเวอร์ MCP ของ Google Cloud สำหรับ AlloyDB ในโปรเจ็กต์ ตามค่าเริ่มต้น ระบบจะไม่ได้เปิดใช้ MCP และเป็นหนึ่งในชั้นการป้องกันหลายชั้น ซึ่งรวมถึงการตรวจสอบสิทธิ์และการให้สิทธิ์ IAM, API การเข้าถึงข้อมูล และบทบาทภายในคลัสเตอร์

ในแท็บเทอร์มินัลเดียวกัน ให้เรียกใช้

PROJECT_ID=$(gcloud config get-value project)
gcloud beta services mcp enable alloydb.googleapis.com \
    --project=$PROJECT_ID

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

exit

เชื่อมต่อกับ AlloyDB Studio

ในบทต่อไปนี้ คุณจะเรียกใช้คำสั่ง SQL ทั้งหมดที่ต้องเชื่อมต่อกับฐานข้อมูลได้ใน AlloyDB Studio T

ไปที่หน้าคลัสเตอร์ใน AlloyDB สำหรับ Postgres

เปิดอินเทอร์เฟซคอนโซลเว็บสำหรับคลัสเตอร์ AlloyDB โดยคลิกอินสแตนซ์หลัก

1d7298e7096e7313.png

จากนั้นคลิก AlloyDB Studio ทางด้านซ้าย

a33131c72ad29478.png

เลือกฐานข้อมูล Postgres, ผู้ใช้ Postgres และระบุรหัสผ่านที่จดไว้เมื่อเราสร้างคลัสเตอร์ จากนั้นคลิกปุ่ม "ตรวจสอบสิทธิ์"

หากรหัสผ่านใช้ไม่ได้หรือคุณลืมจดรหัสผ่านไว้ คุณสามารถเปลี่ยนรหัสผ่านได้ โปรดอ่านเอกสารประกอบเกี่ยวกับวิธีดำเนินการ

2fcb84f70448118c.png

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

6696bc771fab9983.png

ซึ่งจะเปิดอินเทอร์เฟซที่คุณสามารถเรียกใช้คำสั่ง SQL ได้

ae34288e5bf237c7.png

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

เริ่มต้นใช้งานฐานข้อมูลอย่างรวดเร็ว

เรียกใช้คำสั่งต่อไปนี้ในโปรแกรมแก้ไข AlloyDB Studio

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

CREATE DATABASE quickstart_db

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

Statement executed successfully

เชื่อมต่อกับ quickstart_db

ตรวจสอบว่าสร้างฐานข้อมูลโดยการเชื่อมต่อกับฐานข้อมูลนั้นหรือไม่ เชื่อมต่อกับสตูดิโออีกครั้งโดยใช้ปุ่มเพื่อสลับผู้ใช้/ฐานข้อมูล

6f5c98f5d0b3d550.png

เลือกฐานข้อมูล quickstart_db ใหม่จากรายการแบบเลื่อนลง แล้วใช้ผู้ใช้และรหัสผ่านเดิม

3171ebd8a95f1306.png

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

6. ข้อมูลตัวอย่าง

ตอนนี้คุณต้องสร้างออบเจ็กต์ในฐานข้อมูลและโหลดข้อมูล คุณจะใช้ชุดข้อมูลของบริษัท Cymbal Shipping ซึ่งเป็นบริษัทสมมติ โดยมีข้อมูลสมมติเกี่ยวกับสินค้า รถบรรทุก คำขอ และการเดินทางของรถบรรทุก รวมถึงคนขับรถสมมติ

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

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

ในเทอร์มินัล Google Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
gcloud storage buckets create gs://$PROJECT_ID-import --project=$PROJECT_ID --location=$REGION
gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-import --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" --role=roles/storage.objectViewer

โหลดข้อมูล

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

คัดลอกข้อมูลที่ส่งออกจาก SQL ที่บีบอัดไปยังที่เก็บข้อมูลใหม่

REPO_NAME="codelabs"
SOURCE_DIR="alloydb-ai-mcp"
cd ~/$REPO_NAME/$SOURCE_DIR
gcloud storage cp ~/$REPO_NAME/$SOURCE_DIR/postgres_dump.sql.gz  gs://$PROJECT_ID-import

จากนั้นโหลดข้อมูลไปยังฐานข้อมูล quickstart_db โดยทำดังนี้

PROJECT_ID=$(gcloud config get-value project)
CLUSTER_NAME=alloydb-aip-01
REGION=us-central1
gcloud alloydb clusters import $CLUSTER_NAME  --region=us-central1 --database=quickstart_db --gcs-uri=gs://$PROJECT_ID-import/postgres_dump.sql.gz --project=$PROJECT_ID --sql

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

7. ทำงานกับ Data Agent

มาเริ่มจาก AI Agent ตัวอย่างที่สร้างขึ้นโดยใช้ Google ADK สำหรับ Python และแสดงวิธีกำหนดค่าให้ทำงานกับเซิร์ฟเวอร์ MCP ของ Google Cloud สำหรับ AlloyDB กัน

ตรวจสอบซอร์สโค้ดของเอเจนต์

ในที่เก็บที่โคลนแล้ว ให้ตรวจสอบโค้ดของ Agent โดยใช้โปรแกรมแก้ไข Google Cloud Shell

REPO_NAME="codelabs"
SOURCE_DIR="alloydb-ai-mcp"
edit ~/$REPO_NAME/$SOURCE_DIR/cymbal_logistic/data_agent/agent.py

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

# Google Cloud MCP Server for AlloyDB

MCP_SERVER_URL = "https://alloydb.googleapis.com/mcp"
creds, project_id = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
if not creds.valid:
    creds.refresh(GoogleAuthRequest())

print(f"Authenticated as project: {project_id}")

# 2. Configure MCP Toolset
# We use StreamableHTTPConnectionParams to pass the auth header
headers = {
    "Authorization": f"Bearer {creds.token}",
    "X-Goog-User-Project": project_id
}
    
connection_params = StreamableHTTPConnectionParams(
    url=MCP_SERVER_URL,
    headers=headers,
    timeout=300.0,
    sse_read_timeout=600.0
)

mcp_toolset = McpToolset(connection_params=connection_params)

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

MODEL_ID = "gemini-3-flash-preview"
cluster_name="alloydb-aip-01"
instance_name="alloydb-aip-01-pr"
location="us-central1"
database_name="quickstart_db"

# Agent configuration

root_agent = Agent(
    model=MODEL_ID,
    name='root_agent',
    description='A helpful assistant for analyst requests.',
    instruction=f"""
    Answer user questions to the best of your knowledge using provided tools.
    Do not try to generate non-existent data but use the grounded data from the database.
    When you answer questions about Cymbal Logistic activity
    use the toolset to run query in the AlloyDB cluster {cluster_name} instance {instance_name} in the location {location}
    in the project {project_id} in the database {database_name}
    Use ai schema to use AI functions and models like gemini-3-flash-preview with the functions from the schema.
    """,
    tools=[mcp_toolset],
)

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

curl -s -X POST http://alloydb.googleapis.com/mcp \
  -H "Content-Type: application/json" \
  -d @- <<EOF | jq -r '.result.tools[].name'
{
  "id": "my_id_01",
  "jsonrpc": "2.0",
  "method": "tools/list"
}
EOF

เริ่มการทำงานของ Agent

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

ก่อนอื่น ให้ติดตั้งแพ็กเกจที่จำเป็นทั้งหมดสำหรับ Python โดยใช้เครื่องมือจัดการแพ็กเกจ uv

REPO_NAME="codelabs"
SOURCE_DIR="alloydb-ai-mcp"
cd ~/$REPO_NAME/$SOURCE_DIR/cymbal_logistic
uv sync

เมื่อติดตั้งแพ็กเกจทั้งหมดแล้ว คุณต้องเพิ่มไฟล์ .env ลงในไดเรกทอรีของเอเจนต์เพื่อสั่งให้ใช้ Vertex AI สำหรับการสื่อสารทั้งหมดกับโมเดล AI

echo "GOOGLE_GENAI_USE_VERTEXAI=true" > data_agent/.env
echo "GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project -q)" >> data_agent/.env
echo "GOOGLE_CLOUD_LOCATION=global" >> data_agent/.env

จากนั้นคุณจะเริ่ม Agent ได้

uv run adk web --allow_origins 'regex:https://.*\.cloudshell\.dev'

คุณควรเห็นเอาต์พุตคล้ายกับเอาต์พุตต่อไปนี้ที่มีปลายทาง เช่น http://127.0.0.1:8000

4aa60270e31efe37.jpeg

คุณคลิก URL นั้นใน Cloud Shell ได้ และระบบจะเปิดหน้าต่างแสดงตัวอย่างในแท็บเบราว์เซอร์แยกต่างหาก ซึ่งคุณเลือก data_agent จากรายการแบบเลื่อนลงทางด้านซ้ายได้

811a5b12534432d8.jpeg

ในอินเทอร์เฟซเว็บของ ADK คุณสามารถโพสต์คำถามที่ด้านขวาล่างและดูขั้นตอนการดำเนินการทั้งหมด รวมถึงการติดตามสำหรับแต่ละขั้นตอนทางด้านขวา

8. ทดสอบ MCP ของ AlloyDB ด้วย Agent

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

8c7058ed2b8c2dd8.jpeg

คุณกำลังทำงานกับข้อมูลการดำเนินงานของบริษัทขนส่งซึ่งมีข้อมูลเกี่ยวกับคำขอการจัดส่ง รถบรรทุก คนขับ และการเดินทางที่คนขับดำเนินการ คำถามแรกคือจำนวนการเดินทางที่ดำเนินการในเดือนกุมภาพันธ์ 2026

ในช่องป้อนข้อมูลที่ด้านขวาล่าง ให้พิมพ์ข้อความต่อไปนี้แล้วกด Enter

Hello, can you tell me how many trips we've done in February this year? 

เอเจนต์จะทำงานโดยการเรียกใช้เครื่องมือหลายรายการเพื่อระบุตารางที่ถูกต้องในสคีมาและโครงสร้างตารางก่อนที่จะเรียกใช้คำสั่ง SQL ที่ถูกต้องเพื่อรับข้อมูลที่ถูกต้อง

160d758589f025f1.jpeg

ในที่สุดก็จะแสดงผลลัพธ์หลังจากสร้างคําค้นหาที่เหมาะสมและเรียกใช้ในฐานข้อมูล

จากการบันทึกในฐานข้อมูลของเรา มีการเดินทางที่เสร็จสมบูรณ์ 108 ครั้งในเดือนกุมภาพันธ์ 2026

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

9285cfe2291e085b.jpeg

ตอนนี้ให้คำขอมีความซับซ้อนมากขึ้นโดยขอให้เปรียบเทียบผลลัพธ์กับเดือนที่แล้ว

How is it in comparison in numbers and mileage with the January?

โดยจะแสดงผลลัพธ์ด้วยการเรียกใช้การค้นหาต่างๆ ที่วิเคราะห์ผลลัพธ์และแสดงความแตกต่างของจำนวนการเดินทางและระยะทาง

In comparison to January 2026, February saw a slight decrease in both the number of trips and the total mileage:

January 2026: 114 trips with a total mileage of 185,597 km.
February 2026: 108 trips with a total mileage of 177,893 km.
This represents a decrease of 6 trips and 7,704 km in mileage for February compared to January.

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

หยุด Agent โดยกด ctrl+c ในเทอร์มินัล คุณปิดแท็บเบราว์เซอร์ด้วยอินเทอร์เฟซเว็บของ ADK ได้

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

9. แอปพลิเคชันตัวอย่าง

ในที่เก็บที่โคลนเดียวกัน เรามีแอปพลิเคชันตัวอย่างสำหรับบริษัท Cymbol Logistic แอปพลิเคชันนี้ใช้เฟรมเวิร์ก Python ของ Mesop ของ Google

คุณวิเคราะห์โค้ดของแอปพลิเคชันได้โดยเปิดไฟล์ app.py ใน Cloud Shell Editor

REPO_NAME="codelabs"
SOURCE_DIR="alloydb-ai-mcp"
edit ~/$REPO_NAME/$SOURCE_DIR/cymbal_logistic/app.py

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

def run_query_sync(request_text, cluster_name, location, instance_name, database_name, project_id, session_id, summary):
    local_runner = FrontendRunner()
    
    instruction = f"""
    Answer user questions to the best of your knowledge using provided tools.
    Do not try to generate non-existent data but use the grounded data from the database.
    When you answer questions about Cymbal Logistic activity
    use the toolset to run query in the AlloyDB cluster {cluster_name} instance {instance_name} in the location {location}
    in the project {project_id} in the database {database_name}
    Use ai schema to use AI functions and models like gemini-3-flash-preview with the functions from the schema.
    """
    ...

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

เรียกใช้ใน Cloud Shell

REPO_NAME="codelabs"
SOURCE_DIR="alloydb-ai-mcp"
cd ~/$REPO_NAME/$SOURCE_DIR/cymbal_logistic
uv run mesop app.py --port=8080

จากนั้นใช้การแสดงตัวอย่างเว็บใน Google Cloud Shell โดยคลิก http://localhost:8080

ea2315883c3e583a.jpeg

ซึ่งจะเปิดแท็บใหม่ในเบราว์เซอร์พร้อมอินเทอร์เฟซของแอปพลิเคชัน

คลิกช่องทําเครื่องหมาย "เปิดใช้เอาต์พุตการแก้ไขข้อบกพร่อง" ที่ด้านขวาบน แล้วพิมพ์คําถาม เช่น คําถามต่อไปนี้

What was the average speed for each driver last month? List top 5 fasters drivers ranking them by the average speed. Show the name, distance and average speed for each of them.

236bf33373ee8bf.jpeg

จากนั้นกดปุ่ม Submit Request

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

4130ea489058d102.jpeg

คุณสามารถทดสอบความสามารถของเอเจนต์และแอปได้โดยลองถามคำถามเชิงวิเคราะห์ต่างๆ

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

10. ฟังก์ชัน AI ของ AlloyDB

ฟังก์ชัน AI ของ AlloyDB ช่วยให้การกรองและการจัดอันดับข้อความและข้อมูลแบบหลายรูปแบบ (โดยเฉพาะรูปภาพ) เป็นไปอย่างชาญฉลาด และนำความสามารถของ Gemini มาใช้กับคำค้นหาของคุณ โดยเฉพาะอย่างยิ่ง ฟังก์ชัน AI.IF และ AI.RANK ของ AlloyDB AI สามารถปรากฏในคำสั่ง SQL พร้อมกับโอเปอเรเตอร์ SQL ทั่วไป (ตัวกรอง การรวม การรวม ฯลฯ)

ก่อนใช้ฟังก์ชัน AI เราจะตรวจสอบการค้นหาและการรวบรวมโดยใช้วิธีการแบบ "คลาสสิก" ลองใช้พรอมต์ต่อไปนี้

Can you analyze the activity for the last 5 months and evaluate drivers for the most positive customer feedbacks. Give me top 5 drivers listing names, distance and years of experience for each driver.

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

SELECT 
    d.first_name || ' ' || d.last_name as driver_name,
    SUM(sr.distance_km) as total_distance,
    d.experience_years,
    COUNT(cf.feedback_id) as positive_feedback_count

FROM drivers d

JOIN truck_trips tt ON d.driver_id = tt.driver_id

JOIN customer_feedback cf ON tt.trip_id = cf.trip_id

JOIN shipping_requests sr ON tt.request_id = sr.request_id

WHERE tt.arrival_time >= '2025-12-01' 
AND tt.arrival_time < '2026-05-01'
  
AND cf.rating >= 4

GROUP BY d.driver_id, d.first_name, d.last_name, d.experience_years

ORDER BY positive_feedback_count DESC, total_distance DESC

LIMIT 5;

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

โอเปอเรเตอร์ AI.RANK

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

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

Can you find the top 5 fastest drivers in the last month and rank them by the feedback using the AI.RANK function?  Give me top drivers  names, distance, years of experience and rank for each driver.

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

477342ca1aaf1c13.jpeg

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

WITH fastest_drivers AS (
    SELECT 
        d.driver_id,
        d.first_name || ' ' || d.last_name as driver_name,
        d.experience_years,
        SUM(sr.distance_km) as total_distance,
        AVG(sr.distance_km / (NULLIF(EXTRACT(EPOCH 
FROM (tt.arrival_time - tt.departure_time)), 0) / 3600)) as avg_speed,
        COALESCE(STRING_AGG(cf.feedback_text, ' | '), 'No feedback') as feedbacks,
        ROW_NUMBER() OVER (
ORDER BY AVG(sr.distance_km / (NULLIF(EXTRACT(EPOCH 
FROM (tt.arrival_time - tt.departure_time)), 0) / 3600)) DESC) - 1 as row_idx
    
FROM drivers d
    
JOIN truck_trips tt ON d.driver_id = tt.driver_id
    
JOIN shipping_requests sr ON tt.request_id = sr.request_id
    LEFT 
JOIN customer_feedback cf ON tt.trip_id = cf.trip_id
    
WHERE tt.arrival_time >= '2026-04-04'
      
AND tt.arrival_time IS NOT NULL 
      
AND tt.departure_time IS NOT NULL
      
AND tt.arrival_time > tt.departure_time
    
GROUP BY d.driver_id, d.first_name, d.last_name, d.experience_years
    
ORDER BY avg_speed DESC
    
LIMIT 5
)
SELECT 
    f.driver_name,
    f.total_distance,
    f.experience_years,
    f.avg_speed,
    f.feedbacks,
    (SELECT r.score 
FROM ai.rank(
        'semantic-ranker-fast-004',
        'excellent customer service, professional, friendly, fast, 
and reliable delivery reviews',
        ARRAY[f.feedbacks],
        1
    ) r 
LIMIT 1) as feedback_score

FROM fastest_drivers f

ORDER BY feedback_score DESC;

คุณยังคงทดสอบแอปพลิเคชันและตรวจสอบคําค้นหาเพื่อดูว่าเอเจนต์ได้ผลลัพธ์สุดท้ายมาได้อย่างไร

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

11. ล้างสภาพแวดล้อม

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

ทำลายอินสแตนซ์และคลัสเตอร์ 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.                                                                                                                                                                                                                                                            

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

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

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

  • วิธีสร้างคลัสเตอร์ AlloyDB และนำเข้าข้อมูลตัวอย่าง
  • วิธีเปิดใช้ AlloyDB Data Access API
  • วิธีเปิดใช้ Google Cloud MCP สำหรับ AlloyDB NL
  • วิธีเพิ่ม Google Cloud MCP สำหรับ AlloyDB ลงในเอเจนต์ ADK
  • วิธีใช้ Google Cloud MCP สำหรับ AlloyDB ในแอปพลิเคชัน
  • วิธีใช้เอเจนต์กับ AlloyDBMCP สำหรับการวิเคราะห์

13. แบบสำรวจ

เอาต์พุต:

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

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