~/VibeHandbook
PDF miễn phí

Cơ sở dữ liệu

github.com

Vector Databases (Cơ sở dữ liệu vector)

What it is

Cơ sở dữ liệu vector (vector ) biến mỗi đoạn văn bản, hình ảnh, hoặc dữ liệu khác thành một dãy số dài để nắm bắt ý nghĩa của nó. Những dãy số này được gọi là vector nhiều chiều (high-dimensional vectors), hay còn gọi là embedding. Khi bạn tìm kiếm, hệ thống sẽ tìm ra những mục có ý nghĩa gần nhất với truy vấn của bạn. Hãy tưởng tượng một thủ thư đưa cho bạn những cuốn sách cùng chủ đề dù chúng dùng những từ ngữ hoàn toàn khác nhau. Thay vì khớp từ khóa chính xác, hệ thống xếp hạng kết quả dựa trên mức độ gần nhau về ý nghĩa (semantic closeness), được đo bằng các thước đo khoảng cách như độ tương đồng cosine (cosine similarity). Chúng là nền tảng cho tìm kiếm theo ngữ nghĩa (semantic search), gợi ý (recommendations), và sinh văn bản có truy xuất tăng cường (retrieval-augmented generation, RAG) cho các ứng dụng AI.

Strengths

  • Tìm kiếm tương đồng nhanh trên hàng triệu embedding thông qua chỉ mục ANN (Approximate Nearest Neighbor - Láng giềng gần đúng gần nhất).
  • Cho phép tìm kiếm theo ngữ nghĩa và RAG hiểu được ý nghĩa, chứ không chỉ từ khóa.
  • Có nhiều lựa chọn: pgvector, Pinecone, Qdrant, Weaviate, Milvus, Chroma.
  • Lọc theo metadata (siêu dữ liệu) kết hợp tìm kiếm ngữ nghĩa với các ràng buộc có cấu trúc.
  • Mở rộng tốt cho kho dữ liệu lớn nhờ các thuật toán láng giềng gần đúng gần nhất.

Trade-offs

  • Kết quả chỉ là gần đúng; việc tinh chỉnh phải đánh đổi giữa độ chính xác (recall) và tốc độ.
  • Chất lượng embedding phụ thuộc hoàn toàn vào mô hình đã tạo ra các vector đó.
  • Phải nhúng lại (re-embedding) toàn bộ kho dữ liệu nếu bạn đổi mô hình.
  • Dung lượng lưu trữ và bộ nhớ tăng theo số chiều và kích thước tập dữ liệu.

When to use it

Hãy dùng cơ sở dữ liệu vector cho tìm kiếm theo ngữ nghĩa, hỏi-đáp tài liệu, gợi ý, khử trùng lặp, và các pipeline RAG đưa ngữ cảnh liên quan vào LLM (Large Language Model - Mô hình ngôn ngữ lớn). Với quy mô vừa phải, tiện ích mở rộng pgvector cho phép bạn lưu vector cùng với dữ liệu quan hệ trong PostgreSQL.

Vibe coding fit

Khi chỉ đạo AI, hãy nói rõ ba điều: bạn dùng mô hình embedding nào (để số chiều vector khớp với chỉ mục), thước đo khoảng cách nào (cosine thường được dùng cho văn bản), và cách bạn chia nhỏ (chunk) tài liệu nguồn trước khi nhúng. Yêu cầu AI lưu metadata hữu ích cạnh mỗi vector để bạn có thể lọc (ví dụ theo user_id hoặc doc_type), và đảm bảo mã nhúng (embedding) và mã truy vấn dùng cùng một mô hình. Một mẹo hay: nhờ AI xây dựng một bước truy xuất RAG trả về top-k đoạn (chunk) liên quan nhất kèm theo id nguồn của chúng. Nhờ vậy câu trả lời luôn có thể truy vết được, và bạn có thể kiểm chứng ngữ cảnh mà mô hình thực sự đã dùng.

-- 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;