Vector Database
Cơ sở dữ liệu vector lưu trữ embedding cùng ID và metadata, đồng thời lập chỉ mục để tìm kiếm láng giềng gần nhất nhanh chóng — lớp truy xuất trong RAG và tìm kiếm hình ảnh.
Cơ sở dữ liệu vector lưu trữ embedding—các vector số mà model tạo ra cho văn bản, hình ảnh, âm thanh hoặc video—cùng với ID và metadata của từng mục, rồi trả lời truy vấn "những vector nào đã lưu gần vector này nhất?" trong vài mili giây trên hàng triệu hoặc hàng tỷ mục. Hệ thống bao bọc một chỉ mục tìm kiếm vector bằng các tính năng của cơ sở dữ liệu: thêm, cập nhật và xóa dữ liệu, lọc theo metadata, lưu trữ lâu dài, kiểm soát truy cập và sao chép giữa các máy. Cơ sở dữ liệu vector cung cấp bước truy xuất cho tạo sinh tăng cường truy xuất (RAG), tìm kiếm ngữ nghĩa và hệ thống gợi ý.
Cách hoạt động của cơ sở dữ liệu vector#
Trong quy trình ghi, một model embedding, nằm bên ngoài hoặc được tích hợp trong cơ sở dữ liệu, chuyển từng mục thành vector; cơ sở dữ liệu lưu vector đó cùng ID và payload metadata như tệp nguồn, ngày tháng, camera hoặc khách hàng. So sánh truy vấn với mọi vector đã lưu cho kết quả chính xác nhưng chậm khi mở rộng quy mô, vì vậy cơ sở dữ liệu xây dựng chỉ mục láng giềng gần đúng (ANN). HNSW liên kết mỗi vector với các láng giềng gần nó trong một đồ thị phân tầng mà quá trình tìm kiếm lần theo một cách tham lam; chỉ mục tệp đảo (IVF) nhóm các vector bằng phân cụm k-means và chỉ quét các cụm gần truy vấn nhất; còn các phương pháp lượng tử hóa vector như lượng tử hóa tích giúp nén mỗi vector xuống còn vài byte. Trong quy trình đọc, truy vấn được chuyển thành embedding bằng cùng model rồi so sánh bằng một thước đo như độ tương đồng cosine, tích vô hướng hoặc khoảng cách Euclid; cơ sở dữ liệu trả về các ID, điểm số và payload top-k, mà nhiều hệ thống kết hợp với kết quả từ khóa trong tìm kiếm kết hợp.
Ví dụ này sử dụng Chroma, một cơ sở dữ liệu vector mã nguồn mở chạy trong bộ nhớ bên trong tiến trình Python:
import chromadb
# Client chạy trong bộ nhớ; chromadb.PersistentClient(path="db") lưu dữ liệu trên đĩa
client = chromadb.Client()
collection = client.create_collection("inspection_notes")
# Chroma tạo embedding cho từng tài liệu bằng model embedding mặc định và lập chỉ mục các vector
collection.add(
ids=["n1", "n2", "n3"],
documents=[
"Hairline crack found near the weld on bracket B7",
"Paint scratch on the left door panel",
"Porosity in the weld seam of the frame rail",
],
metadatas=[{"line": "A"}, {"line": "B"}, {"line": "B"}],
)
# Tìm kiếm láng giềng gần nhất, giới hạn trong một dây chuyền sản xuất
results = collection.query(query_texts=["welding defects"], n_results=1, where={"line": "B"})
print(results["ids"][0], results["documents"][0])Truy vấn trả về ghi chú n3, nói về độ rỗng mối hàn trên dây chuyền B. Bộ lọc metadata loại ghi chú về vết nứt ở dây chuyền A khỏi phạm vi tìm kiếm, dù nội dung của ghi chú đó gần với "lỗi hàn" không kém.
Cơ sở dữ liệu vector và các hệ thống liên quan#
- Thư viện tìm kiếm vector như FAISS: Các chỉ mục chạy trong tiến trình, bao gồm HNSW, IVF và lượng tử hóa tích, không cần máy chủ, lưu trữ metadata hay sao chép dữ liệu. Một số cơ sở dữ liệu vector được xây dựng dựa trên các thư viện này.
- Cơ sở dữ liệu vector chuyên dụng: Pinecone dưới dạng dịch vụ được quản lý; Milvus, Qdrant, Weaviate và Chroma là các dự án mã nguồn mở, được thiết kế ngay từ đầu xoay quanh embedding.
- Phần mở rộng vector như pgvector: Thêm cột vector cùng chỉ mục HNSW và IVFFlat vào PostgreSQL, để embedding nằm cạnh dữ liệu quan hệ. Elasticsearch, OpenSearch, MongoDB Atlas và Redis cũng cung cấp các trường vector tương tự bên cạnh tính năng tìm kiếm từ khóa.
- Feature store: Cung cấp các đặc trưng đầu vào của model theo khóa thực thể để huấn luyện và suy luận. Feature store tra cứu bản ghi theo ID, không theo độ tương đồng.
- Data lake: Lưu các tệp thô như hình ảnh và log; cơ sở dữ liệu vector tham chiếu đến các tệp này bằng ID hoặc đường dẫn.
Ứng dụng thực tế#
- Bộ nhớ cho AI agent: Các pipeline RAG và agent lưu các đoạn tài liệu cùng những cuộc hội thoại trước đó để mô hình ngôn ngữ lớn có thể truy xuất khi cần.
- Tìm kiếm hình ảnh trực quan trong bán lẻ: Tính năng "Mua sản phẩm tương tự" tạo embedding cho mọi ảnh sản phẩm và trả về các mặt hàng gần nhất với sản phẩm người mua đang xem.
- Phát hiện bất thường: Một mẫu mới có các láng giềng gần nhất đã lưu đều ở xa sẽ được đánh dấu là bất thường, chẳng hạn như giao dịch hoặc số đo cảm biến.
Các bộ sưu tập ảnh cần một model thị giác tạo vector. Ultralytics YOLO26 cung cấp khả năng này qua model.embed(), chạy model trên từng ảnh và trả về vector đặc trưng được pooling từ lớp áp chót, sẵn sàng lưu cùng đường dẫn ảnh và metadata chụp để phát hiện ảnh gần trùng lặp hoặc tìm ảnh tương tự—kiểu truy vấn được tính năng Tìm ảnh tương tự trên Ultralytics Platform hỗ trợ.
Điều chỉnh quy mô và tinh chỉnh#
Cài đặt chỉ mục tạo sự đánh đổi giữa recall và độ trễ suy luận: độ rộng tìm kiếm của HNSW (ef_search) và số cụm IVF cần thăm dò (nprobe) đều giúp tìm được nhiều láng giềng thực hơn nhưng làm truy vấn chậm hơn; do đó, các nhóm tinh chỉnh chúng bằng cách đối chiếu với tìm kiếm chính xác trên các truy vấn mẫu. Bộ nhớ quyết định chi phí phần cứng. Một triệu embedding float32 768 chiều chiếm 3.07 GB (1,000,000 x 768 x 4 bytes) chưa tính phần chỉ mục; lượng tử hóa vô hướng int8 các vector giảm mức sử dụng xuống 768 MB, còn embedding Matryoshka có thể được cắt bớt số chiều để giảm thêm dung lượng.










