สร้างแอปแนะนำชุดแต่งกายที่ทำงานด้วยระบบ AI ด้วย AlloyDB และรันไทม์แบบ Serverless

สร้างแอปแนะนำชุดแต่งกายที่ทำงานด้วยระบบ AI ด้วย AlloyDB และรันไทม์แบบ Serverless

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ มี.ค. 28, 2025
account_circleเขียนโดย Abirami Sukumaran, Shweta Shetye

1 ภาพรวม

ลองจินตนาการถึงแอปแฟชั่นที่ไม่เพียงช่วยคุณค้นหาชุดที่เหมาะที่สุด แต่ยังให้คําแนะนําเกี่ยวกับสไตล์แบบเรียลไทม์ด้วย ทั้งหมดนี้ต้องขอบคุณการผสานรวม Generative AI อันล้ำสมัย ในการบรรยายนี้ เราจะอธิบายวิธีสร้างแอปดังกล่าวโดยใช้ความสามารถการค้นหาเวกเตอร์ของ AlloyDB ร่วมกับดัชนี ScaNN ของ Google ซึ่งช่วยให้ค้นหาชุดที่แมชกันได้อย่างฉับไวและแสดงคำแนะนำแฟชั่นได้ทันที

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

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

โซลูชัน: แอปแนะนำชุดเสื้อผ้าช่วยแก้ปัญหาในการมอบประสบการณ์การเลือกซื้อเสื้อผ้าที่ชาญฉลาด ปรับเปลี่ยนในแบบของคุณ และน่าสนใจให้แก่ผู้ใช้ ในขณะเดียวกันก็แสดงความสามารถของ AlloyDB, Generative AI และเทคโนโลยีแบบ Serverless

สิ่งที่คุณจะสร้าง

คุณจะทําสิ่งต่อไปนี้ได้

  1. สร้างอินสแตนซ์ AlloyDB และโหลดชุดข้อมูลอีคอมเมิร์ซ
  2. เปิดใช้ส่วนขยาย pgvector และโมเดล Generative AI ใน AlloyDB
  3. สร้างการฝังจากรายละเอียดผลิตภัณฑ์
  4. ติดตั้งใช้งานโซลูชันใน Cloud Run Functions แบบ Serverless
  5. อัปโหลดรูปภาพไปยัง Gemini และสร้างพรอมต์คำอธิบายรูปภาพ
  6. สร้างผลการค้นหาตามพรอมต์ที่เชื่อมโยงกับข้อมูลชุดข้อมูลอีคอมเมิร์ซ
  7. เพิ่มพรอมต์เพิ่มเติมเพื่อปรับแต่งพรอมต์และสร้างคำแนะนำสไตล์
  8. ติดตั้งใช้งานโซลูชันใน Cloud Run Functions แบบ Serverless

ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

2 สถาปัตยกรรม

สถาปัตยกรรมระดับสูงของแอปมีดังนี้

ce32f865dfe59142.png

ส่วนต่อไปนี้จะไฮไลต์ขั้นตอนตามบริบทของบทแนะนำ

การส่งผ่านข้อมูล

ขั้นตอนแรกคือการนำเข้าข้อมูลค้าปลีก (สินค้าคงคลัง คําอธิบายผลิตภัณฑ์ การโต้ตอบกับลูกค้า) ไปยัง AlloyDB

เครื่องมือวิเคราะห์:

เราจะใช้ AlloyDB เป็นเครื่องมือวิเคราะห์เพื่อดำเนินการต่อไปนี้

  1. การดึงข้อมูลบริบท: เครื่องมือจะวิเคราะห์ข้อมูลที่จัดเก็บไว้ใน AlloyDB เพื่อให้ทราบความสัมพันธ์ระหว่างผลิตภัณฑ์ หมวดหมู่ พฤติกรรมของลูกค้า และอื่นๆ ที่เกี่ยวข้อง
  2. การสร้างการฝัง: ระบบจะสร้างการฝัง (การนําเสนอข้อความทางคณิตศาสตร์) สําหรับทั้งคําค้นหาของผู้ใช้และข้อมูลที่จัดเก็บไว้ใน AlloyDB
  3. การค้นหาเวกเตอร์: เครื่องมือจะทำการค้นหาแบบความคล้ายคลึงกัน โดยเปรียบเทียบการฝังข้อความค้นหากับการฝังคำอธิบายผลิตภัณฑ์ รีวิว และข้อมูลอื่นๆ ที่เกี่ยวข้อง ซึ่งจะระบุ "เพื่อนบ้านที่ใกล้ที่สุด" ที่มีความเกี่ยวข้องมากที่สุด 25 รายการ

คําแนะนําของ Gemini:

ระบบจะส่งอาร์เรย์ไบต์รูปภาพไปยังโมเดล Gemini ผ่าน Vertex AI API พร้อมกับพรอมต์ที่ขอคำอธิบายแบบข้อความของชุดชั้นในพร้อมคำแนะนำชุดชั้นนอก

การค้นหา RAG และเวกเตอร์ของ AlloyDB:

ระบบจะใช้คำอธิบายของเสื้อเพื่อค้นหาฐานข้อมูล คําค้นหาจะแปลงข้อความค้นหา (คําแนะนําจากโมเดล Gemini สําหรับการจับคู่ชุดชั้นใน) ให้เป็นข้อมูลเชิงลึก และทำ Vector Search กับข้อมูลเชิงลึกที่เก็บไว้ในฐานข้อมูลเพื่อค้นหารายการใกล้เคียงที่สุด (ผลการจับคู่) ระบบจะจัดทำดัชนีการฝังเวกเตอร์ในฐานข้อมูล AlloyDB โดยใช้ดัชนี ScaNN เพื่อให้เรียกข้อมูลได้ดีขึ้น

การสร้างรูปภาพคำตอบ:

การตอบกลับที่ตรวจสอบแล้วจะมีโครงสร้างเป็นอาร์เรย์ JSON และแพ็กเกจทั้งเครื่องมือเป็นฟังก์ชัน Cloud Run แบบ Serverless ที่เรียกใช้จากเครื่องมือสร้าง Agent

การสร้างรูปภาพด้วย Imagen:

ระบบจะรวมพรอมต์การจัดสไตล์ของผู้ใช้ คําแนะนําที่ผู้ใช้เลือก และคำขอปรับเปลี่ยนในแบบของคุณเพื่อแสดง Imagen 3 ที่มีรูปภาพที่มีอยู่ ระบบจะสร้างรูปภาพที่มีการจัดสไตล์ตามพรอมต์นี้โดยใช้ Vertex AI API

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

สร้างโปรเจ็กต์

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์หรือไม่
  3. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และโหลด bq ไว้ล่วงหน้า คลิกเปิดใช้งาน Cloud Shell ( f2ae85166a716c5c.png) ที่ด้านบนของคอนโซล Google Cloud
  4. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้ตรวจสอบว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณโดยใช้คําสั่งต่อไปนี้
gcloud auth list
  1. เรียกใช้คําสั่งต่อไปนี้เพื่อยืนยันว่าคําสั่ง gcloud ในอนาคตจะระบุโปรเจ็กต์ของคุณได้อย่างถูกต้อง
gcloud config list project
  1. หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คําสั่งต่อไปนี้เพื่อตั้งค่าอย่างชัดเจน
gcloud config set project <YOUR_PROJECT_ID>
  1. เปิดใช้ API ที่จำเป็น

โปรดไปที่ลิงก์เพื่อเปิดใช้ API

หากพลาดการเปิดใช้ API ใดก็ตาม คุณจะเปิดใช้ได้เสมอในระหว่างการใช้งาน

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

4 การตั้งค่าฐานข้อมูล

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

มาสร้างคลัสเตอร์ อินสแตนซ์ และตาราง AlloyDB ที่ระบบจะโหลดชุดข้อมูลอีคอมเมิร์ซกัน

สร้างคลัสเตอร์และอินสแตนซ์

  1. ในคอนโซล Google Cloud ให้ค้นหา AlloyDB วิธีที่ง่ายในการค้นหาหน้าส่วนใหญ่ใน Cloud Console คือค้นหาโดยใช้แถบค้นหาของคอนโซล
  2. คลิกสร้างคลัสเตอร์

f76ff480c8c889aa.png

  1. สร้างคลัสเตอร์และอินสแตนซ์ด้วยค่าต่อไปนี้
  • รหัสคลัสเตอร์: "shopping-cluster"
  • รหัสผ่าน: "alloydb"
  • เข้ากันได้กับ PostgreSQL 15
  • ภูมิภาค: "us-central1"
  • เครือข่าย: "default"

538dba58908162fb.png

  1. ในเครือข่าย เมื่อคุณเลือกเครือข่ายเริ่มต้น ตัวเลือกต่อไปนี้จะปรากฏขึ้น คลิกตั้งค่าการเชื่อมต่อเพื่อตั้งค่าเครือข่ายเริ่มต้น
    7939bbb6802a91bf.png
  2. เลือกใช้ช่วง IP ที่มีการจัดสรรโดยอัตโนมัติ แล้วคลิกต่อไป หลังจากตรวจสอบข้อมูลแล้ว ให้คลิกสร้างการเชื่อมต่อ 768ff5210e79676f.png

รอให้การสร้างเครือข่ายเริ่มต้นเสร็จสมบูรณ์

  1. ใน "กำหนดค่าอินสแตนซ์หลัก" ให้ตั้งค่ารหัสอินสแตนซ์เป็น "shopping-instance"

2bddecf6b7c7407b.png

  1. คลิกสร้างคลัสเตอร์เพื่อตั้งค่าคลัสเตอร์ให้เสร็จสมบูรณ์ ดังนี้

24eec29fa5cfdb3e.png

5 การนำเข้าข้อมูล

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

ตรวจสอบสิทธิ์ในฐานข้อมูล AlloyDB

  1. ในคอนโซล Google Cloud ให้ไปที่ AlloyDB เลือกคลัสเตอร์หลัก แล้วคลิก AlloyDB Studio ในการนําทางด้านซ้ายมือ

847e35f1bf8a8bd8.png

  1. ป้อนรายละเอียดต่อไปนี้เพื่อตรวจสอบสิทธิ์กับฐานข้อมูล AlloyDB
  • ชื่อผู้ใช้ : "postgres"
  • ฐานข้อมูล : "postgres"
  • รหัสผ่าน : "alloydb"

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

91a86d9469d499c4.png

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

เปิดใช้ส่วนขยาย

เราจะใช้ส่วนขยาย "pgvector"" และ "google_ml_integration"" ในการสร้างแอปนี้

  • ส่วนขยาย pgvector ช่วยให้คุณจัดเก็บและค้นหาการฝังเวกเตอร์ได้
  • ส่วนขยาย google_ml_integration มีฟังก์ชันที่คุณใช้เข้าถึงปลายทางการคาดการณ์ Vertex AI เพื่อรับการคาดการณ์ใน SQL
  1. เปิดใช้ส่วนขยายเหล่านี้โดยเรียกใช้ DDL ต่อไปนี้
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector
;
  1. ตรวจสอบว่าได้ติดตั้งส่วนขยายแล้วโดยเรียกใช้คําสั่ง SQL นี้
select extname, extversion from pg_extension;

สร้างตาราง

  1. สร้างตารางโดยใช้คำสั่ง DDL ต่อไปนี้
CREATE TABLE
 apparels
( id BIGINT,
   category VARCHAR
(100),
   sub_category VARCHAR
(50),
   uri VARCHAR
(200),
   image VARCHAR
(100),
   content VARCHAR
(2000),
   pdt_desc VARCHAR
(5000),
   embedding vector
(768) );

เมื่อเรียกใช้คําสั่งข้างต้นสําเร็จ คุณควรจะดูตารางได้ใน

ฐานข้อมูล รูปภาพต่อไปนี้แสดงตัวอย่าง

908e33bbff58a6d.png

นําเข้าข้อมูล

สําหรับห้องทดลองนี้ เรามีข้อมูลทดสอบประมาณ 200 ระเบียนในไฟล์ SQL นี้ มี id, category, sub_category, uri, image และ content คุณจะกรอกข้อมูลในช่องอื่นๆ ในภายหลังในแท็บห้องทดลอง

  1. คัดลอกคำสั่งแทรก 20 บรรทัดจากไฟล์ SQL ในแท็บเครื่องมือแก้ไขใหม่ใน AlloyDB Studio แล้วคลิกเรียกใช้
  1. ขยายส่วน "โปรแกรมสํารวจ" จนกว่าจะเห็นตารางชื่อ apparels
  2. คลิกไอคอนเมนู [] แล้วคลิกการค้นหา คำสั่ง SELECT จะเปิดในแท็บเครื่องมือแก้ไขใหม่

b31ece70e670ab89.png

  1. คลิกเรียกใช้เพื่อยืนยันว่ามีการแทรกแถวแล้ว

ให้สิทธิ์แก่ผู้ใช้

เราจะให้สิทธิ์แก่ผู้ใช้ postgres ในการสร้างการฝังจากภายใน AlloyDB. ใน AlloyDB Studio ให้เรียกใช้คำสั่งต่อไปนี้เพื่อมอบสิทธิ์การเรียกใช้ฟังก์ชัน embedding ให้แก่ผู้ใช้ postgres

GRANT EXECUTE ON FUNCTION embedding TO postgres;

มอบบทบาทผู้ใช้ Vertex AI ให้กับบัญชีบริการ AlloyDB

เราจะใช้โมเดลการฝังข้อความจาก Vertex AI เพื่อสร้างการฝังสำหรับบทบาทผู้ใช้ Vertex AI ในบัญชีบริการ AlloyDB

ในคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell Terminal [ f2ae85166a716c5c.png] แล้วเรียกใช้คําสั่งต่อไปนี้

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"

6 บริบทบิวด์

หากต้องการสร้างการฝัง เราจะต้องมี context กล่าวคือ ข้อมูลทั้งหมดที่ต้องการรวมไว้ในช่องเดียว เราจะทําเช่นนี้โดยสร้างคําอธิบายผลิตภัณฑ์ที่จะจัดเก็บไว้ในคอลัมน์ pdt_desc ในตาราง apparels

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

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

UPDATE
 apparels
SET
 pdt_desc = CONCAT('This product category is: ', category, ' and sub_category is: ', sub_category, '. The description of the product is as follows: ', content, '. The product image is stored at: ', uri)
WHERE
 id IS NOT NULL;

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

7 สร้างการฝังสําหรับบริบท

คอมพิวเตอร์ประมวลผลตัวเลขได้ง่ายกว่าประมวลผลข้อความ ระบบการฝังจะแปลงข้อความให้เป็นชุดตัวเลขทศนิยมที่ควรแสดงข้อความนั้น ไม่ว่าจะใช้คำพูดอย่างไร ใช้ภาษาใด ฯลฯ

ลองอธิบายสถานที่ริมทะเล ซึ่งอาจเรียกว่า "on the water", "beachfront", "walk from your room to the ocean", "sur la mer", "на берегу океана" ฯลฯ ทั้งหมดนี้ดูแตกต่างกัน แต่ความหมายเชิงอรรถศาสตร์หรือในคำศัพท์แมชชีนเลิร์นนิง เอ็มเบ็ดดิ้งของคำเหล่านี้ควรมีความใกล้เคียงกันมาก

เมื่อข้อมูลและบริบทพร้อมแล้ว เราจะเรียกใช้ SQL เพื่อเพิ่มการฝังของคอลัมน์คำอธิบายผลิตภัณฑ์(pdt_desc) ลงในตารางในช่อง embedding รูปแบบการฝังมีหลากหลายรูปแบบที่คุณใช้ได้ เราใช้ text-embedding-005 จาก Vertex AI

  1. ใน AlloyDB Studio ให้เรียกใช้คําสั่งต่อไปนี้เพื่อสร้างการฝัง และอัปเดตคอลัมน์ pdt_desc ด้วยการฝังสําหรับข้อมูลที่จัดเก็บ
UPDATE
 apparels
SET
 embedding
= embedding( 'text-embedding-005',
   pdt_desc
)
WHERE
 TRUE
;
  1. ตรวจสอบว่าระบบสร้างการฝังแล้วโดยเรียกใช้คําสั่งต่อไปนี้
SELECT
 id
,
 category
,
 sub_category
,
 content
,
 embedding
FROM
 
Apparels
LIMIT
5;

ต่อไปนี้คือตัวอย่างเวกเตอร์การฝังที่ดูเหมือนอาร์เรย์ของตัวเลขทศนิยมสําหรับข้อความตัวอย่างในการค้นหา ดังนี้

c69c08d085389f74.png

8 ทำการค้นหาเวกเตอร์

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

สมมติว่าข้อความค้นหาของผู้ใช้คือ "pink color, casual, pure cotton tops for women"

หากต้องการค้นหารายการที่ตรงกันสําหรับคําค้นหานี้ ให้เรียกใช้การค้นหา SQL ต่อไปนี้

SELECT
id
,
category
,
sub_category
,
content
,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding
<=> embedding('text-embedding-005',
 
'pink color, casual, pure cotton tops for women')::vector
LIMIT
5;

มาดูรายละเอียดของข้อความค้นหานี้กัน

ในข้อความค้นหานี้

  1. ข้อความค้นหาของผู้ใช้คือ "I want womens tops, pink casual only pure cotton."
  2. เรากําลังแปลงข้อความค้นหานี้เป็นข้อมูลเชิงลึกโดยใช้วิธีการ embedding() พร้อมกับโมเดล text-embedding-005 ขั้นตอนนี้น่าจะดูคุ้นเคยหลังจากขั้นตอนสุดท้ายที่เราใช้ฟังก์ชันการฝังกับรายการทั้งหมดในตาราง
  3. "<=>" แสดงถึงการใช้วิธีการวัดระยะทางความคล้ายคลึงกันของ COSINES คุณดูการวัดความคล้ายคลึงทั้งหมดที่มีได้ในเอกสารประกอบของ pgvector
  4. เรากําลังแปลงผลลัพธ์ของวิธีการฝังเป็นประเภทข้อมูล เวกเตอร์เพื่อให้เข้ากันได้กับเวกเตอร์ที่จัดเก็บไว้ในฐานข้อมูล
  5. LIMIT 5 แสดงว่าเราต้องการดึงข้อมูลคำใกล้เคียงที่สุด 5 รายการสำหรับข้อความค้นหา

ต่อไปนี้คือตัวอย่างการตอบกลับของการค้นหา SQL นี้

4193a68737400535.png

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

ดัชนี ScaNN ของ AlloyDB สําหรับประสิทธิภาพการค้นหา

สมมติว่าเราต้องการเพิ่มประสิทธิภาพ (เวลาในการค้นหา) ประสิทธิภาพ และความสามารถในการแสดงผลของผลการค้นหาด้วยเวกเตอร์นี้โดยใช้ดัชนี ScaNN

หากต้องการใช้ดัชนี ScaNN ให้ลองทำตามขั้นตอนต่อไปนี้

  1. เนื่องจากเรามีคลัสเตอร์ อินสแตนซ์ บริบท และการฝังที่สร้างไว้แล้ว เราจึงต้องติดตั้งส่วนขยาย ScaNN โดยใช้คำสั่งต่อไปนี้
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
  1. สร้างดัชนี ScaNN
CREATE INDEX apparel_index ON apparels
USING scann
(embedding cosine)
WITH
(num_leaves=54);

ใน DDL ด้านบน

  • apparel_index คือชื่อดัชนี
  • apparels คือชื่อตาราง
  • scann คือวิธีการระบุ
  • embedding คือคอลัมน์ในตารางที่คุณต้องการจัดทำดัชนี
  • cosine คือวิธีการวัดระยะทางที่คุณต้องการใช้กับดัชนี
  • 54 คือจํานวนพาร์ติชันที่จะใช้กับดัชนีนี้ ตั้งค่าเป็นค่าใดก็ได้ระหว่าง 1 ถึง 1048576 ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีกำหนดค่านี้ได้ที่ปรับแต่งดัชนี ScaNN

ตามคำแนะนำใน ScaNN repo เราใช้ SQUARE ROOT ของจำนวนจุดข้อมูล เมื่อแบ่งพาร์ติชัน num_leaves ควรเป็นรากที่สองของจํานวนจุดข้อมูลโดยประมาณ

  1. ตรวจสอบว่าระบบสร้างดัชนีโดยใช้คําค้นหาหรือไม่
SELECT * FROM pg_stat_ann_indexes;
  1. ทำการค้นหาเวกเตอร์โดยใช้ข้อความค้นหาเดียวกับที่เราใช้โดยไม่มีดัชนี
select * from apparels
   ORDER BY embedding
<=> CAST(embedding('textembedding-gecko', 'white tops for girls without any print') as vector(768))
   LIMIT
20

คําค้นหาข้างต้นคือคําค้นหาเดียวกับที่เราใช้ในขั้นตอนที่ 8 ของห้องทดลอง แต่ตอนนี้เราจัดทําดัชนีฟิลด์โดยใช้ดัชนี ScaNN แล้ว

  1. ทดสอบด้วยข้อความค้นหาง่ายๆ ที่มีและไม่มีดัชนี หากต้องการทดสอบโดยไม่ใช้ดัชนี คุณต้องลบดัชนีออกโดยทำดังนี้

white tops for girls without any print

ข้อความค้นหาข้างต้นในคำค้นหาของ Vector Search ในข้อมูลการฝังที่จัดทำดัชนีแล้วทำให้ได้ผลการค้นหาที่มีคุณภาพและมีประสิทธิภาพ ประสิทธิภาพจะดีขึ้นอย่างมาก (ในแง่ของเวลาในการดำเนินการ: 10.37 มิลลิวินาทีไม่มี ScaNN และ 0.87 มิลลิวินาทีมี ScaNN) เมื่อใช้ดัชนี ดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ได้ในบล็อกนี้

9 การตรวจสอบการจับคู่กับ LLM

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

ตรวจสอบว่าได้ตั้งค่าอินสแตนซ์สำหรับ Gemini แล้ว

  1. ตรวจสอบว่าเปิดใช้ google_ml_integration สำหรับคลัสเตอร์และอินสแตนซ์แล้ว ใน AlloyDB Studio ให้เรียกใช้คำสั่งต่อไปนี้
show google_ml_integration.enable_model_support;

หากค่าแสดงเป็น "on" คุณสามารถข้าม 2 ขั้นตอนถัดไปและไปที่การตั้งค่าได้โดยตรง

การผสานรวม AlloyDB กับโมเดล Vertex AI

  1. ไปที่อินสแตนซ์หลักของคลัสเตอร์ AlloyDB แล้วคลิกแก้ไขอินสแตนซ์หลัก

456ffdf292d3c0e0.png

  1. ในตัวเลือกการกำหนดค่าขั้นสูง ให้ขยายส่วนFlag ฐานข้อมูลใหม่ และตรวจสอบว่าได้ตั้งค่า google_ml_integration.enable_model_support flag เป็น "on" ดังต่อไปนี้

6a59351fcd2a9d35.png 3. หากไม่ได้ตั้งค่าเป็น "on" ให้ตั้งค่าเป็น "on" แล้วคลิกอัปเดตอินสแตนซ์

ขั้นตอนนี้จะใช้เวลาสักครู่

การผสานรวม AlloyDB กับโมเดล Vertex AI

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

  1. ในคอนโซล Google Cloud ให้ไปที่ AlloyDB เลือกคลัสเตอร์หลัก แล้วคลิก AlloyDB Studio ในการนําทางด้านซ้ายมือ
  2. เราจะใช้ gemini-1.5-pro:generateContent ที่มีให้โดยค่าเริ่มต้นซึ่งมีนามสกุล google_ml_integration cdb5af753a625777.png
  3. คุณสามารถตรวจสอบโมเดลที่กำหนดค่าไว้สำหรับการเข้าถึงผ่านคำสั่งต่อไปนี้ใน AlloyDB Studio
select model_id,model_type from google_ml.model_info_view;        
  1. ให้สิทธิ์ผู้ใช้ฐานข้อมูลเรียกใช้ฟังก์ชัน ml_predict_row เพื่อเรียกใช้การคาดการณ์โดยใช้โมเดล Google Vertex AI โดยเรียกใช้คําสั่งต่อไปนี้
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

การประเมินคำตอบ

แม้ว่าเราจะใช้การค้นหาขนาดใหญ่รายการเดียวในส่วนถัดไปซึ่งเราจะนําแอปพลิเคชันไปยัง Cloud Run จริง แต่การค้นหาอาจทําความเข้าใจได้ยาก เพื่อให้การตอบกลับจากการค้นหามีความสมเหตุสมผล

เราจะดูแต่ละส่วนที่ใช้สร้างคําค้นหาขนาดใหญ่ที่เราใช้ในที่สุด

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

เราจะรวมคำอธิบายผลิตภัณฑ์จากตาราง apparels และเพิ่มฟิลด์ใหม่ 2 ฟิลด์ โดย 1 ฟิลด์จะรวมคำอธิบายเข้ากับดัชนี และอีกฟิลด์จะรวมคำขอเดิม ระบบจะบันทึกข้อมูลนี้ในตารางชื่อ xyz ซึ่งเป็นชื่อตารางชั่วคราว

CREATE TABLE
 xyz AS
SELECT
 id || ' - ' || pdt_desc AS literature,
 pdt_desc AS content,
 'I want womens tops, pink casual only pure cotton.' AS  user_text
FROM
 apparels
ORDER BY
 embedding <=> embedding('text-embedding-005',
   'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
 5;

เอาต์พุตของคําค้นหานี้จะแสดงแถวที่คล้ายกันที่สุด 5 แถวที่เกี่ยวข้องกับคําค้นหาของผู้ใช้ หน้า

ตารางใหม่ xyz จะมี 5 แถว โดยแต่ละแถวจะมีคอลัมน์ต่อไปนี้

  • literature
  • content
  • user_text
  1. เราจะใช้การค้นหาที่ซับซ้อนซึ่งอธิบายวิธีประเมินคำตอบเพื่อพิจารณาความถูกต้องของคำตอบ โดยใช้ user_text และ content ในตาราง xyz เป็นส่วนหนึ่งของการค้นหา
"Read this user search text: ', user_text, 
' Compare it against the product inventory data set: ', content,
' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."

  1. จากนั้นเราจะใช้การค้นหาดังกล่าวเพื่อตรวจสอบ "คุณภาพ" ของคำตอบในตาราง xyz "คุณภาพ" หมายถึงความแม่นยำของคำตอบที่สร้างขึ้นเมื่อเทียบกับสิ่งที่เราคาดหวัง
CREATE TABLE
  x AS
SELECT
  json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
      request_body => CONCAT('{
 "contents": [
        { "role": "user",
          "parts":
             [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
             } ]
         }
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
FROM
    xyz;
  1. predict_row จะแสดงผลลัพธ์ในรูปแบบ JSON โค้ด "-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'" ใช้เพื่อดึงข้อความจริงจาก JSON นั้น หากต้องการดู JSON จริงที่แสดงผล ให้นำโค้ดนี้ออก
  2. สุดท้าย หากต้องการดูฟิลด์ LLM คุณก็เพียงดึงข้อมูลออกจากตาราง x ดังนี้
SELECT 
LLM_RESPONSE
FROM
        x
;
  1. ซึ่งสามารถรวมเป็นคําค้นหาเดียวได้ดังนี้

คำเตือน: หากคุณเรียกใช้การค้นหาข้างต้นเพื่อตรวจสอบผลลัพธ์ขั้นกลาง

ตรวจสอบว่าคุณได้ลบ/นําตาราง xyz และ x ออกจากฐานข้อมูล AlloyDB แล้วก่อนเรียกใช้การค้นหานี้

SELECT
 LLM_RESPONSE
FROM (
 SELECT
 json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
     request_body => CONCAT('{
     "contents": [
       { "role": "user",
         "parts":
            [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
            } ]
        }
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
   FROM (
         SELECT
           id || ' - ' || pdt_desc AS literature,
           pdt_desc AS content,
         'I want womens tops, pink casual only pure cotton.' user_text
         FROM
           apparels
         ORDER BY
             embedding <=> embedding('text-embedding-005',
             'I want womens tops, pink casual only pure cotton.')::vector
         LIMIT
           5 ) AS xyz ) AS X;

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

โปรดทราบว่าโมเดล Gemini มีการสตรีมเปิดอยู่โดยค่าเริ่มต้น คำตอบจริงจึงกระจายอยู่หลายบรรทัด 14e74d71293b7b9.png

10 ย้ายแอปพลิเคชันไปยังเว็บ

เราจะโฮสต์แอปพลิเคชันนี้เพื่อให้เข้าถึงได้จากอินเทอร์เน็ต

สร้างฟังก์ชัน Cloud Run

  1. ในคอนโซล Google Cloud ให้ไปที่ Cloud Run Functions โดยใช้ลิงก์ต่อไปนี้

https://console.cloud.google.com/run/create?deploymentType=function

  1. ใน "กําหนดค่า" ให้ตั้งชื่อฟังก์ชันเป็น "retail-engine" และเลือกภูมิภาคเป็น "us-central1"
  2. ใน URL ปลายทาง ให้เลือกรันไทม์เป็น Java 17
  3. ในการตรวจสอบสิทธิ์ ให้เลือกอนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์
  4. ขยายคอนเทนเนอร์, วอลุ่ม, เครือข่าย, ความปลอดภัย แล้วคลิกแท็บเครือข่าย
  5. เลือกเชื่อมต่อกับ VPC สําหรับการรับส่งข้อมูลขาออก แล้วคลิกใช้เครื่องมือเชื่อมต่อการเข้าถึง VPC แบบ Serverless
  6. ในเครือข่าย ให้คลิกเพิ่มเครื่องมือเชื่อมต่อ VPC ใหม่ เปิดใช้ Serverless VPC Access API หากยังไม่ได้เปิดใช้
  7. ในเครื่องมือเชื่อมต่อที่สร้าง ให้ตั้งชื่อเป็น alloydb-test-conn
  8. ตั้งค่าภูมิภาคเป็น us-central
  9. ปล่อยค่าเครือข่ายเป็นค่าเริ่มต้น และตั้งค่าซับเน็ตเป็นช่วง IP ที่กำหนดเองซึ่งมีช่วง IP ของ 10.8.0.0 หรือค่าที่คล้ายกันซึ่งพร้อมใช้งาน
  10. ขยายการตั้งค่าแสดงการปรับขนาด แล้วตั้งค่าอินสแตนซ์ขั้นต่ำเป็น 2 และอินสแตนซ์สูงสุดเป็น 3
  11. เลือกประเภทอินสแตนซ์เป็น f1-micro ต่อไปนี้คือตัวเลือกสร้างตัวเชื่อมต่อ

bed4b2af6795a8ba.png

  1. คลิกสร้างเพื่อสร้างตัวเชื่อมต่อ
  2. ในการกำหนดเส้นทางการรับส่งข้อมูล ให้เลือกกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดไปยัง VPC
  3. คลิกสร้างเพื่อสร้างฟังก์ชัน

ทำให้แอปพลิเคชันใช้งานได้

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

  1. ใน Cloud Run ให้คลิกแท็บบริการ แล้วคลิกฟังก์ชัน retail-engine
  2. คลิกแท็บแหล่งที่มา ตั้งค่าจุดเริ่มต้นของฟังก์ชันเริ่มต้นเป็น "gcfv2.HelloHttpFunction"
  3. แทนที่เนื้อหาของไฟล์ HelloHttpFunction.java ด้วยเนื้อหาจากไฟล์ Java นี้
  4. อัปเดตรายละเอียด AlloyDbJdbcConnector ในไฟล์ตามรายละเอียดของอินสแตนซ์และคลัสเตอร์ AlloyDB แทนที่ $PROJECT_ID ด้วยรหัสโปรเจ็กต์ของคลัสเตอร์และอินสแตนซ์ AlloyDB

a89dc5af3580fbcf.png

  1. แทนที่เนื้อหาของไฟล์ pom.xml ด้วยเนื้อหาของไฟล์ XML นี้
  2. คลิกบันทึกและทําให้การเผยแพร่ใหม่เพื่อเผยแพร่ฟังก์ชัน

11 ทดสอบแอปพลิเคชัน Retail Engine

เมื่อมีการทําให้ Cloud Function ที่อัปเดตแล้วใช้งานได้ คุณควรเห็นปลายทางในรูปแบบต่อไปนี้

https://retail-engine-PROJECT_NUMBER.us-central1.run.app

คุณสามารถทดสอบได้จากเทอร์มินัล Cloud Shell โดยเรียกใช้คำสั่งต่อไปนี้

gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'

หรือจะทดสอบฟังก์ชัน Cloud Run ก็ได้ ดังนี้

PROJECT_ID=$(gcloud config get-value project)

curl
-X POST https://retail-engine-$PROJECT_NUMBER.us-central1.run.app \
 
-H 'Content-Type: application/json' \
 
-d '{"search":"I want some kids clothes themed on Disney"}' \
 
| jq .

และผลลัพธ์ที่ได้คือ

88bc1ddfb5644a28.png

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

12 ทำความเข้าใจขั้นตอนคำแนะนำชุดแต่งกาย

แอปคําแนะนําชุดเป็นแอปพลิเคชัน Sprint Boot ที่กําหนดค่าให้ทํางานร่วมกับการฝังที่เราสร้างในแอปพลิเคชันเครื่องยนต์ค้าปลีก AlloyDB พร้อมกับ Gemini และ Imagen เพื่อสร้างตัวเลือกการจัดสไตล์ชุดเครื่องแต่งกายที่มองเห็นได้ นอกจากนี้ คุณยังเพิ่มพรอมต์ที่กำหนดเองและปรับเปลี่ยนคําแนะนําได้อีกด้วย

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

หากต้องการเริ่มสร้างแอปแนะนำชุดเสื้อผ้า ให้ทำตามขั้นตอนต่อไปนี้

  1. ใน Cloud Run ให้เปิดแอป retail-engine และจด URL ของแอปพลิเคชัน นี่คือที่เก็บข้อมูลเชิงลึกที่เราจะใช้สร้างคำแนะนำที่คล้ายกัน
  2. โคลนที่เก็บ https://github.com/AbiramiSukumaran/outfit-recommender/ ใน IDE สำหรับแบบฝึกหัดนี้ ขั้นตอนที่แสดงจะดำเนินการใน IDE ของ Visual Studio Code
git clone https://github.com/AbiramiSukumaran/outfit-recommender/

ไฟล์สำคัญบางส่วนในไดเรกทอรีของแอปมีดังนี้

  • src/main: ไดเรกทอรีต้นทางที่มีไฟล์แอปพลิเคชันและ HTML
  • HelloWorldApplication.java: จุดเข้าใช้งานหลักสําหรับแอปพลิเคชัน Spring Boot
  • HelloWorldController.java: ตัวควบคุม REST ของ Spring Boot ที่จัดการคําขอ HTTP ที่เกี่ยวข้องกับแอปพลิเคชันแนะนำชุดแต่งกาย ไฟล์นี้จะจัดการคําขอ GET และ POST, ประมวลผลพรอมต์ของผู้ใช้, วิเคราะห์รูปภาพ, โต้ตอบกับการฝัง AlloyDB และแสดงผลลัพธ์สุดท้ายไปยัง UI ตัวควบคุมนี้จะเรียกคลาส GenerateImageSample
  • GenerateImageSample.java: มีคลาสการสร้างรูปภาพที่เชื่อมต่อกับ Vertex AI จัดรูปแบบพรอมต์ของผู้ใช้ เรียก API ไปยังโมเดล Imagen ส่งคืนรูปภาพที่คาดการณ์ไปยังคลาสตัวควบคุม
  • Resources: ไดเรกทอรีนี้มีรูปภาพและไฟล์ HTML ที่จําเป็นสําหรับสร้าง UI ของแอปพลิเคชัน
  • Pom.xml: กําหนดการขึ้นต่อกันและการกําหนดค่าโปรเจ็กต์
  1. ใน Visual Studio Code ให้เปิด HelloWorldController.java และอัปเดตอินสแตนซ์ของรหัสโปรเจ็กต์และตำแหน่งตามตำแหน่งที่สร้างอินสแตนซ์ AlloyDB

9fff8f5cbb62567.png

  1. อัปเดต endpoint เป็น URL ของแอป Retail Engine ที่คุณโฮสต์ไว้ก่อนหน้านี้

ae6227e88eec5485.png

  1. เปิด GenerateImageSample.java แล้วอัปเดตรหัสโปรเจ็กต์และตำแหน่งตามตำแหน่งที่สร้างอินสแตนซ์ AlloyDB

db1f81a6f51d80de.png

  1. บันทึกไฟล์ทั้งหมด

ตอนนี้เราจะทําให้แอปพลิเคชันนี้ใช้งานได้ในรันไทม์แบบไม่มีเซิร์ฟเวอร์ของ Cloud Run

13 เผยแพร่แอปพลิเคชันบนเว็บ

เมื่อเพิ่มโปรเจ็กต์ ตำแหน่ง และรายละเอียดแอป Retail Engine ที่เกี่ยวข้องลงในแอปพลิเคชัน Spring Boot ของโปรแกรมแนะนำชุดเสื้อผ้าแล้ว เราจึงสามารถทำให้แอปพลิเคชันใช้งานได้ใน Cloud Run

เราจะใช้คําสั่ง gcloud run deploy ในเทอร์มินัล Visual Code Studio เพื่อทําให้การเผยแพร่แอปพลิเคชัน สำหรับ Visual Studio Code คุณสามารถติดตั้งส่วนขยาย Google Cloud Code เพื่อเริ่มใช้ gcloud CLI

หากต้องการทําให้การนําแอปพลิเคชันไปใช้ใช้งานได้ ให้ทําตามขั้นตอนต่อไปนี้

  1. ใน IDE ให้เปิดไดเรกทอรีที่โคลนและเปิดเทอร์มินัล สำหรับ Visual Code Studio ให้คลิก Terminal > New Terminal
  2. ทําตามวิธีการในเอกสารนี้เพื่อติดตั้ง gcloud CLI
  3. หากคุณใช้ Visual Code Studio ให้คลิกส่วนขยาย ค้นหา Google Cloud Code แล้วติดตั้งส่วนขยาย
  4. ในเทอร์มินัล IDE ให้ตรวจสอบสิทธิ์บัญชี Google โดยเรียกใช้คําสั่งต่อไปนี้
gcloud auth application-default login
  1. ตั้งค่ารหัสโปรเจ็กต์เป็นโปรเจ็กต์เดียวกับที่มีอินสแตนซ์ AlloyDB อยู่
gcloud config set project PROJECT_ID
  1. เริ่มกระบวนการติดตั้งใช้งาน
gcloud run deploy
  1. ใน Source code location ให้กด Enter เพื่อเลือกไดเรกทอรี GitHub ที่โคลน
  2. ใน Service name ให้ป้อนชื่อบริการ เช่น outfit-recommender แล้วกด Enter
  3. ใน Please specify a region ให้ป้อนตำแหน่งที่โฮสต์อินสแตนซ์ AlloyDB และแอปพลิเคชัน retail-engine เช่น 32 สำหรับ us-central1 แล้วกด Enter

12c0de4248660d4d.png

  1. ใน Allow unauthenticated invocations to [..] ให้ป้อน Y แล้วกด Enter

รูปภาพต่อไปนี้แสดงความคืบหน้าในการติดตั้งใช้งานแอปพลิเคชัน

1babbb82faa31fce.png

14 ทดสอบแอปพลิเคชันแนะนำชุด

หลังจากทำให้แอปพลิเคชันใช้งานได้กับ Cloud Run เรียบร้อยแล้ว คุณจะเห็นบริการใน Google Cloud Console ดังนี้

  1. ในคอนโซล Google Cloud ให้ไปที่ Cloud Run
  2. ในส่วนบริการ ให้คลิกบริการผู้แนะนำชุดแต่งกายที่คุณติดตั้งใช้งาน คุณควรเห็นทั้งบริการ retail-engine และ outfit-recommender ดังนี้

24dd0aebe224059e.png

  1. คลิก URL ของแอปพลิเคชันเพื่อเปิด UI ของแอปแนะนำ

cdc9c1625b1648d2.png

    The following is a sample URL that you will use:

https://outfit-recommender-22905290964.us-central1.run.app/style

คุณจะเห็นแอปพลิเคชันที่ติดตั้งใช้งานแล้วดังต่อไปนี้

76245d1a6152d313.png

การใช้แอปพลิเคชัน

หากต้องการเริ่มใช้แอปพลิเคชัน ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกอัปโหลด แล้วอัปโหลดรูปภาพเสื้อผ้า
  2. หลังจากอัปโหลดรูปภาพแล้ว ให้คลิกสไตล์ แอปพลิเคชันใช้รูปภาพเป็นพรอมต์และสร้างตัวเลือกด้านล่างตามพรอมต์จากแอปเครื่องมือสำหรับค้าปลีกที่มีการฝังสําหรับชุดข้อมูลค้าปลีก

แอปจะสร้างคำแนะนำรูปภาพพร้อมกับพรอมต์ตามรูปภาพที่มีคำแนะนำการจัดสไตล์ ตัวอย่างเช่น A white semi-sheer button up blouse with pink floral patterns on it, with balloon sleeves.

  1. คุณสามารถส่งพรอมต์เพิ่มเติมไปยังคําแนะนําสไตล์ที่สร้างขึ้นโดยอัตโนมัตินี้ได้ ตัวอย่างเช่น STYLE RECOMMENDATION: Cute brown skirt on a curly updo. Make it photo realistic. Accessorize with cherry earrings and burgundy plastic case sling bag.
  2. คลิกแสดงเพื่อดูการจัดรูปแบบขั้นสุดท้าย

38d6d08e9a0a44c0.png

15 ล้างข้อมูล

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

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์

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

ยินดีด้วย คุณได้ทำการค้นหาแบบคล้ายกันโดยใช้ AlloyDB, pgvector และการค้นหาด้วยเวกเตอร์เรียบร้อยแล้ว พร้อมกับใช้ผลการค้นหากับโมเดล Imagen ที่มีประสิทธิภาพเพื่อสร้างคําแนะนําการจัดสไตล์