1. บทนำ
ความก้าวหน้าล่าสุดในการเรียนรู้เชิงลึกทำให้สามารถแสดงข้อความและข้อมูลอื่นๆ ในลักษณะที่สื่อถึงความหมายเชิงความหมายได้ ซึ่งนำไปสู่วิธีการค้นหาแบบใหม่ที่เรียกว่าการค้นหาเวกเตอร์ ซึ่งใช้การแสดงข้อความแบบเวกเตอร์ (ที่เรียกว่าการฝัง) เพื่อค้นหาเอกสารที่เกี่ยวข้องกับคำค้นหาของผู้ใช้มากที่สุด เราขอแนะนำให้ใช้การค้นหาเวกเตอร์แทนการค้นหาแบบเดิมสำหรับแอปพลิเคชันต่างๆ เช่น การค้นหาเครื่องแต่งกาย ซึ่งผู้ใช้มักค้นหาสินค้าตามคำอธิบาย สไตล์ หรือบริบท แทนที่จะค้นหาตามชื่อผลิตภัณฑ์หรือชื่อแบรนด์ที่ตรงกัน เราสามารถผสานรวมฐานข้อมูล Cloud Spanner กับ Vector Search เพื่อทำการจับคู่ความคล้ายกันของเวกเตอร์ได้ การใช้ Spanner และ Vector Search ร่วมกันจะช่วยให้ลูกค้าสร้างการผสานรวมที่มีประสิทธิภาพซึ่งรวมความพร้อมใช้งาน ความน่าเชื่อถือ และความสามารถในการปรับขนาดของ Spanner เข้ากับความสามารถในการค้นหาความคล้ายคลึงขั้นสูงของ Vertex AI Vector Search การค้นหานี้ดำเนินการโดยการเปรียบเทียบการฝังของรายการในดัชนีของ Search เวกเตอร์ และแสดงผลรายการที่คล้ายกันมากที่สุด
กรณีการใช้งาน
ลองนึกภาพว่าคุณเป็นนักวิทยาศาสตร์ข้อมูลที่ผู้ค้าปลีกแฟชั่นซึ่งพยายามติดตามเทรนด์ การค้นหาผลิตภัณฑ์ และคำแนะนำที่เปลี่ยนแปลงไปอย่างรวดเร็ว ความท้าทายคือคุณมีทรัพยากรและข้อมูลแบบแยกส่วนที่จำกัด บล็อกโพสต์นี้แสดงวิธีใช้กรณีการใช้งานคำแนะนำเกี่ยวกับเครื่องแต่งกายโดยใช้วิธีการค้นหาความคล้ายคลึงในข้อมูลเครื่องแต่งกาย โดยจะครอบคลุมขั้นตอนต่อไปนี้
- ข้อมูลที่มาจาก Spanner
- เวกเตอร์ที่สร้างขึ้นสำหรับข้อมูลเครื่องแต่งกายโดยใช้ ML.PREDICT และจัดเก็บไว้ใน Spanner
- ข้อมูลเวกเตอร์ Spanner ที่ผสานรวมกับ Vector Search โดยใช้ Dataflow และเวิร์กโฟลว์
- การค้นหาเวกเตอร์ดำเนินการเพื่อค้นหารายการที่คล้ายกันสำหรับอินพุตที่ผู้ใช้ป้อน
เราจะสร้างเว็บแอปพลิเคชันเดโมเพื่อทำการค้นหาเครื่องแต่งกายตามข้อมูลจากผู้ใช้ แอปพลิเคชันนี้ช่วยให้ผู้ใช้ค้นหาเครื่องแต่งกายได้โดยการป้อนคำอธิบายที่เป็นข้อความ
Spanner ไปยังดัชนี Vector Search:
ระบบจะจัดเก็บข้อมูลสำหรับการค้นหาเครื่องแต่งกายไว้ใน Spanner เราจะเรียกใช้ API Embeddings ของ Vertex AI ในโครงสร้าง ML.PREDICT โดยตรงจากข้อมูล Spanner จากนั้นเราจะใช้ประโยชน์จากงาน Dataflow และเวิร์กโฟลว์ที่อัปโหลดข้อมูลนี้ (สินค้าคงคลังและการฝัง) แบบเป็นกลุ่มไปยังการค้นหาแบบเวกเตอร์ของ Vertex AI และรีเฟรชดัชนี
การเรียกใช้คำค้นหาของผู้ใช้ในดัชนี
เมื่อผู้ใช้ป้อนคำอธิบายเครื่องแต่งกาย แอปจะสร้างการฝังแบบเรียลไทม์โดยใช้ Text Embeddings API จากนั้นระบบจะส่งข้อมูลนี้เป็นอินพุตไปยัง Vector Search API เพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้อง 10 รายการจากดัชนีและแสดงรูปภาพที่เกี่ยวข้อง
ภาพรวมสถาปัตยกรรม
สถาปัตยกรรมของแอปพลิเคชันการค้นหา Spanner - Vector แสดงอยู่ในแผนภาพ 2 ส่วนต่อไปนี้
Spanner ไปยังดัชนี Vector Search: 
แอปไคลเอ็นต์เพื่อเรียกใช้การค้นหาของผู้ใช้ในดัชนี:
สิ่งที่คุณจะสร้าง
Spanner ไปยังดัชนีเวกเตอร์:
- ฐานข้อมูล Spanner เพื่อจัดเก็บและจัดการข้อมูลต้นฉบับและการฝังที่เกี่ยวข้อง
- งานเวิร์กโฟลว์ที่อัปโหลดข้อมูล (รหัสและการฝัง) เป็นกลุ่มลงในฐานข้อมูล Vertex AI Vector Search
- Vector Search API ที่ใช้เพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้องจากดัชนี
การเรียกใช้คำค้นหาของผู้ใช้ในดัชนี
- เว็บแอปพลิเคชันที่ช่วยให้ผู้ใช้ป้อนคำอธิบายข้อความของเครื่องแต่งกาย ดำเนินการค้นหาความคล้ายคลึงโดยใช้ปลายทางดัชนีที่ทำให้ใช้งานได้ และแสดงเครื่องแต่งกายที่ใกล้เคียงกับอินพุตมากที่สุด
วิธีการทำงาน
เมื่อผู้ใช้ป้อนคำอธิบายข้อความของเครื่องแต่งกาย เว็บแอปพลิเคชันจะส่งคำอธิบายไปยัง Vector Search API จากนั้น Vector Search API จะใช้การฝังของคำอธิบายเครื่องแต่งกายเพื่อค้นหาคำอธิบายผลิตภัณฑ์ที่เกี่ยวข้องมากที่สุดจากดัชนี จากนั้นระบบจะแสดงรายละเอียดผลิตภัณฑ์และรูปภาพที่เกี่ยวข้องต่อผู้ใช้ ขั้นตอนการทำงานทั่วไปมีดังนี้
- สร้างการฝังสำหรับข้อมูลที่จัดเก็บไว้ใน Spanner
- ส่งออกและอัปโหลดการฝังลงในดัชนีของ Search ใน Vector Search
- ค้นหาดัชนีของ Vector Search เพื่อหารายการที่คล้ายกันโดยทำการค้นหาเพื่อนบ้านที่ใกล้ที่สุด
2. ข้อกำหนด
ก่อนเริ่มต้น
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าโปรเจ็กต์เปิดใช้การเรียกเก็บเงินแล้วหรือไม่
- ตรวจสอบว่าได้เปิดใช้ API ที่จำเป็นทั้งหมด (Cloud Spanner, Vertex AI, Google Cloud Storage) แล้ว
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และโหลด gcloud ไว้ล่วงหน้า โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <YOUR_PROJECT_ID>
- ไปที่หน้า Cloud Spanner ด้วยโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่เพื่อเริ่มต้นใช้งาน
3. แบ็กเอนด์: สร้างแหล่งข้อมูลและการฝัง Spanner
ในกรณีการใช้งานนี้ ฐานข้อมูล Spanner จะจัดเก็บสินค้าคงคลังของเครื่องแต่งกายพร้อมรูปภาพและคำอธิบายที่เกี่ยวข้อง ตรวจสอบว่าคุณได้สร้างการฝังสำหรับคำอธิบายข้อความและจัดเก็บไว้ในฐานข้อมูล Spanner เป็น ARRAY<float64>
- สร้างข้อมูล Spanner
สร้างอินสแตนซ์ชื่อ "spanner-vertex" และฐานข้อมูลชื่อ "spanner-vertex-embeddings" สร้างตารางโดยใช้ DDL ดังนี้
CREATE TABLE
apparels ( id NUMERIC,
category STRING(100),
sub_category STRING(50),
uri STRING(200),
content STRING(2000),
embedding ARRAY<FLOAT64>
)
PRIMARY KEY
(id);
- แทรกข้อมูลลงในตารางโดยใช้ SQL ของ INSERT
สคริปต์แทรกสำหรับข้อมูลตัวอย่างมีให้ใช้งานที่นี่
- สร้างโมเดลการฝังข้อความ
เราจำเป็นต้องใช้ข้อมูลนี้เพื่อสร้างการฝังสำหรับเนื้อหาในอินพุต DDL สำหรับตารางเดียวกันมีดังนี้
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/abis-345004/locations/us-central1/publishers/google/models/textembedding-gecko');
- สร้างการฝังข้อความสำหรับข้อมูลแหล่งที่มา
สร้างตารางเพื่อจัดเก็บการฝังและแทรกการฝังที่สร้างขึ้น ในแอปพลิเคชันฐานข้อมูลในโลกแห่งความเป็นจริง การโหลดข้อมูลไปยัง Spanner จนถึงขั้นตอนที่ 2 จะเป็นการทำธุรกรรม เพื่อรักษาแนวทางปฏิบัติแนะนำในการออกแบบไว้เหมือนเดิม ฉันจึงต้องการให้ตารางธุรกรรมเป็นแบบปกติ ดังนั้นจึงสร้างตารางแยกต่างหากสำหรับ Embedding
CREATE TABLE apparels_embeddings (id string(100), embedding ARRAY<FLOAT64>)
PRIMARY KEY (id);
INSERT INTO apparels_embeddings(id, embeddings)
SELECT CAST(id as string), embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT id, content from apparels)
) ;
ตอนนี้เนื้อหาและการฝังจำนวนมากพร้อมแล้ว เรามาสร้างดัชนีและอุปกรณ์ปลายทาง Vector Search เพื่อจัดเก็บการฝังที่จะช่วยดำเนินการ Vector Search กัน
4. งานเวิร์กโฟลว์: การส่งออกข้อมูล Spanner ไปยัง Vector Search
- สร้าง Bucket ของ Cloud Storage
ซึ่งจำเป็นต่อการจัดเก็บการฝังจาก Spanner ใน Bucket ของ GCS ในรูปแบบ JSON ที่ Vector Search คาดหวังเป็นอินพุต สร้างที่เก็บข้อมูลในภูมิภาคเดียวกับข้อมูลใน Spanner สร้างโฟลเดอร์ภายในหากจำเป็น แต่ส่วนใหญ่จะสร้างไฟล์ที่ว่างเปล่าชื่อ empty.json ในโฟลเดอร์
- ตั้งค่า Cloud Workflow
หากต้องการตั้งค่าการส่งออกแบบกลุ่มจาก Spanner ไปยังดัชนี Vector Search ของ Vertex AI ให้ทำดังนี้
สร้างดัชนีที่ว่างเปล่า
ตรวจสอบว่าดัชนีการค้นหาเวกเตอร์อยู่ในภูมิภาคเดียวกับ Bucket ของ Cloud Storage และข้อมูล ทำตามวิธีการ 11 ขั้นตอนในแท็บคอนโซลในส่วนสร้างดัชนีสำหรับการอัปเดตเป็นกลุ่มในหน้าจัดการดัชนี ในโฟลเดอร์ที่ส่งไปยัง contentsDeltaUri ให้สร้างไฟล์ว่างชื่อ empty.json เนื่องจากคุณจะสร้างดัชนีไม่ได้หากไม่มีไฟล์นี้ ซึ่งจะเป็นการสร้างดัชนีที่ว่างเปล่า
หากมีดัชนีอยู่แล้ว ให้ข้ามขั้นตอนนี้ เวิร์กโฟลว์จะเขียนทับดัชนี
หมายเหตุ: คุณจะทำให้ใช้งานได้ดัชนีที่ว่างเปล่าไปยังอุปกรณ์ปลายทางไม่ได้ ดังนั้นเราจึงเลื่อนขั้นตอนการติดตั้งใช้งานไปยังปลายทางไปเป็นขั้นตอนถัดไป หลังจากส่งออกข้อมูลเวกเตอร์ไปยัง Cloud Storage
โคลนที่เก็บ Git นี้: มีหลายวิธีในการโคลนที่เก็บ Git วิธีหนึ่งคือการเรียกใช้คำสั่งต่อไปนี้โดยใช้ GitHub CLI เรียกใช้ 2 คำสั่งด้านล่างจากเทอร์มินัล Cloud Shell
gh repo clone cloudspannerecosystem/spanner-ai
cd spanner-ai/vertex-vector-search/workflows
โฟลเดอร์นี้มีไฟล์ 2 ไฟล์
batch-export.yaml: นี่คือคำจำกัดความของเวิร์กโฟลว์sample-batch-input.json: นี่คือตัวอย่างพารามิเตอร์อินพุตเวิร์กโฟลว์
ตั้งค่า input.json จากไฟล์ตัวอย่าง: ขั้นแรก ให้คัดลอก json ตัวอย่าง
cp sample-batch-input.json input.json
จากนั้นแก้ไข input.json โดยระบุรายละเอียดสำหรับโปรเจ็กต์ ในกรณีนี้ JSON ควรมีลักษณะดังนี้
{
"project_id": "<<YOUR_PROJECT>>",
"location": "<<us-central1>>",
"dataflow": {
"temp_location": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_temp"
},
"gcs": {
"output_folder": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_output"
},
"spanner": {
"instance_id": "spanner-vertex",
"database_id": "spanner-vertex-embeddings",
"table_name": "apparels_embeddings",
"columns_to_export": "embedding,id"
},
"vertex": {
"vector_search_index_id": "<<YOUR_INDEX_ID>>"
}
}
ตั้งค่าสิทธิ์
สำหรับสภาพแวดล้อมการใช้งานจริง เราขอแนะนำอย่างยิ่งให้สร้างบัญชีบริการใหม่และให้บทบาท IAM อย่างน้อย 1 บทบาทที่มีสิทธิ์ขั้นต่ำที่จำเป็นสำหรับการจัดการบริการ คุณต้องมีบทบาทต่อไปนี้เพื่อตั้งค่าเวิร์กโฟลว์ในการส่งออกข้อมูลจาก Spanner (การฝัง) ไปยังดัชนี Vector Search
โดยค่าเริ่มต้นจะใช้บัญชีบริการเริ่มต้นของ Compute Engine
หากใช้บัญชีบริการที่กำหนดค่าด้วยตนเอง คุณต้องรวมบทบาทต่อไปนี้
หากต้องการทริกเกอร์งาน Dataflow ให้ใช้บทบาท Dataflow Admin, Dataflow Worker
หากต้องการแอบอ้างบัญชีบริการของผู้ปฏิบัติงาน Dataflow ให้ใช้บทบาท ผู้ใช้บัญชีบริการ
หากต้องการเขียนบันทึก ให้ใช้บทบาท Logs Writer
หากต้องการทริกเกอร์การสร้างดัชนี Vertex AI Vector Search ใหม่ ให้ทำดังนี้ ผู้ใช้ Vertex AI
บัญชีบริการของผู้ปฏิบัติงาน Dataflow:
หากใช้บัญชีบริการที่กำหนดค่าด้วยตนเอง คุณต้องรวมบทบาทต่อไปนี้
หากต้องการจัดการ Dataflow ให้ใช้บทบาทผู้ดูแลระบบ Dataflow และผู้ปฏิบัติงาน Dataflow หากต้องการอ่านข้อมูลจาก Spanner ให้ใช้บทบาทผู้อ่านฐานข้อมูล Cloud Spanner สิทธิ์เขียนใน Container Registry ของ GCS ที่เลือก: เจ้าของ Bucket ของ GCS Storage
- ทำให้ Cloud Workflows ใช้งานได้
ทำให้ไฟล์ YAML ของเวิร์กโฟลว์ใช้งานได้กับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google คุณสามารถกำหนดค่าภูมิภาคหรือสถานที่ที่จะเรียกใช้เวิร์กโฟลว์เมื่อดำเนินการ
gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1" [--service account=<service_account>]
or
gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1"
ตอนนี้เวิร์กโฟลว์ควรจะปรากฏในหน้าเวิร์กโฟลว์ในคอนโซล Google Cloud แล้ว
หมายเหตุ: คุณยังสร้างและทำให้เวิร์กโฟลว์ใช้งานได้จากคอนโซล Google Cloud ได้ด้วย ทำตามข้อความแจ้งใน Cloud Console สำหรับคำจำกัดความของเวิร์กโฟลว์ ให้คัดลอกและวางเนื้อหาของ batch-export.yaml
เมื่อดำเนินการเสร็จแล้ว ให้เรียกใช้เวิร์กโฟลว์เพื่อให้การส่งออกข้อมูลเริ่มต้นขึ้น
- เรียกใช้เวิร์กโฟลว์ระบบคลาวด์
เรียกใช้คำสั่งต่อไปนี้เพื่อดำเนินการเวิร์กโฟลว์
gcloud workflows execute vector-export-workflow --data="$(cat input.json)"
การดำเนินการควรแสดงในแท็บการดำเนินการในเวิร์กโฟลว์ ซึ่งจะโหลดข้อมูลลงในฐานข้อมูลการค้นหาเวกเตอร์และจัดทำดัชนี
หมายเหตุ: คุณยังเรียกใช้จากคอนโซลได้โดยใช้ปุ่ม "เรียกใช้" ทำตามข้อความแจ้งและสำหรับอินพุต ให้คัดลอกและวางเนื้อหาของ input.json ที่ปรับแต่งแล้วของคุณ
5. ทำให้ดัชนี Vector Search ใช้งานได้
ทำให้ดัชนีใช้งานได้กับปลายทาง
คุณทำตามขั้นตอนด้านล่างเพื่อทำให้ดัชนีใช้งานได้
- ในหน้าดัชนีการค้นหาเวกเตอร์ คุณควรเห็นปุ่ม "DEPLOY" ข้างดัชนีที่เพิ่งสร้างในขั้นตอนที่ 2 ของส่วนก่อนหน้า หรือจะไปที่หน้าข้อมูลดัชนีแล้วคลิกปุ่ม "DEPLOY TO ENDPOINT" ก็ได้
- ระบุข้อมูลที่จำเป็นและทำให้ใช้งานได้ดัชนีไปยังอุปกรณ์ปลายทาง
หรือจะดูสมุดบันทึกนี้เพื่อนำไปใช้งานกับปลายทางก็ได้ (ข้ามไปยังส่วนการนำไปใช้งานของสมุดบันทึก) เมื่อติดตั้งใช้งานแล้ว ให้จดรหัสดัชนีและ URL ปลายทางที่ติดตั้งใช้งาน
6. ส่วนหน้า: ข้อมูลผู้ใช้ไปยัง Vector Search
มาสร้างแอปพลิเคชัน Python อย่างง่ายด้วย UX ที่ขับเคลื่อนโดย Gradio เพื่อทดสอบการติดตั้งใช้งานอย่างรวดเร็ว คุณสามารถดูการติดตั้งใช้งานที่นี่เพื่อติดตั้งใช้งานแอปเดโมนี้ใน Notebook Colab ของคุณเอง
- เราจะใช้ aiplatform python sdk เพื่อเรียกใช้ Embeddings API และเรียกใช้ปลายทางดัชนีของ Search ของ Vector Search
# [START aiplatform_sdk_embedding]
!pip install google-cloud-aiplatform==1.35.0 --upgrade --quiet --user
import vertexai
vertexai.init(project=PROJECT_ID, location="us-central1")
from vertexai.language_models import TextEmbeddingModel
import sys
if "google.colab" in sys.modules:
# Define project information
PROJECT_ID = " " # Your project id
LOCATION = " " # Your location
# Authenticate user to Google Cloud
from google.colab import auth
auth.authenticate_user()
- เราจะใช้ Gradio เพื่อสาธิตแอปพลิเคชัน AI ที่เรากำลังสร้างอย่างรวดเร็วและง่ายดายด้วยอินเทอร์เฟซผู้ใช้ โปรดรีสตาร์ทรันไทม์ก่อนที่จะทำตามขั้นตอนนี้
!pip install gradio
import gradio as gr
- จากเว็บแอปเมื่อผู้ใช้ป้อนข้อมูล ให้เรียกใช้ Embeddings API โดยเราจะใช้โมเดลการฝังข้อความ textembedding-gecko@latest
วิธีการด้านล่างจะเรียกใช้โมเดลการฝังข้อความและแสดงผลการฝังเวกเตอร์สำหรับข้อความที่ผู้ใช้ป้อน
def text_embedding(content) -> list:
"""Text embedding with a Large Language Model."""
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@latest")
embeddings = model.get_embeddings(content)
for embedding in embeddings:
vector = embedding.values
#print(f"Length of Embedding Vector: {len(vector)}")
return vector
ทดสอบ
text_embedding("red shorts for girls")
คุณควรเห็นเอาต์พุตที่คล้ายกับด้านล่าง (โปรดทราบว่ารูปภาพถูกครอบตัดในแนวนอน คุณจึงไม่เห็นการตอบกลับเวกเตอร์ทั้งหมด)

- ประกาศรหัสดัชนีที่ทำให้ใช้งานได้และรหัสอุปกรณ์ปลายทาง
from google.cloud import aiplatform
DEPLOYED_INDEX_ID = "spanner_vector1_1702366982123"
#Vector Search Endpoint
index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
- กำหนดเมธอด Vector Search เพื่อเรียกใช้ปลายทางดัชนีและแสดงผลลัพธ์ที่มีการจับคู่ที่ใกล้เคียงที่สุด 10 รายการสำหรับการตอบกลับการฝังที่สอดคล้องกับข้อมูลจากผู้ใช้
ในคำจำกัดความของเมธอดด้านล่างสำหรับการค้นหาเวกเตอร์ โปรดทราบว่าระบบจะเรียกใช้เมธอด find_neighbors เพื่อระบุเวกเตอร์ที่ใกล้ที่สุด 10 รายการ
def vector_search(content) -> list:
result = text_embedding(content)
#call_vector_search_api(content)
index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
# run query
response = index_endpoint.find_neighbors(
deployed_index_id = DEPLOYED_INDEX_ID,
queries = [result],
num_neighbors = 10
)
out = []
# show the results
for idx, neighbor in enumerate(response[0]):
print(f"{neighbor.distance:.2f} {spanner_read_data(neighbor.id)}")
out.append(f"{spanner_read_data(neighbor.id)}")
return out
นอกจากนี้ คุณจะเห็นการเรียกใช้เมธอด spanner_read_data ด้วย มาดูในขั้นตอนถัดไปกัน
- กำหนดการติดตั้งใช้งานเมธอดอ่านข้อมูล Spanner ที่เรียกใช้เมธอด execute_sql เพื่อดึงรูปภาพที่สอดคล้องกับรหัสของเวกเตอร์เพื่อนบ้านที่ใกล้ที่สุดซึ่งส่งคืนจากขั้นตอนสุดท้าย
!pip install google-cloud-spanner==3.36.0
from google.cloud import spanner
instance_id = "spanner-vertex"
database_id = "spanner-vertex-embeddings"
projectId = PROJECT_ID
client = spanner.Client()
client.project = projectId
instance = client.instance(instance_id)
database = instance.database(database_id)
def spanner_read_data(id):
query = "SELECT uri FROM apparels where id = " + id
outputs = []
with database.snapshot() as snapshot:
results = snapshot.execute_sql(query)
for row in results:
#print(row)
#output = "ID: {}, CONTENT: {}, URI: {}".format(*row)
output = "{}".format(*row)
outputs.append(output)
return "\n".join(outputs)
โดยควรแสดง URL ของรูปภาพที่สอดคล้องกับเวกเตอร์ที่เลือก
- สุดท้ายนี้ เรามาประกอบชิ้นส่วนต่างๆ เข้าด้วยกันในอินเทอร์เฟซผู้ใช้และทริกเกอร์กระบวนการค้นหาเวกเตอร์
from PIL import Image
def call_search(query):
response = vector_search(query)
return response
input_text = gr.Textbox(label="Enter your query. Examples: Girls Tops White Casual, Green t-shirt girls, jeans shorts, denim skirt etc.")
output_texts = [gr.Image(label="") for i in range(10)]
demo = gr.Interface(fn=call_search, inputs=input_text, outputs=output_texts, live=True)
resp = demo.launch(share = True)
คุณควรเห็นผลลัพธ์ดังที่แสดงด้านล่าง

รูปภาพ: ลิงก์
ดูวิดีโอผลลัพธ์ได้ที่นี่
7. ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
- หากไม่ต้องการลบโปรเจ็กต์ ให้ลบอินสแตนซ์ Spanner โดยไปที่อินสแตนซ์ที่คุณเพิ่งสร้างสำหรับโปรเจ็กต์นี้ แล้วคลิกปุ่มลบอินสแตนซ์ที่มุมขวาบนของหน้าภาพรวมอินสแตนซ์
- นอกจากนี้ คุณยังไปที่ดัชนี Vector Search, เลิกใช้งานปลายทางและดัชนี รวมถึงลบดัชนีได้ด้วย
8. บทสรุป
ยินดีด้วย คุณได้ติดตั้งใช้งาน Spanner - Vertex Vector Search เสร็จสมบูรณ์แล้วโดย
- การสร้างแหล่งข้อมูล Spanner และการฝังสำหรับแอปพลิเคชันที่มาจากฐานข้อมูล Spanner
- สร้างดัชนีฐานข้อมูล Vector Search
- การผสานรวมข้อมูลเวกเตอร์จาก Spanner เข้ากับ Vector Search โดยใช้ Dataflow และ Workflow
- การทำให้ใช้งานได้ของดัชนีไปยังปลายทาง
- สุดท้ายคือการเรียกใช้การค้นหาเวกเตอร์ในข้อมูลจากผู้ใช้ในการติดตั้งใช้งาน Vertex AI SDK ที่ขับเคลื่อนด้วย Python
คุณสามารถขยายการใช้งานไปยัง Use Case ของคุณเอง หรือปรับปรุง Use Case ปัจจุบันด้วยฟีเจอร์ใหม่ๆ ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถด้านแมชชีนเลิร์นนิงของ Spanner ได้ที่นี่