Bỏ qua

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