Khi xây RAG nội bộ — cho AI đọc và trả lời trên tài liệu của chính doanh nghiệp — câu hỏi kỹ thuật đầu tiên là: lưu vector ở đâu? Vector database là nơi cất các "embedding" (biểu diễn số của tài liệu) để truy hồi khi người dùng đặt câu hỏi. Bài này so năm vector database mã nguồn mở theo dữ kiện kiểm chứng được (giấy phép, phiên bản, độ phổ biến), chỉ cách chọn mô hình embedding cho tiếng Việt, và ước lượng dung lượng index cần chuẩn bị. Mọi số liệu tra cứu ngày 20/07/2026.
Tóm tắt nhanh
- Không có "cái tốt nhất" tuyệt đối. Cả 5 lựa chọn — pgvector, Qdrant, Milvus, Weaviate, Chroma — đều mã nguồn mở, chạy được on-premise. Chọn theo hạ tầng sẵn có và quy mô.
- Đã có PostgreSQL? Bắt đầu bằng pgvector (PostgreSQL License) — thêm khả năng vector vào chính DB bạn đang dùng, không phải dựng hệ mới.
- Cần chuyên dụng, quy mô lớn: Qdrant (Apache-2.0, viết bằng Rust) và Milvus (Apache-2.0, viết bằng Go, 45.274 sao GitHub — nhiều nhất nhóm) là hai vector DB chuyên dụng phổ biến nhất.
- Mô hình embedding cho tiếng Việt: ưu tiên loại đa ngữ. BAAI/bge-m3 cho vector 1.024 chiều, context tối đa 8.192 token, giấy phép MIT — chạy tài liệu dài mà vẫn miễn phí thương mại.
- Dung lượng: 1 triệu vector 1.024 chiều (FP32) chiếm ~4,1 GB thô; lượng tử hoá int8 kéo xuống ~1,0 GB — con số cần biết trước khi cấp phát ổ đĩa/RAM.
Số liệu chính (có nguồn)
- Milvus: phiên bản v2.6.20 (14/07/2026), Apache-2.0, 45.274 sao GitHub — GitHub API, 20/07/2026.
- Qdrant: v1.18.3 (17/07/2026), Apache-2.0, 33.408 sao; Chroma 1.5.9, 28.828 sao; Weaviate v1.38.5, 16.617 sao — GitHub API.
- pgvector: tag mới nhất v0.8.5, giấy phép PostgreSQL License (phần mở rộng cho PostgreSQL), 22.255 sao — GitHub.
- Mô hình embedding (config.json HuggingFace): bge-m3 = 1.024 chiều / 8.192 token; e5-large = 1.024/512; gte-base = 768/8.192; MiniLM-L12 = 384/512.
- Dung lượng thô = chiều × 4 byte × số vector: 1 triệu vector → 384 chiều ~1,5 GB · 768 chiều ~3,1 GB · 1.024 chiều ~4,1 GB (FP32).
Vì sao RAG nội bộ cần vector database?
RAG (Retrieval-Augmented Generation) cần một vector database để lưu và tìm nhanh các đoạn tài liệu gần nghĩa với câu hỏi. Quy trình: cắt tài liệu thành đoạn (chunk) → đưa qua mô hình embedding để biến mỗi đoạn thành một vector số → cất vào vector DB. Khi người dùng hỏi, câu hỏi cũng được embed rồi vector DB trả về các đoạn "gần" nhất để mô hình ngôn ngữ tổng hợp câu trả lời. Nếu bạn chưa nắm khái niệm này, đọc trước bài RAG: cho AI nội bộ học tài liệu của bạn và sơ đồ kiến trúc AI nội bộ.
Với doanh nghiệp muốn giữ dữ liệu tại chỗ, điểm mấu chốt là chọn vector DB mã nguồn mở, tự host được — để tài liệu nội bộ không phải gửi lên dịch vụ bên thứ ba. Cả năm lựa chọn trong bài đều thoả điều kiện đó; khác biệt nằm ở giấy phép, độ trưởng thành và cách vận hành.
So sánh 5 vector database mã nguồn mở
Cả năm vector database dưới đây đều mã nguồn mở và tự host được, nhưng khác nhau về giấy phép và độ phổ biến: Milvus dẫn đầu với 45.274 sao GitHub, còn pgvector là lựa chọn "nhẹ" nhất vì chỉ là phần mở rộng cắm thẳng vào PostgreSQL. Bảng dưới tổng hợp dữ kiện kiểm chứng ngày 20/07/2026 — dùng để loại nhanh theo tiêu chí giấy phép (thương mại được không) và hạ tầng sẵn có.
| Vector DB | Giấy phép | Phiên bản mới nhất | Ngôn ngữ lõi | GitHub stars |
|---|---|---|---|---|
| pgvector | PostgreSQL License | v0.8.5 (git tag) | C | 22.255 |
| Qdrant | Apache-2.0 | v1.18.3 (17/07/2026) | Rust | 33.408 |
| Milvus | Apache-2.0 | v2.6.20 (14/07/2026) | Go | 45.274 |
| Weaviate | BSD-3-Clause | v1.38.5 (16/07/2026) | Go | 16.617 |
| Chroma | Apache-2.0 | 1.5.9 (05/05/2026) | Rust | 28.828 |
Đọc bảng cho đúng: cả năm giấy phép (PostgreSQL, Apache-2.0, BSD-3-Clause) đều là giấy phép permissive — cho phép dùng thương mại và tự host thoải mái. Số sao GitHub phản ánh độ phổ biến và cộng đồng, không phải chất lượng tuyệt đối, nhưng là chỉ dấu tốt về mức hỗ trợ và tài liệu bạn sẽ tìm được khi gặp sự cố.
Chọn mô hình embedding cho tiếng Việt
Với tài liệu tiếng Việt, hãy chọn mô hình embedding đa ngữ, và cân giữa hai thông số quyết định: số chiều vector (càng lớn càng tốn dung lượng) và độ dài context (đoạn dài nhất model xử lý một lần). Ví dụ BAAI/bge-m3 cho vector 1.024 chiều và nhận tới 8.192 token mỗi lần — gấp 16 lần loại 512 token — nên cắt chunk thoải mái hơn. Bảng dưới lấy trực tiếp từ file cấu hình chính thức (config.json) trên HuggingFace.
| Mô hình | Tham số | Chiều vector | Context tối đa | Giấy phép |
|---|---|---|---|---|
| BAAI/bge-m3 | ~568M* | 1.024 | 8.192 token | MIT |
| intfloat/multilingual-e5-large | 560M | 1.024 | 512 token | MIT |
| Alibaba-NLP/gte-multilingual-base | 305M | 768 | 8.192 token | Apache-2.0 |
| paraphrase-multilingual-MiniLM-L12-v2 | 118M | 384 | 512 token | Apache-2.0 |
*bge-m3 dùng checkpoint FP32 2,27 GB → ước tính ~568 triệu tham số; ba mô hình còn lại lấy trực tiếp từ safetensors metadata HuggingFace. Context của họ mô hình RoBERTa (bge-m3, e5) khai báo max_position_embeddings lớn hơn 2 do offset — số dùng được là 8.192 / 512 như bảng.
Bài học: chiều vector nhỏ = truy hồi nhanh và nhẹ đĩa, chiều lớn = giữ được nhiều sắc thái ngữ nghĩa. Với đa số bài toán hỏi-đáp tài liệu tiếng Việt, một mô hình 768–1.024 chiều đa ngữ là điểm cân bằng tốt; loại 384 chiều (MiniLM) hợp khi cần siêu nhẹ, chấp nhận đánh đổi độ chính xác.
Dung lượng: index vector chiếm bao nhiêu?
Dung lượng thô của một index vector bằng số chiều × số byte mỗi số × số vector. Ở độ chính xác FP32 (4 byte/số), một triệu vector 1.024 chiều chiếm ~4,1 GB; lượng tử hoá scalar xuống int8 (1 byte) kéo còn ~1,0 GB. Đây là con số cần biết trước khi cấp phát RAM/ổ đĩa cho vector DB, vì nhiều engine giữ index trong bộ nhớ để truy hồi nhanh.
| Chiều vector | FP32 (4 byte/số) | Sau int8 quantization (1 byte) | Mô hình ví dụ |
|---|---|---|---|
| 384 | ~1,5 GB | ~0,38 GB | MiniLM-L12 |
| 768 | ~3,1 GB | ~0,77 GB | gte-multilingual-base |
| 1.024 | ~4,1 GB | ~1,0 GB | bge-m3, e5-large |
*Chỉ là dung lượng vector thô. Chưa cộng cấu trúc index (ví dụ đồ thị HNSW), payload/metadata và bản sao dự phòng — hoá đơn thực tế cao hơn. Lượng tử hoá int8 giảm mạnh dung lượng nhưng đánh đổi một phần độ chính xác truy hồi.
Điểm thực dụng: với kho tài liệu vừa (dưới vài triệu đoạn), dung lượng vector hiếm khi là nút thắt — vài GB là chuyện nhỏ. Nút thắt thường là độ trễ truy hồi và chất lượng chunk. Nhưng khi số vector lên hàng chục–trăm triệu, chọn chiều vector và lượng tử hoá bắt đầu quyết định chi phí RAM thật.
Chọn thế nào cho doanh nghiệp Việt
Với đa số doanh nghiệp Việt bắt đầu RAG nội bộ, lựa chọn hợp lý là đi từ đơn giản đến chuyên dụng, chứ không nhảy thẳng vào hệ phân tán phức tạp. Đây là khung chúng tôi khuyến nghị:
- Đã có PostgreSQL → dùng pgvector. Bạn thêm khả năng vector vào chính database đang vận hành, không phải dựng và bảo trì một hệ mới — điểm vào nhanh và rẻ nhất để có RAG chạy thật.
- Cần chuyên dụng, quy mô lớn → Qdrant hoặc Milvus. Khi số vector lớn, cần lọc metadata phức tạp hoặc độ trễ thấp ổn định, hai engine chuyên dụng phổ biến nhất này cho nhiều lựa chọn index và mở rộng hơn.
- Prototype nhanh → Chroma. Nhẹ, dễ nhúng, hợp giai đoạn thử nghiệm trước khi cam kết hạ tầng.
- Chọn embedding trước, DB sau. Cố định mô hình embedding (và do đó số chiều vector) trước, vì đổi mô hình embedding buộc phải tạo lại toàn bộ index. Với tiếng Việt, một mô hình đa ngữ 768–1.024 chiều là mặc định an toàn.
Không có vector database "tốt nhất" tuyệt đối cho RAG nội bộ — hãy bắt đầu bằng pgvector nếu đã có PostgreSQL, và chỉ chuyển sang Qdrant hay Milvus khi số lượng vector và yêu cầu độ trễ thực sự vượt ngưỡng.
Câu hỏi thường gặp
Vector database khác database thường thế nào?
Database thường tìm theo khớp chính xác (mã, tên, ngày). Vector database tìm theo độ gần ngữ nghĩa: mỗi tài liệu được biến thành một vector số nhiều chiều (embedding), và truy vấn trả về các vector "gần" nhất trong không gian đó — nền tảng để RAG tìm đoạn liên quan đến câu hỏi.
Doanh nghiệp nhỏ nên bắt đầu bằng vector DB nào?
Nếu đã dùng PostgreSQL, bắt đầu bằng pgvector (giấy phép PostgreSQL License) — thêm khả năng vector vào chính DB đang chạy, không phải dựng hệ mới. Khi quy mô lớn hơn hoặc cần tính năng chuyên dụng, cân nhắc chuyển sang Qdrant (v1.18.3) hay Milvus (v2.6.20).
Mô hình embedding nào tốt cho tiếng Việt?
Chọn mô hình đa ngữ. Ví dụ BAAI/bge-m3 (giấy phép MIT) cho vector 1.024 chiều, nhận tối đa 8.192 token; Alibaba-NLP/gte-multilingual-base (Apache-2.0) 768 chiều, 8.192 token. Loại context dài (8.192 token) giúp cắt chunk linh hoạt hơn so với loại 512 token.
1 triệu vector chiếm bao nhiêu dung lượng?
Dung lượng thô = chiều × 4 byte (FP32) × số vector. Một triệu vector: 384 chiều ~1,5 GB, 768 chiều ~3,1 GB, 1.024 chiều ~4,1 GB. Lượng tử hoá int8 giảm còn ~1/4 (0,38 / 0,77 / 1,0 GB) nhưng đánh đổi một phần độ chính xác. Chưa gồm cấu trúc index và metadata.
Các vector database này có tự host được và dùng thương mại không?
Có. Cả năm (pgvector, Qdrant, Milvus, Weaviate, Chroma) đều mã nguồn mở với giấy phép permissive (PostgreSQL License, Apache-2.0, BSD-3-Clause) — tự host on-premise và dùng thương mại được. Đây là lý do chúng phù hợp doanh nghiệp muốn giữ dữ liệu tại chỗ.
Xây RAG nội bộ đúng ngay từ nền tảng
Namtech giúp doanh nghiệp chọn vector database, mô hình embedding và kiến trúc RAG phù hợp quy mô — chạy 100% tại chỗ để tài liệu nội bộ không rời tổ chức.
Đặt lịch tư vấn miễn phíLưu ý: Bài viết tổng hợp từ nguồn công khai tại 20/07/2026. Số phiên bản và số sao GitHub là ảnh chụp tại thời điểm tra cứu và sẽ thay đổi; dung lượng là kết quả tính toán từ số chiều vector (thô, chưa gồm cấu trúc index/metadata); thông số mô hình lấy từ file cấu hình chính thức. Thông tin tham khảo, không phải tư vấn kỹ thuật, đầu tư hay pháp lý.
- GitHub — pgvector/pgvector (tag v0.8.5, PostgreSQL License, 22.255 sao — 20/07/2026)
- GitHub — qdrant/qdrant (release v1.18.3, 17/07/2026, Apache-2.0, 33.408 sao)
- GitHub — milvus-io/milvus (release v2.6.20, 14/07/2026, Apache-2.0, 45.274 sao)
- GitHub — weaviate/weaviate (release v1.38.5, 16/07/2026, BSD-3-Clause, 16.617 sao)
- GitHub — chroma-core/chroma (release 1.5.9, 05/05/2026, Apache-2.0, 28.828 sao)
- HuggingFace — BAAI/bge-m3 config.json (hidden_size 1.024, MIT)
- HuggingFace — intfloat/multilingual-e5-large (1.024 chiều, 560M tham số, MIT)
- HuggingFace — Alibaba-NLP/gte-multilingual-base (768 chiều, 305M, Apache-2.0)
- HuggingFace — paraphrase-multilingual-MiniLM-L12-v2 (384 chiều, 118M, Apache-2.0)