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í.
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ủ".
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.
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.
Chạy lệnh: `docker-compose up -d`
Với LangChain:
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í.
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"
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.Bài viết liên quan