Vector Databases (ฐานข้อมูลเวกเตอร์)
What it is
ฐานข้อมูลเวกเตอร์ (vector ) แปลงข้อความ รูปภาพ หรือข้อมูลชนิดอื่น ๆ แต่ละชิ้นให้กลายเป็นรายการตัวเลขยาว ๆ ที่จับ "ความหมาย" ของสิ่งนั้นไว้ รายการตัวเลขเหล่านี้เรียกว่าเวกเตอร์มิติสูง (high-dimensional vectors) หรือ embeddings เวลาคุณค้นหา มันจะหาไอเทมที่มีความหมายใกล้เคียงกับคำค้นของคุณที่สุด ลองนึกภาพบรรณารักษ์ที่หยิบหนังสือเรื่องเดียวกันมาให้คุณ แม้หนังสือเหล่านั้นจะใช้คำที่ต่างกันโดยสิ้นเชิงก็ตาม แทนที่จะจับคู่คำสำคัญ (keyword) แบบตรงตัว มันจะจัดอันดับผลลัพธ์ตามความใกล้เคียงของความหมาย (semantic closeness) ซึ่งวัดด้วยตัวชี้วัดระยะทาง (distance metrics) เช่น cosine similarity เทคโนโลยีนี้เป็นแรงขับเคลื่อนของการค้นหาเชิงความหมาย (semantic search) ระบบแนะนำ (recommendations) และ retrieval-augmented generation (RAG) สำหรับแอป AI
Strengths
- ค้นหาความคล้ายกัน (similarity search) ได้อย่างรวดเร็วในเวกเตอร์นับล้านตัว ผ่านดัชนี ANN (Approximate Nearest Neighbor)
- เปิดทางให้ semantic search และ RAG ที่เข้าใจ "ความหมาย" ไม่ใช่แค่คำสำคัญ
- มีตัวเลือกให้ใช้หลากหลาย: pgvector, Pinecone, Qdrant, Weaviate, Milvus, Chroma
- การกรองด้วยเมทาดาทา (metadata filtering) ผสมผสาน semantic search เข้ากับเงื่อนไขเชิงโครงสร้างได้
- ขยายขนาดรองรับคลังข้อมูลขนาดใหญ่ได้ด้วยอัลกอริทึม approximate-nearest-neighbor
Trade-offs
- ผลลัพธ์เป็นค่าประมาณ (approximate) การปรับจูนต้องแลกระหว่างความครบถ้วน (recall) กับความเร็ว
- คุณภาพของ embedding ขึ้นอยู่กับโมเดลที่สร้างเวกเตอร์นั้นทั้งหมด
- ถ้าเปลี่ยนโมเดล ต้องสร้าง embedding ใหม่ทั้งคลังข้อมูล
- พื้นที่จัดเก็บและหน่วยความจำจะเพิ่มขึ้นตามจำนวนมิติและขนาดชุดข้อมูล
When to use it
ใช้ฐานข้อมูลเวกเตอร์สำหรับ semantic search, การถาม-ตอบจากเอกสาร (document Q&A), ระบบแนะนำ, การกำจัดข้อมูลซ้ำ (deduplication) และไปป์ไลน์ RAG ที่ป้อนบริบทที่เกี่ยวข้องเข้าสู่ LLM (Large Language Model — โมเดลภาษาขนาดใหญ่) สำหรับสเกลที่ไม่ใหญ่มาก ส่วนขยาย pgvector ช่วยให้คุณเก็บเวกเตอร์ไว้คู่กับข้อมูลเชิงสัมพันธ์ (relational data) ใน PostgreSQL ได้เลย
Vibe coding fit
เวลาสั่งงาน AI ให้ระบุให้ชัดเจนสามเรื่อง ได้แก่ คุณใช้โมเดล embedding ตัวไหน (เพื่อให้มิติของเวกเตอร์ตรงกับดัชนี) ตัวชี้วัดระยะทาง (distance metric) ที่ใช้ (สำหรับข้อความมักใช้ cosine) และวิธีที่คุณแบ่งเอกสารต้นฉบับเป็นชิ้น ๆ (chunk) ก่อนทำ embedding ให้ AI เก็บเมทาดาทาที่มีประโยชน์ไว้คู่กับแต่ละเวกเตอร์ เพื่อให้คุณกรองได้ (เช่นตาม user_id หรือ doc_type) และให้แน่ใจว่าโค้ดฝั่ง embedding กับฝั่ง query ใช้โมเดลเดียวกัน เคล็ดลับดี ๆ อย่างหนึ่งคือ ให้ AI สร้างขั้นตอนดึงข้อมูล (retrieval) แบบ RAG ที่คืนค่าชิ้นข้อมูล (chunk) อันดับต้น ๆ k อันดับ พร้อมรหัสแหล่งที่มา (source id) ของแต่ละชิ้น วิธีนี้ทำให้คำตอบยังตรวจสอบย้อนกลับได้ และคุณสามารถยืนยันได้ว่าโมเดลใช้บริบทอะไรจริง ๆ
-- PostgreSQL with the pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
content TEXT NOT NULL,
doc_type TEXT,
embedding VECTOR(1536) -- must match your embedding model
);
-- Approximate-nearest-neighbor index for cosine distance
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);
-- Top-5 most similar chunks to a query embedding ($1)
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;