Vectorize
มันคืออะไร
ลองจินตนาการว่าคุณให้ "พิกัด" กับรูปภาพ ประโยค หรือเพลงทุกชิ้น เพื่อให้สิ่งที่คล้ายกันไปอยู่ใกล้กันบนแผนที่ — จากนั้นคำสั่ง "หาสิ่งที่คล้ายกับอันนี้ให้หน่อย" ก็แค่แปลว่า "หาจุดที่อยู่ใกล้ที่สุด" Vectorize คือฐานข้อมูลเวกเตอร์ (vector ) ของ Cloudflare ซึ่งเป็นที่เก็บข้อมูลที่สร้างมาเพื่อทำงานแบบนี้โดยเฉพาะ คุณบันทึก embeddings — ชุดตัวเลขที่จับความหมายของข้อความ รูปภาพ หรือข้อมูลอื่น ๆ เอาไว้ — แล้วขอให้ระบบหาชุดที่คล้ายกับชุดที่คุณให้มากที่สุด นี่คือครึ่งหนึ่งของงาน "retrieval" (การค้นคืน) ใน semantic search และ RAG (Retrieval-Augmented Generation — การป้อนข้อเท็จจริงที่เกี่ยวข้องให้ AI นำไปอ้างอิงได้) มันเชื่อมต่อเข้ากับ Worker ได้โดยตรง ควบคู่กับ Workers AI ซึ่งสามารถสร้าง embeddings ให้ได้
จุดแข็ง
- ออกแบบมาเฉพาะสำหรับการค้นหาความคล้ายคลึง (similarity search) บน embeddings พร้อมการค้นหาเพื่อนบ้านที่ใกล้ที่สุด (nearest-neighbor) ที่รวดเร็ว
- เชื่อมต่อเข้ากับ Workers ได้โดยตรง ไม่ต้องรันบริการเวกเตอร์แยกต่างหาก
- ใช้งานคู่กับ Workers AI ได้อย่างลงตัว สำหรับสร้างไปป์ไลน์ RAG แบบครบวงจรบน Cloudflare
- รองรับการกรองด้วย metadata เพื่อจำกัดขอบเขตผลลัพธ์
- ทำงานแบบ และพร้อมใช้งานทั่วโลก ขยายขนาดไปพร้อมกับแอปของคุณ
ข้อแลกเปลี่ยน
- มันเก็บแค่เวกเตอร์และ metadata ไม่ใช่เอกสารต้นฉบับของคุณ — เอกสารต้นฉบับต้องเก็บไว้ใน D1 (ฐานข้อมูล ) หรือ R2 (ที่เก็บไฟล์)
- คุณต้องสร้าง embeddings เอง (เช่น ผ่าน Workers AI) ก่อนจะนำไปเพิ่มเข้าฐานข้อมูล
- มิติ (dimensions) ของ index และค่าตัวชี้วัดระยะทาง (distance metric) จะถูกกำหนดตายตัวตั้งแต่ตอนสร้าง — ต้องเลือกให้ดีตั้งแต่แรก
- มันเป็นที่เก็บข้อมูลเฉพาะทาง ไม่ใช่ฐานข้อมูลอเนกประสงค์
เมื่อไรควรใช้
ใช้ Vectorize สำหรับ semantic search การแนะนำ (recommendations) การกำจัดข้อมูลซ้ำ (deduplication) และขั้นตอน retrieval ของ RAG — ทุกครั้งที่ "หาสิ่งที่คล้ายกับอันนี้มากที่สุด" ตอบโจทย์ได้ดีกว่าการค้นหาด้วยคำสำคัญแบบตรงตัว (exact keyword match)
เข้ากับ vibe coding อย่างไร
Vectorize ช่วยให้ สร้างฟีเจอร์ RAG แบบครบวงจรได้โดยไม่ต้องออกจาก Cloudflare เลย: Workers AI สร้าง embeddings, Vectorize เก็บและค้นหาข้อมูลเหล่านั้น ส่วน D1 หรือ R2 เก็บเอกสารต้นฉบับเอาไว้ บอก agent ล่วงหน้าว่าใช้โมเดล embedding ตัวไหน เพราะมิติของ index ต้องตรงกับผลลัพธ์ (output) ของโมเดลนั้น ตัวอย่างด้านล่างสร้าง index ขึ้นมาแล้วเชื่อมต่อ (bind) เข้ากับ Worker
# wrangler.toml
[[vectorize]]
binding = "VECTORIZE"
index_name = "docs-index"
# Dimensions must match your embedding model's output
npx wrangler vectorize create docs-index --dimensions=768 --metric=cosine