Vector DB cho người nghèo: Dùng ChromaDB (Local) thay vì Pinecone để tiết kiệm $100/tháng

AI Hunter

Member
Bạn gửi file PDF 100 trang cho ChatGPT. Nó trả lời ngon lành.
Nhưng nếu bạn có 10.000 file PDF? Bạn không thể ném tất cả vào Prompt được (tràn Context Window).

Giải pháp là **RAG (Retrieval Augmented Generation)**. Và trái tim của RAG chính là **Vector Database**.
Thay vì lưu chữ cái (A, B, C), Vector DB lưu ý nghĩa dưới dạng các con số (Vector).
* Pinecone: Ngon, nhưng đắt và dữ liệu nằm trên mây.
* **ChromaDB:** Mã nguồn mở, chạy trên máy bạn, nhanh và miễn phí.

Vector DB cho người nghèo Dùng ChromaDB (Local) thay vì Pinecone để tiết kiệm $100tháng.jpg

1. ChromaDB hoạt động thế nào?​

Hãy tưởng tượng ChromaDB là một thư viện khổng lồ.
1. **Embedding:** Bạn biến câu văn "Con chó đang ngủ" thành một dãy số `[0.1, 0.5, 0.9...]`.
2. **Storage:** Chroma lưu dãy số này lại.
3. **Query:** Khi bạn hỏi "Thú cưng nào đang nằm?", AI biến câu hỏi thành dãy số `[0.1, 0.6, 0.8...]`.
4. **Retrieval:** Chroma thấy 2 dãy số này "gần nhau" (về mặt toán học) -> Trả về kết quả "Con chó đang ngủ".



2. Cài đặt (2 Cách)​


Cách 1: Chạy như thư viện Python (Dành cho Dev test nhanh)
Dữ liệu sẽ lưu vào một thư mục trên máy, tắt đi bật lại vẫn còn.
Bash:
pip install chromadb

Cách 2: Chạy Client/Server bằng Docker (Dành cho Production)
Đây là cách chuyên nghiệp để chạy trên VPS.
YAML:
# docker-compose.yml
version: '3.9'
services:
  server:
    image: chromadb/chroma
    volumes:
      - ./chroma_data:/chroma/chroma # Mount volume để không mất dữ liệu
    ports:
      - "8000:8000"
Chạy lệnh: `docker-compose up -d`

3. Thực hành: Xây dựng bộ nhớ cho AI​

Chúng ta sẽ viết một đoạn script nhỏ: Lưu thông tin mật vào ChromaDB và hỏi lại.

Python:
import chromadb

# 1. Khởi tạo Client (Lưu dữ liệu vào ổ cứng để không bị mất)
client = chromadb.PersistentClient(path="./my_memory_db")

# 2. Tạo Collection (Giống như Bảng/Table trong SQL)
collection = client.get_or_create_collection(name="secret_documents")

# 3. Thêm dữ liệu (Add)
# ChromaDB tự động dùng model 'all-MiniLM-L6-v2' để embedding (miễn phí)
# Bạn không cần gọi OpenAI API tốn tiền ở bước này!
collection.add(
    documents=[
        "Dự án X có ngân sách là 50.000 USD.",
        "Mật khẩu wifi công ty là 'KhongCoPass'.",
        "Sếp thích uống cà phê đen không đường."
    ],
    metadatas=[{"source": "budget"}, {"source": "it"}, {"source": "personal"}],
    ids=["doc1", "doc2", "doc3"]
)

print("✅ Đã nạp dữ liệu vào bộ nhớ!")

# 4. Truy vấn (Query)
question = "Sếp thích uống gì?"
results = collection.query(
    query_texts=[question],
    n_results=1 # Lấy 1 kết quả đúng nhất
)

print(f"\n❓ Câu hỏi: {question}")
print(f"💡 Tìm thấy: {results['documents'][0][0]}")
# Output: Sếp thích uống cà phê đen không đường.

4. Tích hợp vào LangChain/LlamaIndex​

Trong thực tế, bạn ít khi dùng code trần như trên mà sẽ qua Framework.

Với LangChain:
Python:
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# Kết nối với Chroma đang chạy Docker
db = Chroma(
    client_settings=Settings(chroma_api_impl="rest", chroma_server_host="localhost", chroma_server_port=8000),
    collection_name="my_collection",
    embedding_function=OpenAIEmbeddings()
)

5. Lưu ý quan trọng khi dùng ChromaDB​

  • Embedding Model: Mặc định Chroma dùng model tiếng Anh. Với tiếng Việt, hãy dùng model `bkai-foundation-models/vietnamese-bi-encoder` hoặc của OpenAI để chính xác hơn.
  • Metadata: Hãy luôn lưu kèm Metadata (ví dụ: `page_number`, `filename`). Sau này bạn có thể lọc (Filter) rất nhanh. Ví dụ: "Tìm trong tài liệu năm 2024".
  • Backup: Vì chạy Local, hãy nhớ backup thư mục `./chroma_data` thường xuyên.

Kết luận​

Với ChromaDB, bạn đã nắm trong tay mảnh ghép quan trọng nhất của hạ tầng AI. Bạn không còn phụ thuộc vào các dịch vụ Cloud đắt đỏ. Dữ liệu của bạn, luật chơi của bạn.
 
Back
Top