1. บทนำ

ในแล็บก่อนหน้านี้ คุณได้รวบรวมบันทึกการจัดส่งที่กระจัดกระจายและติดตามเครื่องส่งสัญญาณของสินค้าไปยังนิวยอร์ก แต่บันทึกการมาถึงแสดงให้เห็นว่าคอนเทนเนอร์ถูกเปลี่ยนเส้นทางทันทีเพื่อหลีกเลี่ยงการตรวจจับของศุลกากร ตอนนี้ร่องรอยได้นำคุณไปยังท่าเรือริโอเดจาเนโร ซึ่งเป็นท่าเรือขนาดใหญ่ที่มีคอนเทนเนอร์หลายพันตู้ การค้นหาคอนเทนเนอร์ที่ถูกต้องจากคอนเทนเนอร์อื่นๆ หลายพันตู้เป็นเรื่องยาก
ในแล็บนี้ คุณจะได้ใช้ความสามารถด้าน AI ในตัวของ BigQuery เพื่อ "อ่าน" รูปภาพความปลอดภัยของพอร์ตที่ไม่มีโครงสร้าง และตรวจหาความผิดปกติทางความร้อนในข้อมูลเซ็นเซอร์ ทั้งหมดนี้ใช้ SQL มาตรฐาน จากนั้นคุณจะส่งออกการฝังเวกเตอร์ไปยัง AlloyDB และเรียกใช้การค้นหาเวกเตอร์เพื่อจับคู่สัญญาณการวัดและส่งข้อมูลที่กระจัดกระจายกับคอนเทนเนอร์ที่ขาดหายไป
สิ่งที่คุณต้องทำ
- สแกนรูปภาพความปลอดภัยของพอร์ตเพื่อระบุคอนเทนเนอร์ที่ถูกขโมยโดยใช้ BigQuery AI
- ตรวจหาความผิดปกติของอุณหภูมิโดยใช้ BigQuery AI เพื่อยืนยันว่าตู้คอนเทนเนอร์ถูกขโมย ไม่ใช่แค่หาไม่เจอ
- สร้างการฝังเวกเตอร์และโหลดลงใน AlloyDB เพื่อการค้นหาแบบเรียลไทม์
- จับคู่สัญญาณบีคอนการวัดระยะไกลที่กระจัดกระจายเพื่อค้นหาคอนเทนเนอร์ที่ถูกขโมยโดยใช้การค้นหาเวกเตอร์
- สํารวจข้อมูลการตรวจสอบด้วยภาษาธรรมชาติโดยใช้ข้อมูลวิเคราะห์เชิงสนทนา
สิ่งที่คุณต้องมี
- เว็บเบราว์เซอร์ เช่น Chrome
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- มีความรู้พื้นฐานเกี่ยวกับ SQL และคอนโซล Google Cloud
Codelab นี้มีไว้สำหรับนักพัฒนาแอประดับกลาง
ทรัพยากรที่สร้างในโค้ดแล็บนี้ควรมีค่าใช้จ่ายน้อยกว่า $5
2. ก่อนที่คุณจะเริ่มต้น
เริ่มต้น Cloud Shell
คุณจะใช้ Google Cloud Shell เพื่อดาวน์โหลดโค้ด เรียกใช้สคริปต์การตั้งค่า และทำให้แอปพลิเคชันใช้งานได้
- ในแท็บเบราว์เซอร์ใหม่ ให้เปิด Cloud Shell: shell.cloud.google.com
- เมื่อเชื่อมต่อแล้ว ให้ตั้งค่ารหัสโปรเจ็กต์และยืนยันสภาพแวดล้อม
gcloud config set project <<YOUR_PROJECT_ID>>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
คุณควรเห็นข้อความที่คล้ายกับข้อความต่อไปนี้
Your active configuration is: [cloudshell-####] Updated property [core/project]
โคลนที่เก็บ
โคลนที่เก็บ Codelab ไปยังสภาพแวดล้อม Cloud Shell โดยทำดังนี้
cd ~/
git clone --filter=blob:none --no-checkout https://github.com/GoogleCloudPlatform/devrel-demos.git
cd ~/devrel-demos
git sparse-checkout init --cone
git sparse-checkout set codelabs/bigquery-alloydb-insights
git checkout main
cd codelabs/bigquery-alloydb-insights/
เปิดใช้ API
เรียกใช้คำสั่งนี้ใน Cloud Shell เพื่อเปิดใช้ API ที่จำเป็นทั้งหมดสำหรับ Lab นี้
gcloud services enable \
aiplatform.googleapis.com \
bigquery.googleapis.com \
bigqueryconnection.googleapis.com \
alloydb.googleapis.com
เมื่อดำเนินการสำเร็จ คุณควรเห็นข้อความที่คล้ายกับข้อความต่อไปนี้
Operation "operations/..." finished successfully.
3. ตั้งค่าสภาพแวดล้อม
ก่อนที่จะวิเคราะห์รูปภาพและข้อมูลการวัดและส่งข้อมูลได้ คุณต้องตั้งค่าโครงสร้างพื้นฐานสำหรับห้องทดลองนี้ คุณจะเรียกใช้สคริปต์ 2 รายการ โดยรายการหนึ่งจะเริ่มการจัดสรร AlloyDB ในเบื้องหลัง และอีกรายการจะสร้างทรัพยากร BigQuery ทั้งหมดที่คุณต้องการ
ขั้นตอนที่ 1: เริ่มการติดตั้งใช้งาน AlloyDB (เบื้องหลัง)
การจัดสรรคลัสเตอร์ AlloyDB ใช้เวลาประมาณ 10 นาที ดังนั้นคุณจะต้องเริ่มการจัดสรรก่อนและปล่อยให้ทำงานในเบื้องหลังขณะที่คุณทำงานในส่วน BigQuery สคริปต์จะบันทึกการตั้งค่าโปรเจ็กต์ที่ใช้งานอยู่ลงในไฟล์ .env ในเครื่องโดยอัตโนมัติ เพื่อให้ระบบบันทึกการกำหนดค่าไว้แม้ว่าเทอร์มินัล Cloud Shell จะปิดหรือรีสตาร์ทก็ตาม
chmod +x scripts/setup_alloydb.sh
nohup ./scripts/setup_alloydb.sh > /dev/null 2>&1 &
echo "AlloyDB deployment started in background (PID: $!)"
ขั้นตอนที่ 2: เรียกใช้สคริปต์การตั้งค่า
สคริปต์นี้จะสร้างชุดข้อมูล BigQuery, การเชื่อมต่อทรัพยากรระบบคลาวด์, การให้สิทธิ์ IAM, ถังเก็บข้อมูล GCS และโหลดข้อมูลเซ็นเซอร์ทั้งหมดที่คุณจะวิเคราะห์ในแล็บนี้ นอกจากนี้ ยังจะอ่านและยืนยันตัวแปรสภาพแวดล้อมที่บันทึกไว้ในไฟล์ .env ด้วย
chmod +x scripts/setup_lab.sh
./scripts/setup_lab.sh
สคริปต์จะใช้เวลาประมาณ 1 นาทีในการเรียกใช้ เมื่อเสร็จแล้ว คุณจะเห็นสรุปทุกอย่างที่ AI สร้างขึ้น
📝 หมายเหตุเกี่ยวกับการรีเซ็ตสภาพแวดล้อม หากเซสชัน Cloud Shell หมดเวลาหรือรีสตาร์ทเมื่อใดก็ตามในระหว่างแล็บนี้ คุณจะกู้คืนตัวแปรเทอร์มินัลได้ทันทีโดยเรียกใช้คำสั่งต่อไปนี้
source scripts/setenv.sh
ขั้นตอนที่ 3: เปิดใช้ Cloud Shell Editor
คุณใช้เทอร์มินัล Cloud Shell มาจนถึงตอนนี้แล้ว ตอนนี้ให้เปลี่ยนไปใช้ Cloud Shell Editor แบบเต็ม ซึ่งจะให้พื้นที่ทำงานที่คล้ายกับ VS Code พร้อมการรองรับ BigQuery ในตัว
- ในแผงเทอร์มินัล Cloud Shell ที่ด้านล่างของหน้าจอ ให้คลิกปุ่มเปิดตัวแก้ไขเพื่อเปิดพื้นที่ทำงานของ Cloud Shell Editor

ขั้นตอนที่ 4: ติดตั้งส่วนขยาย Data Agent Kit
ส่วนขยายชุดเครื่องมือตัวแทนข้อมูล Google Cloud ช่วยให้ผสานรวมกับบริการข้อมูลของ Google Cloud ได้อย่างลึกซึ้งภายในเอดิเตอร์โดยตรง ซึ่งช่วยให้คุณโต้ตอบกับ BigQuery, AlloyDB, Cloud Storage และอื่นๆ ได้โดยไม่ต้องเปลี่ยนบริบท
- ใน Cloud Shell Editor ให้คลิกไอคอนส่วนขยายในแถบกิจกรรมทางด้านซ้ายสุดของหน้าจอ (มีลักษณะเป็นสี่เหลี่ยม 4 รูป)
- พิมพ์
googlecloudtools.datacloudในแถบค้นหาที่ด้านบนของแผงส่วนขยาย - ค้นหาส่วนขยายชื่อ Google Cloud Data Agent Kit ที่เผยแพร่โดย Google Cloud
- คลิกปุ่มติดตั้ง
- ข้อความแจ้งจะปรากฏขึ้นเพื่อถามว่า "คุณเชื่อถือผู้เผยแพร่'googlecloudtools' และส่วนขยายของผู้เผยแพร่รายนี้ไหม " คลิกเชื่อถือผู้เผยแพร่และติดตั้งเพื่อดำเนินการต่อ

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

- เลือก BigQuery และ AlloyDB ในส่วนการกำหนดค่า MCP แล้วคลิกเริ่มต้นใช้งาน
ขั้นตอนที่ 6: สำรวจตัวเลือกการกำหนดค่า
เมื่อตั้งค่าเสร็จแล้ว คุณจะเข้าสู่แดชบอร์ด "เริ่มต้นใช้งานชุดเครื่องมือ Data Agent ของ Google Cloud"
- คลิกเริ่มต้นใช้งานในส่วน "การตั้งค่าและการกำหนดค่า"
- ซึ่งจะเปิดแผงการกำหนดค่า Data Agent สำรวจแท็บต่างๆ ดังนี้
- โปรเจ็กต์และภูมิภาค: ยืนยันรหัสโปรเจ็กต์ที่เลือกและตรวจสอบว่าได้เปิดใช้ API ที่จำเป็น (Cloud Storage API, BigQuery API, Catalog API และ AlloyDB API) แล้ว
- BigQuery: กำหนดค่าตำแหน่งเริ่มต้นสำหรับการค้นหา BigQuery ใช้ภูมิภาค
us-central1 - กำหนดค่าเซิร์ฟเวอร์ MCP: ดูเซิร์ฟเวอร์ MCP ที่เปิดใช้ (BigQuery, Notebook, AlloyDB ฯลฯ) ซึ่งอนุญาตให้เอเจนต์ AI โต้ตอบกับข้อมูลของคุณได้อย่างปลอดภัย
- ทักษะ: สำรวจทักษะที่สร้างไว้ล่วงหน้าซึ่งมอบความสามารถเฉพาะทางให้กับเอเจนต์สำหรับงานข้อมูลที่ซับซ้อน

ขั้นตอนที่ 7: ยืนยันด้วย BigQuery
ยืนยันว่าทุกอย่างทำงานได้โดยการเรียกใช้การค้นหาอย่างรวดเร็วกับชุดข้อมูลสาธารณะ
- ในแผงชุดเครื่องมือ Data Agent ทางด้านซ้าย ให้ขยายส่วน BigQuery แล้วคลิกการค้นหาใหม่เพื่อเปิดแท็บตัวแก้ไขการค้นหาใหม่
- บันทึกไฟล์โดยกด
Ctrl+S(Windows/Linux) หรือCmd+S(macOS) แล้วตั้งชื่อเป็นbigqueryแท็บนี้จะใช้สำหรับการดำเนินการ BigQuery ทั้งหมด - คลิกการตั้งค่าการค้นหาขณะที่แท็บ
bigquery.sqlเปิดอยู่ เลือก BigQuery เป็นแหล่งข้อมูล แล้วคลิกบันทึก

- เรียกใช้การค้นหาต่อไปนี้กับชุดข้อมูลสาธารณะ
SELECT
term,
MIN(rank) AS peak_rank,
ROUND(AVG(score)) AS avg_score
FROM `bigquery-public-data.google_trends.top_terms`
WHERE refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY)
GROUP BY term
ORDER BY peak_rank ASC
LIMIT 10;
- คุณควรเห็นคำค้นหายอดนิยม 10 อันดับแรกใน Google Search จาก 2-3 วันที่ผ่านมา หากผลลัพธ์ปรากฏขึ้น แสดงว่าส่วนขยายเชื่อมต่อและพร้อมใช้งานแล้ว

ตอนนี้ลองใช้การค้นหาเทียบกับข้อมูลในห้องทดลองที่สคริปต์การตั้งค่าเพิ่งสร้างขึ้น แทนที่การค้นหาที่มีอยู่ด้วยการค้นหานี้
SELECT * FROM `lost_cargo_dataset.telemetry_data` LIMIT 5;
คุณควรเห็นรายการบันทึกการวัดและส่งข้อมูลทางไกลที่มีคอลัมน์ shipment_id และ telemetry_string นี่คือข้อมูลที่คุณจะวิเคราะห์ตลอดทั้งแล็บ
สรุปส่วน: คุณเริ่มการติดตั้งใช้งาน AlloyDB ในเบื้องหลัง เรียกใช้สคริปต์การตั้งค่า และกำหนดค่า Cloud Shell Editor ด้วยส่วนขยาย Data Agent Kit
4. การสแกนฟุตเทจความปลอดภัย
ทีมสืบสวนได้กู้คืนฟุตเทจจากกล้องวงจรปิดที่ท่าเรือรีโอเดจาเนโร ซึ่งแสดงให้เห็นแถวของตู้คอนเทนเนอร์ จากห้องทดลอง 1 คุณจะทราบว่าคอนเทนเนอร์เป้าหมายคือสีแดง ตอนนี้คุณต้องระบุให้แน่ชัดว่าถังสีแดงถังใด
คุณจะสร้างตารางออบเจ็กต์ที่ช่วยให้ BigQuery "เห็น" รูปภาพความปลอดภัยใน Cloud Storage จากนั้นใช้ฟังก์ชัน AI.GENERATE เพื่อแจ้งให้ Gemini แยก Structured Data จากแต่ละรูปภาพ
ขั้นตอนที่ 1: สร้างตารางออบเจ็กต์
ตารางออบเจ็กต์คือตาราง BigQuery พิเศษที่ทำหน้าที่เป็นดัชนีสำหรับไฟล์ที่ไม่มีโครงสร้าง (รูปภาพ, PDF, เสียง) ที่จัดเก็บไว้ใน Cloud Storage โดยจะไม่คัดลอกไฟล์ลงใน BigQuery แต่จะสร้างการอ้างอิงที่ค้นหาได้เพื่อให้ฟังก์ชัน AI "เห็น" ไฟล์เหล่านั้น
ในแท็บ bigquery.sql ในเอดิเตอร์ ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างตารางออบเจ็กต์ที่ชี้ไปยังรูปภาพการรักษาความปลอดภัยของพอร์ตใน Bucket ของโปรเจ็กต์
SET @@location = 'us-central1';
EXECUTE IMMEDIATE CONCAT("""
CREATE OR REPLACE EXTERNAL TABLE `lost_cargo_dataset.port_security_images`
WITH CONNECTION `us-central1.lost_cargo_conn`
OPTIONS (
object_metadata = 'SIMPLE',
uris = ['gs://""", @@project_id, """-lab2/images/*']
);
""");
มาดูคร่าวๆ ว่าตอนนี้ BigQuery มองเห็นอะไรได้บ้าง
SELECT uri, content_type FROM `lost_cargo_dataset.port_security_images` LIMIT 5;
แต่ละแถวแสดงไฟล์รูปภาพ 1 ไฟล์ใน Cloud Storage ตอนนี้ BigQuery สามารถส่งต่อรูปภาพเหล่านี้ไปยังโมเดล AI ได้โดยตรง
ขั้นตอนที่ 2: วิเคราะห์รูปภาพความปลอดภัย
ตอนนี้ให้ใช้ฟังก์ชัน AI.GENERATE ของ BigQuery เพื่อวิเคราะห์รูปภาพความปลอดภัยแต่ละรูป การค้นหา SQL เดียวนี้จะแจ้งให้ Gemini ตรวจสอบทุกรูปภาพและแสดง Structured Data
SELECT
uri,
AI.GENERATE(
(
'Examine this port security image. Identify any shipping container IDs visible on the container and provide a one-word color of the container.',
ref
),
output_schema => 'detected_container_id STRING, color STRING'
).* EXCEPT (full_response, status)
FROM `lost_cargo_dataset.port_security_images`;
ขั้นตอนที่ 3: ระบุคอนเทนเนอร์เป้าหมาย
ตรวจสอบผลลัพธ์ มองหาแถวที่คอลัมน์ color แสดง "แดง" (หรือสีแดงรูปแบบใดรูปแบบหนึ่ง) จดdetected_container_id เป้าหมายของคุณคือ MV-CAPYBARA-003
ขั้นตอนที่ 4: ยืนยันการจับคู่ภาพ
หากต้องการดูรูปภาพจริงที่วิเคราะห์โดยไม่ต้องออกจากโปรแกรมแก้ไข ให้ทำดังนี้
- คลิก Cloud Storage ในแผงชุดเครื่องมือ Data Agent ทางด้านซ้าย
- ขยายที่เก็บข้อมูล (
YOUR_PROJECT_ID-lab2/images/) แล้วคลิกไฟล์รูปภาพที่สอดคล้องกับคอนเทนเนอร์สีแดงเพื่อดูในเอดิเตอร์โดยตรง

สรุปส่วน: คุณสร้างตารางออบเจ็กต์เพื่อให้ BigQuery เข้าถึงรูปภาพความปลอดภัยของพอร์ต จากนั้นใช้ AI.GENERATE เพื่อดึงข้อมูลคอนเทนเนอร์ที่มีโครงสร้างจากแต่ละรูปภาพ คอนเทนเนอร์สีแดงได้รับการระบุเป็น MV-CAPYBARA-003
5. ยืนยันการขโมย
คุณระบุว่าคอนเทนเนอร์ที่หายไปคือ MV-CAPYBARA-003 แต่คอนเทนเนอร์ถูกขโมยหรือแค่หาไม่เจอ บันทึก Manifest ระบุว่าคอนเทนเนอร์นี้จอดอยู่ข้างเซ็นเซอร์สิ่งแวดล้อม SENS-99 หากขโมยตั้งใจปิดใช้ชุดทำความเย็นในตัวของตู้คอนเทนเนอร์ก่อนเคลื่อนย้าย SENS-99 อาจบันทึกการระบายความร้อนที่เพิ่มขึ้นอย่างฉับพลัน
มาใช้การตรวจจับความผิดปกติเพื่อพิสูจน์ว่ามีการดัดแปลงคอนเทนเนอร์กัน
- ก่อนอื่น ให้ดูที่เกณฑ์พื้นฐานในอดีต ค่าที่อ่านได้จาก
SENS-99ในช่วงหลายชั่วโมงที่ผ่านมาเป็นค่าปกติ ดังนี้
SELECT * FROM `lost_cargo_dataset.thermal_history`
ORDER BY reading_time DESC
LIMIT 50;
สังเกตว่าอุณหภูมิจะอยู่ในช่วงแคบๆ ประมาณ 75-78°F ซึ่งถือเป็นอุณหภูมิปกติ
- ตอนนี้มาดูค่าที่อ่านได้ชุดปัจจุบันจากเซ็นเซอร์เดียวกัน
SELECT * FROM `lost_cargo_dataset.thermal_current`
ORDER BY thermal_reading DESC
LIMIT 50;
คุณเห็นค่า 148.4°F ที่อยู่ใกล้ด้านบนไหม ส่วนอื่นๆ ดูปกติ การเพิ่มขึ้นอย่างรวดเร็วนี้อาจบ่งบอกว่าหน่วยทำความเย็นล้มเหลวหรือมีการดัดแปลงโดยเจตนา มาดูกัน
- เรียกใช้การตรวจหาความผิดปกติ
AI.DETECT_ANOMALIESของ BigQuery ใช้โมเดลพื้นฐาน TimesFM ที่ฝึกไว้ล่วงหน้าเพื่อวิเคราะห์รูปแบบอนุกรมเวลาและแจ้งค่าผิดปกติโดยอัตโนมัติ โดยไม่ต้องฝึกโมเดล
SELECT *
FROM AI.DETECT_ANOMALIES(
TABLE `lost_cargo_dataset.thermal_history`,
TABLE `lost_cargo_dataset.thermal_current`,
data_col => 'thermal_reading',
timestamp_col => 'reading_time',
id_cols => ['sensor_id']
)
WHERE is_anomaly = TRUE;
- ตรวจสอบผลลัพธ์ ค่าที่อ่านได้ 148.4°F ควรได้รับการแจ้งว่าผิดปกติโดยมีความน่าจะเป็นสูงที่จะผิดปกติ ซึ่งยืนยันว่ามีสิ่งผิดปกติเกิดขึ้นใกล้กับพื้นที่คอนเทนเนอร์
สรุปส่วน: คุณใช้ฟังก์ชัน AI.DETECT_ANOMALIES ของ BigQuery เพื่อใช้ประโยชน์จากโมเดล TimesFM ที่ฝึกไว้ล่วงหน้า การเรียกใช้คำค้นหา SQL เพียงรายการเดียวจะช่วยให้คุณระบุค่าผิดปกติและแยกเหตุการณ์การดัดแปลงที่ผิดปกติได้โดยอัตโนมัติโดยไม่ต้องเขียนโค้ดแมชชีนเลิร์นนิงที่ซับซ้อนหรือฝึกโมเดลตั้งแต่ต้น
6. การเตรียมระบบติดตาม
เรายืนยันได้ว่าตู้คอนเทนเนอร์ถูกขโมยและไม่ได้อยู่ในรีโอเดจาเนโรอีกต่อไป คอนเทนเนอร์แต่ละรายการในกองยานจะออกอากาศสัญญาณบีคอนการวัดและส่งข้อมูล ซึ่งได้แก่ ค่าที่อ่านจากเซ็นเซอร์, ข้อมูล GPS และบันทึกสถานะ หากสัญญาณบีคอนของคอนเทนเนอร์ที่ถูกขโมยยังคงส่งสัญญาณอยู่ คุณสามารถจับคู่กับลายเซ็นที่รู้จักเพื่อค้นหาคอนเทนเนอร์ได้
BigQuery ทำงานวิเคราะห์ที่คุณทำมาจนถึงตอนนี้ได้ดี แต่การระบุตำแหน่งคอนเทนเนอร์แบบเรียลไทม์ต้องใช้คำค้นหาการทำงานที่มีเวลาในการตอบสนองต่ำ AlloyDB ซึ่งเป็นฐานข้อมูลที่เข้ากันได้กับ PostgreSQL ที่มีการจัดการครบวงจร สร้างขึ้นมาเพื่อสิ่งนี้โดยเฉพาะ นั่นคือการค้นหาเวกเตอร์ที่รวดเร็วพอสำหรับระบบติดตามแบบเรียลไทม์ คุณจะโหลดการฝังเทเลเมตรีลงใน AlloyDB และใช้เพื่อจับคู่สัญญาณบีคอน
คลัสเตอร์ AlloyDB ที่คุณเริ่มทำงานในเบื้องหลังก่อนหน้านี้ควรพร้อมใช้งานแล้ว มากำหนดค่าจากเอดิเตอร์โดยตรงกัน
ขั้นตอนที่ 1: เชื่อมต่อกับ AlloyDB จากตัวแก้ไข
คุณสามารถเชื่อมต่อกับ AlloyDB ได้โดยตรงโดยใช้ส่วนขยาย Data Agent Kit แทนที่จะเปลี่ยนไปใช้ Cloud Console
- ในแผงชุดเครื่องมือ Data Agent ทางด้านซ้ายในส่วน BigQuery ให้คลิกคำค้นหาใหม่เพื่อเปิดแท็บตัวแก้ไขคำค้นหาใหม่
- บันทึกไฟล์โดยกด
Ctrl+S(Windows/Linux) หรือCmd+S(macOS) และตั้งชื่อเป็นalloydbแท็บนี้จะใช้สำหรับคำค้นหา AlloyDB ทั้งหมด - คลิกไอคอนรูปเฟืองเพื่อเปิดโมดอลการตั้งค่าการค้นหา

- ในโมดอลการตั้งค่าคําค้นหา ให้เลือกฐานข้อมูลในส่วนแหล่งข้อมูล
- ในส่วนฐานข้อมูล ให้เลือก AlloyDB
- กรอกรายละเอียดการเลือกทรัพยากร
- รหัสโปรเจ็กต์: ป้อนรหัสโปรเจ็กต์ Google Cloud
- คลัสเตอร์: เลือก
lost-cargo-cluster - อินสแตนซ์: เลือก
lost-cargo-instance - ฐานข้อมูล: เลือก
postgres
- คลิกบันทึก

ขั้นตอนที่ 2: เปิดใช้ส่วนขยาย Vector และสร้างตาราง
ตอนนี้คุณเชื่อมต่อกับ AlloyDB แล้ว คุณต้องเปิดใช้ส่วนขยาย AI ที่จำเป็นและสร้างตารางที่จะรับข้อมูลการวัดและส่งข้อมูลทางไกลที่ฝังไว้
- ในแท็บ
.sqlที่ใช้งานอยู่ ให้วางคำสั่งต่อไปนี้เพื่อเปิดใช้ส่วนขยายที่จำเป็น
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
- ไฮไลต์ข้อความ แล้วคลิกปุ่มเรียกใช้คําค้นหา (ไอคอนเล่น) ที่ด้านขวาบนของตัวแก้ไข
- ตรวจสอบแผงเทอร์มินัลผลการค้นหาที่ด้านล่างของหน้าจอ โดยควรระบุว่า
Statement executed successfully

- จากนั้น ให้แทนที่ข้อความในเอดิเตอร์ด้วยข้อความต่อไปนี้เพื่อสร้างตารางการวัดและส่งข้อมูล
CREATE TABLE IF NOT EXISTS vessel_telemetry (
entry_id SERIAL PRIMARY KEY,
shipment_id VARCHAR(50),
telemetry_string TEXT,
embedding_vector vector(768)
);
- เรียกใช้การค้นหานี้เหมือนกับการค้นหาครั้งล่าสุด ยืนยันว่าดำเนินการสำเร็จในแผงด้านล่าง
vector(768) ประเภทมาจากส่วนขยาย pgvector ที่คุณเพิ่งเปิดใช้ มิติข้อมูล 768 รายการตรงกับเอาต์พุตของโมเดล text-embedding-005 ของ Google ซึ่งคุณจะใช้ใน BigQuery เพื่อสร้างการฝัง
สรุปส่วน: คุณเชื่อมต่อกับ AlloyDB โดยตรงจากเครื่องมือแก้ไข Cloud Shell เปิดใช้ส่วนขยาย pgvector และ google_ml_integration รวมถึงสร้างตารางเป้าหมาย ตอนนี้ AlloyDB พร้อมให้บริการเป็นแบ็กเอนด์การทำงานสำหรับการจับคู่การวัดและส่งข้อมูลทางไกลแบบเรียลไทม์แล้ว
7. การสร้างดัชนีของ Search
ตอนนี้คุณต้องนำข้อมูลการวัดและส่งข้อมูลไปยัง AlloyDB เพื่อให้ระบบสามารถจับคู่บีคอนแบบเรียลไทม์ได้ บันทึกการวัดและส่งข้อมูลดิบนั้นไม่เป็นระเบียบและมีความยาวที่แตกต่างกัน ซึ่งไม่เหมาะสำหรับการค้นหาความคล้ายคลึง คุณจะใช้ฟังก์ชัน AI ของ BigQuery เพื่อสรุปแต่ละบันทึกด้วย Gemini และแปลงแต่ละสรุปเป็นการฝังเวกเตอร์ 768 มิติ จากนั้นคุณจะส่งออกข้อมูลที่เพิ่มคุณค่าไปยัง Cloud Storage และนำเข้าข้อมูลไปยัง AlloyDB
ขั้นตอนที่ 1: สร้างการฝังใน BigQuery
เปลี่ยนแท็บเอดิเตอร์กลับไปเป็น bigquery.sql (ซึ่งยังคงเชื่อมต่อกับ BigQuery)
ตอนนี้ ให้เรียกใช้การค้นหาต่อไปนี้เพื่อสรุปบันทึกการวัดระยะไกลแต่ละรายการด้วย Gemini และสร้างการฝังเวกเตอร์
CREATE OR REPLACE TABLE `lost_cargo_dataset.telemetry_embeddings_export` AS
WITH summarized_telemetry AS (
SELECT
shipment_id,
telemetry_string,
AI.GENERATE(
CONCAT('Summarize this telemetry log for vector search: ', telemetry_string)
).result AS summary
FROM `lost_cargo_dataset.telemetry_data`
),
telemetry_embeddings AS (
SELECT
shipment_id,
telemetry_string,
AI.EMBED(summary, endpoint => 'text-embedding-005').result AS embedding
FROM summarized_telemetry
)
SELECT
shipment_id,
telemetry_string,
TO_JSON_STRING(embedding) AS embedding_vector
FROM telemetry_embeddings;
ขั้นตอนที่ 2: ดูตัวอย่างข้อมูลที่เพิ่มคุณค่า
โปรดดูสิ่งที่คุณสร้างขึ้นก่อนส่งออก คําค้นหานี้แสดงรหัสการจัดส่งและอักขระ 80 ตัวแรกของข้อมูลสรุปและการฝังแต่ละรายการ
SELECT
shipment_id,
SUBSTR(telemetry_string, 1, 80) AS telemetry_preview,
SUBSTR(embedding_vector, 1, 80) AS embedding_preview
FROM `lost_cargo_dataset.telemetry_embeddings_export`
LIMIT 5;
ตอนนี้แต่ละแถวจะมีรหัสการจัดส่ง บันทึกการวัดและส่งข้อมูลเดิม และเวกเตอร์การฝังแบบ 768 มิติ นี่คือข้อมูลที่คุณจะพุชไปยัง AlloyDB
ขั้นตอนที่ 3: ส่งออกการฝังไปยัง Cloud Storage
ใช้คำสั่ง EXPORT DATA ของ BigQuery เพื่อเขียนตารางการฝังไปยังที่เก็บข้อมูล GCS ของห้องทดลองเป็นไฟล์ CSV
EXECUTE IMMEDIATE CONCAT("""
EXPORT DATA OPTIONS (
uri = 'gs://""", @@project_id, """-lab2/data/embeddings_export/*.csv',
format = 'CSV',
overwrite = true,
header = false
) AS
SELECT
shipment_id,
telemetry_string,
embedding_vector
FROM `lost_cargo_dataset.telemetry_embeddings_export`;
""");
ขั้นตอนที่ 4: นำเข้าไปยัง AlloyDB จาก Cloud Storage
- ใน Cloud Shell Editor ให้คลิกแท็บเทอร์มินัลที่ด้านล่างของหน้าจอเพื่อเปิดเซสชันเทอร์มินัล
- เรียกใช้คำสั่งต่อไปนี้เพื่อโหลดสภาพแวดล้อมและนำเข้าไฟล์ CSV ลงในตาราง
vessel_telemetryใน AlloyDB โดยตรง
source devrel-demos/codelabs/bigquery-alloydb-insights/scripts/setenv.sh
gcloud alloydb clusters import lost-cargo-cluster \
--region=$REGION \
--gcs-uri="gs://${PROJECT_ID}-lab2/data/embeddings_export/000000000000.csv" \
--database=postgres \
--user=postgres \
--table=vessel_telemetry \
--columns=shipment_id,telemetry_string,embedding_vector \
--csv

สรุปส่วน: คุณใช้ฟังก์ชัน AI ของ BigQuery เพื่อสรุปและฝังข้อมูลการวัดและส่งข้อมูล ใช้ฟังก์ชัน AI ของ BigQuery เพื่อสรุปและฝังข้อมูลการวัดและส่งข้อมูล ส่งออกผลลัพธ์ไปยัง Cloud Storage เป็น CSV จากนั้นนำเข้าผลลัพธ์ไปยัง AlloyDB โดยใช้ gcloud ตอนนี้ระบบได้โหลดฐานข้อมูลการติดตามการปฏิบัติงานและพร้อมใช้งานแล้ว
8. การจับคู่สัญญาณบีคอน
ทีมภาคสนามที่อยู่ใกล้ซิดนีย์ตรวจพบสัญญาณบีคอนการตรวจวัดระยะไกลที่ขาดหายไป บันทึกบางส่วนระบุว่า
"หน่วยทำความเย็นออฟไลน์ การลบล้างด้วยตนเอง"
หากมาจากคอนเทนเนอร์ที่ถูกขโมย Vector Search ของ AlloyDB ควรจะจับคู่ได้แม้ว่าสัญญาณจะไม่สมบูรณ์ นี่คือการค้นหาการดำเนินงานแบบเรียลไทม์ที่ AlloyDB สร้างขึ้นมาเพื่อสิ่งนี้โดยเฉพาะ
ขั้นตอนที่ 1: ยืนยันข้อมูลที่นำเข้า
เปลี่ยนแท็บเอดิเตอร์กลับไปเป็น alloydb.sql (ซึ่งยังคงเชื่อมต่อกับ AlloyDB)
ยืนยันว่าโหลดข้อมูลการวัดและส่งข้อมูลทางไกลได้สำเร็จโดยเรียกใช้คำสั่งต่อไปนี้
SELECT shipment_id, LEFT(telemetry_string, 80) AS telemetry_preview
FROM vessel_telemetry
LIMIT 10;
คุณควรเห็นแถวที่มีค่า shipment_id และข้อความการวัดและส่งข้อมูล ซึ่งเป็นลายเซ็นเทเลเมทรีของกลุ่มยานพาหนะที่พร้อมสำหรับการจับคู่แบบเรียลไทม์แล้ว
ขั้นตอนที่ 2: ค้นหาคอนเทนเนอร์ที่หายไป
ตอนนี้ให้ใช้ส่วนขยาย google_ml_integration ของ AlloyDB เพื่อค้นหารายการที่ตรงกันโดยใช้ข้อมูลสัญญาณที่ดักไว้
SELECT
shipment_id,
telemetry_string,
1 - (embedding_vector <=> embedding('text-embedding-005', 'Refrigeration unit offline. Manual override.')::vector) AS search_relevance_score
FROM vessel_telemetry
ORDER BY embedding_vector <=> embedding('text-embedding-005', 'Refrigeration unit offline. Manual override.')::vector
LIMIT 5;
ฟังก์ชัน embedding() ซึ่งจัดทำโดยส่วนขยาย google_ml_integration ของ AlloyDB จะเรียกใช้ Agent Platform โดยตรงจาก SQL เพื่อสร้างการฝังเวกเตอร์แบบอินไลน์ โอเปอเรเตอร์ <=> จะคำนวณระยะทางโคไซน์ระหว่างเวกเตอร์ 2 ตัว (ยิ่งใกล้ 0 มากเท่าใด เวกเตอร์ 2 ตัวก็จะยิ่งเหมือนกันมากขึ้นเท่านั้น) เราจะนำค่าจาก 1 มาลบออกเพื่อแสดงผลลัพธ์เป็นคะแนนความเกี่ยวข้อง โดยคะแนนที่สูงกว่าจะดีกว่า
ขั้นตอนที่ 3: ยืนยันการจับคู่
ตรวจสอบผลลัพธ์ ผลการค้นหาแรกควรเป็น MV-CAPYBARA-003 ซึ่งมีคะแนนความเกี่ยวข้องสูงสุด
ซึ่งเป็นคอนเทนเนอร์เดียวกันกับที่คุณติดตามในทุกขั้นตอนของการตรวจสอบนี้
- 📷 ฟุตเทจจากกล้องวงจรปิดระบุว่าเรือออกจากท่าเรือรีโอเดจาเนโรในตอนกลางคืน
- 🌡️ การตรวจจับความผิดปกติของความร้อนยืนยันว่ามีการปิดใช้ชุดทำความเย็นโดยเจตนา
- 📡 การจับคู่สัญญาณบีคอนเพิ่งระบุลายเซ็นการตรวจวัดระยะไกลใกล้ซิดนีย์
หลักฐาน 3 บรรทัดที่แยกจากกัน ความสามารถของ AI ใน Google Cloud 3 อย่างที่แตกต่างกัน คอนเทนเนอร์ที่ถูกขโมย 1 รายการ
🎯 ปิดเคส: พบ MV-CAPYBARA-003 ใกล้ซิดนีย์แล้ว

สรุปส่วน: คุณใช้การผสานรวม AI ในตัวของ AlloyDB เพื่อสร้างการฝังการค้นหาและทำการค้นหาความคล้ายคลึงกันของโคไซน์ในคำค้นหา SQL เดียว การจับคู่บีคอนยืนยันตำแหน่งของตู้คอนเทนเนอร์ที่ถูกขโมย ทำให้การสืบสวนเสร็จสมบูรณ์
9. การตรวจสอบหลักฐาน
ตอนนี้คุณระบุคอนเทนเนอร์ผ่านการวิเคราะห์รูปภาพแบบหลายรูปแบบและการค้นหาเวกเตอร์ได้แล้ว คุณสามารถใช้การวิเคราะห์เชิงสนทนาภายในเอดิเตอร์โดยตรงเพื่อสำรวจข้อมูลการตรวจสอบโดยใช้ภาษาธรรมชาติโดยไม่ต้องเขียน SQL
ขั้นตอนที่ 1: ค้นหาข้อมูลในแคตตาล็อกความรู้
ชุดเครื่องมือ Data Agent มีฟีเจอร์ Universal Search ที่ช่วยให้คุณค้นหาและสำรวจชิ้นงานข้อมูลในสภาพแวดล้อม Google Cloud ได้
- ในแผงชุดเครื่องมือ Data Agent ทางด้านซ้าย ให้ขยายส่วนแคตตาล็อก
- คลิกการค้นหาสากล
- พิมพ์
telemetry_dataในแถบค้นหา - คลิก
telemetry_dataตาราง (ในส่วนlost_cargo_dataset) จากผลการค้นหา

ขั้นตอนที่ 2: เปิดตัว Conversational Analytics
การคลิกผลการค้นหาจะเปิดแท็บโปรแกรมดูข้อมูล ซึ่งคุณสามารถดูตัวอย่างข้อมูลดิบ ดูสคีมา และตรวจสอบคุณภาพของข้อมูลได้
- ที่แผงด้านซ้าย คุณจะเห็นชุดข้อมูลและตาราง BigQuery คลิกปุ่มแชทเพื่อเปิดหน้าต่างแชทใหม่

ขั้นตอนที่ 3: ถามคำถามด้วยภาษาง่ายๆ
แท็บแชทใหม่ "ยินดีต้อนรับสู่การวิเคราะห์เชิงสนทนา!" จะเปิดขึ้น Agent มีบริบทเกี่ยวกับสคีมาและเนื้อหาของตาราง
- ในหน้าต่างแชท ให้พิมพ์ว่า "แสดงสถานะการวัดและบันทึกสำหรับการจัดส่งคาปิบารา"
- กด Enter
เอเจนต์จะแปลคำถามของคุณเป็น SQL ของ BigQuery เรียกใช้การค้นหา และแสดงผลลัพธ์ ซึ่งรวมถึงทั้งตารางข้อมูลและข้อมูลเชิงลึกที่สรุปสิ่งที่พบ คุณสามารถสลับระหว่างโหมดการคิด (วิเคราะห์เชิงลึก ช้ากว่า) กับโหมดเร็ว (ตอบสนองเร็วขึ้น) ได้ตามความซับซ้อนของคำถาม เนื่องจากคำตอบเหล่านี้เป็นคำตอบที่ AI สร้างขึ้น ผลลัพธ์ของคุณจึงอาจแตกต่างจากภาพหน้าจอด้านล่างเล็กน้อย

ขั้นตอนที่ 4: ถามคำถามติดตามผล
ตัวแทนจะจดจำบริบทของการสนทนาของคุณ ลองถามคำถามติดตามผล
- "ข้อมูลการวัดระยะไกลมีการจัดส่งที่ไม่ซ้ำกันกี่รายการ"
- "ขณะนี้การจัดส่งอื่นๆ ในกองยานมีสถานะ "วิกฤต" จำนวนเท่าใด"
สรุปส่วน: คุณใช้ฟีเจอร์การค้นหาสากลของแคตตาล็อกความรู้เพื่อค้นหาชุดข้อมูล และเปิดใช้ Analytics แบบสนทนาเพื่อสืบค้นข้อมูลการตรวจสอบด้วยภาษาธรรมชาติ AI Agent แปลคำถามของคุณเป็น SQL และให้ข้อมูลเชิงลึกที่ยืนยันผลการค้นพบของคุณ
10. ล้าง
โปรดลบทรัพยากรที่คุณสร้างในแล็บนี้เพื่อหลีกเลี่ยงการเรียกเก็บเงินอย่างต่อเนื่องในบัญชี Google Cloud คุณสามารถเรียกใช้คำสั่งเหล่านี้ในเทอร์มินัลแบบผสานรวมภายใน Cloud Shell Editor (ที่คุณใช้ Data Agent Kit) เพื่อล้างข้อมูลสภาพแวดล้อม
ก่อนอื่น ให้โหลดตัวแปรสภาพแวดล้อมโดยทำดังนี้
source scripts/setenv.sh
- ลบทรัพยากร BigQuery (เฉพาะในกรณีที่คุณไม่ดำเนินการต่อใน Lab 3)
หากวางแผนที่จะไปที่แล็บ 3 ต่อ ให้ข้ามขั้นตอนนี้ Lab 3 ใช้ชุดข้อมูลและการเชื่อมต่อ BigQuery เดียวกันสําหรับการวิเคราะห์กราฟพร็อพเพอร์ตี้
วิธีลบชุดข้อมูลและการเชื่อมต่อ BigQuery
# Drop the dataset
bq rm -r -f $PROJECT_ID:lost_cargo_dataset
# Delete the connections
bq rm --connection --location=us-central1 $PROJECT_ID.us-central1.lost_cargo_conn
bq rm --connection --location=us-central1 $PROJECT_ID.us-central1.lost_cargo_alloydb_conn
- ลบ Bucket ของ Cloud Storage:
gcloud storage rm --recursive gs://${PROJECT_ID}-lab2
- ลบอินสแตนซ์และคลัสเตอร์ AlloyDB
Lab 3 ไม่ได้ใช้ AlloyDB คุณจึงหยุดทำงานได้เลย
gcloud alloydb instances delete lost-cargo-instance \
--region=$REGION \
--cluster=lost-cargo-cluster \
--quiet
gcloud alloydb clusters delete lost-cargo-cluster \
--region=$REGION \
--force \
--quiet
- ลบการตั้งค่าสภาพแวดล้อมภายใน
สุดท้าย ให้ล้างไฟล์การตั้งค่าสภาพแวดล้อมภายในออกจากพื้นที่ทำงานโดยทำดังนี้
rm -f .env
11. ยินดีด้วย
คุณทำแล็บ 2: การวิเคราะห์ข้อมูลและข้อมูลเชิงลึกแบบมัลติโมดอลเสร็จสมบูรณ์แล้ว คุณติดตามร่องรอยจากท่าเรือที่เต็มไปด้วยตู้คอนเทนเนอร์หลายพันตู้ไปจนถึงการลักลอบที่ได้รับการยืนยันและสถานที่ที่ระบุ
สิ่งที่คุณทำสำเร็จ
- สแกนฟุตเทจ: คุณใช้
AI.GENERATEของ BigQuery เพื่อวิเคราะห์รูปภาพความปลอดภัยของท่าเรือและระบุคอนเทนเนอร์ MV-CAPYBARA-003 ในสีแดงเข้ม - ยืนยันการขโมย: คุณได้ตรวจสอบข้อมูลเซ็นเซอร์ความร้อน พบว่าอุณหภูมิพุ่งสูงขึ้นอย่างน่าสงสัยถึง 148.4°F และใช้
AI.DETECT_ANOMALIESเพื่อพิสูจน์ว่าเป็นการดัดแปลงโดยเจตนา - เตรียมระบบติดตาม: คุณกำหนดค่า AlloyDB ด้วย pgvector และ
google_ml_integrationเพื่อการจับคู่บีคอนแบบเรียลไทม์ - สร้างดัชนีการค้นหา: คุณใช้
AI.GENERATEและAI.EMBEDใน BigQuery เพื่อสร้างการฝัง จากนั้นส่งออกไปยัง Cloud Storage และนำเข้าไปยัง AlloyDB - จับคู่สัญญาณบีคอน: คุณใช้การค้นหาเวกเตอร์ของ AlloyDB เพื่อจับคู่สัญญาณการวัดและส่งข้อมูลที่กระจัดกระจาย ซึ่งระบุตำแหน่งคอนเทนเนอร์ที่ถูกขโมยใกล้กับซิดนีย์
- สำรวจหลักฐาน: คุณใช้ Conversational Analytics โดยตรงจากเอดิเตอร์เพื่อค้นหาข้อมูลการตรวจสอบด้วยภาษาธรรมชาติ

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