LỗiBạn vừa hoàn tất việc đánh chỉ mục 5.000 tài liệu vào vector store của mình. Bạn chạy script truy vấn, mong đợi một phản hồi thông minh, nhưng ứng dụng bị treo ngay lập tức. Thay vì nhận được kết quả, bạn lại thấy một thông báo lỗi ngắn gọn:
chromadb.errors.NotFoundError: Collection 'my_docs' not found
Điều này thường có nghĩa là script của bạn đang tìm kiếm một cơ sở dữ liệu không tồn tại trong ngữ cảnh hiện tại. Ngay cả khi các tệp đã nằm trên ổ cứng, ChromaDB vẫn không thể nhìn thấy chúng vì logic đường dẫn hoặc khởi tạo bị sai lệch một chút.
Tại sao lỗi này xảy raChromaDB nhẹ và nhanh, nhưng hành vi lưu trữ (persistence) mặc định của nó thường khiến nhiều nhà phát triển bất ngờ. Thông thường, nguyên nhân nằm ở một trong ba điều sau:
- Nhầm lẫn đường dẫn: Script nạp dữ liệu của bạn lưu vào
./db, nhưng script truy vấn lại tìm trong./chroma_dbhoặc một thư mục con khác.- Lưu trữ chỉ trong bộ nhớ: Bạn đã sử dụngClient()tiêu chuẩn thay vìPersistentClient(). Điều này lưu mọi thứ vào RAM. Khi script dừng lại, dữ liệu của bạn sẽ biến mất.- Phân biệt chữ hoa chữ thường: ChromaDB coi 'My_Docs' và 'my_docs' là hai thực thể hoàn toàn khác nhau. Chỉ một chữ cái viết hoa cũng sẽ kích hoạt lỗiNotFoundError.## Các bước khắc phục### 1. Sử dụng đường dẫn tuyệt đốiĐường dẫn tương đối rất nguy hiểm trong Python. Nếu bạn chạy script từ/home/user/project, đường dẫn./chroma_datahoạt động. Nhưng nếu bạn di chuyển vào thư mục/srcvà chạy lại, Python sẽ tìm kiếm/home/user/project/src/chroma_data, vốn đang trống rỗng. Hãy sử dụng moduleosđể cố định vị trí chính xác của dữ liệu.
import os
import chromadb
# Xác định vị trí cố định cho dữ liệu của bạn
current_dir = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(current_dir, "vector_storage")
# Luôn sử dụng PersistentClient cho các ứng dụng RAG
client = chromadb.PersistentClient(path=db_path)
try:
collection = client.get_collection(name="my_docs")
print(f"Kết nối thành công. Số lượng mục trong collection: {collection.count()}")
except Exception as e:
print(f"Không tìm thấy collection: {e}")
2. Sửa lỗi lưu trữ bền vững trong LangChainNếu bạn đang sử dụng LangChain, việc tích hợp có thể không rõ ràng. Nếu bạn không xác định rõ persist_directory, LangChain có thể khởi tạo một cơ sở dữ liệu tạm thời và biến mất sau khi tiến trình kết thúc.
Cách làm sai:
# Cách này thường mặc định lưu trữ tạm thời trong bộ nhớ
vectorstore = Chroma(collection_name="my_docs", embedding_function=embeddings)
Cách làm đúng:
from langchain_chroma import Chroma
vectorstore = Chroma(
collection_name="my_docs",
embedding_function=embeddings,
persist_directory="./chroma_db_storage" # Đường dẫn này phải khớp chính xác với đường dẫn lúc nạp dữ liệu
)
3. Debug bằng list_collections()Trước khi vò đầu bứt tai vì tên collection, hãy hỏi client xem nó thực sự nhìn thấy gì. Script đơn giản này đóng vai trò như một công cụ chẩn đoán để xác minh kết nối cơ sở dữ liệu của bạn.
client = chromadb.PersistentClient(path="./chroma_db")
# In ra mọi collection hiện có trên đĩa
existing_collections = client.list_collections()
print(f"Tìm thấy {len(existing_collections)} collection:")
for col in existing_collections:
print(f" - {col.name}")
# Kiểm tra logic
if "my_docs" not in [c.name for c in existing_collections]:
print("LỖI NGHIÊM TRỌNG: Thiếu 'my_docs'. Hãy kiểm tra logic script nạp dữ liệu.")

