~/VibeHandbook
PDF ฟรี

ฐานข้อมูล

github.com

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;