ADR-0002: Pinecone + fastembed (local ONNX) cho RAG pipeline
- Status: Accepted
- Date: ~2026-06-27 (backfilled 2026-07-25)
- Supersedes: —
- Superseded by: —
Bối cảnh
Chatbot cần trả lời dựa trên dữ liệu sân bóng thật (RAG) thay vì chỉ dựa vào kiến thức chung của LLM, để tránh hallucination về tên sân/giá/địa chỉ. Cần chọn vector DB + embedding model, ưu tiên hỗ trợ tốt tiếng Việt (đa số câu hỏi người dùng là tiếng Việt) và chi phí thấp cho dự án thesis.
Quyết định
- Pinecone (cloud, managed) làm vector DB — semantic search top-k=3, min score=0.25
- fastembed với model
paraphrase-multilingual-MiniLM-L12-v2(local ONNX, ~46MB, 384-dim, hỗ trợ tiếng Việt) làm embedding — chạy local, không gọi API ngoài cho bước embed
Lựa chọn khác đã cân nhắc
- OpenAI text-embedding-3: chất lượng cao, nhưng tốn phí theo API call và thêm 1 network round-trip cho mỗi query — loại vì fastembed local đủ tốt cho tập dữ liệu sân bóng (không cần embedding đa ngôn ngữ phức tạp) và miễn phí.
- Self-hosted vector DB (Qdrant/Weaviate): tránh vendor lock-in và có thể chạy chung K3s cluster, nhưng thêm 1 stateful service nữa phải tự vận hành/backup trên hạ tầng vốn đã hạn chế tài nguyên (3-node K3s) — loại, chọn Pinecone managed để giảm gánh vận hành.
Hệ quả
- Được: không tốn chi phí/network cho bước embedding (chạy local); Pinecone managed nên không cần tự vận hành/scale vector DB.
- Đánh đổi: phụ thuộc Pinecone (SaaS, có free tier giới hạn) — cần theo dõi quota; fastembed model cố định 384-dim, nếu sau này cần embedding chất lượng cao hơn phải re-index toàn bộ dữ liệu đã upsert vào Pinecone (chi phí migration không nhỏ).
Liên kết
- Docs liên quan:
README.md(mục RAG Pipeline, Công nghệ),scripts/index_fields_to_pinecone.py