Hızla evrilen Yapay Zeka dünyasında, Büyük Dil Modellerini (LLM) belirli ve gerçekçi verilerle ilişkilendirmek için standart yaklaşım, Geri Getirme Destekli Üretim (RAG) olmuştur. Bu sistemlerin kalbinde vektör veritabanı yer alır. Pinecone veya Weaviate gibi kurumsal çözümler güçlü ölçekleme sunarken, ChromaDB basitlik, hız ve sıfır yapılandırma gerektiren dağıtım arayan geliştiriciler için ilk tercih haline gelmiştir.
Chroma, özellikle yapay zeka uygulamaları için tasarlanmış açık kaynaklı, gömülü ve istemci/sunucu tabanlı bir vektör veritabanıdır. Temel satış noktası "her şey dahil" felsefesidir: parçalama (chunking), gömme (embedding) ve benzerlik aramasını kutudan çıktığı gibi ele alarak, altyapıyla uğraşmak yerine uygulamanızı geliştirmeye odaklanmanızı sağlar.
Neden ChromaDB'yi Seçmelisiniz?
1. Gömülü Mimari
Ayrı bir sunucu süreci gerektiren geleneksel veritabanlarının aksine, ChromaDB süreç içi (in-process) çalışabilir. Bu, ağ gecikmesinin bir endişe konusu olduğu prototipleme, kenar bilişim ve masaüstü uygulamaları için mükemmel kılar. Ancak, birden fazla örneğe ölçeklemeniz gerektiğinde istemci-sunucu modunu da destekler.2. Yerleşik Gömme (Embedding) Desteği
Chroma'nın en sorunsuz yönlerinden biri, gömme modelleriyle entegrasyonudur. Ayrı bir gömme hattı yönetmenize gerek yoktur. Chroma, varsayılan modelleri (örneğin `all-MiniLM-L6-v2`) veya herhangi bir uyumlu Hugging Face modelini kullanarak belgeleri otomatik olarak gömebilir ve yapılandırılmamış metni yüksek boyutlu vektörlere sorunsuz bir şekilde dönüştürebilir.3. Basit API
Python API'si sezgiseldir ve kullanılabilirlik açısından pandas DataFrames'ına benzer. Python ile rahat iseniz, Chroma ile dakikalar içinde verimli hale gelebilirsiniz.Başlangıç: Pratik Bir Örnek
Belgeleri depolayıp benzerlik araması yapan temel bir kurulumu inceleyelim. Öncelikle Chroma'nın yüklü olduğundan emin olun:pip install chromadb
İşte kalıcılığı, veri ekleme ve sorgulama işlemlerini gösteren kapsamlı bir örnek:
import chromadb
# 1. İstemciyi Başlat
# PersistentClient, verilerin yeniden başlatmalardan sonra korunmasını sağlar
client = chromadb.PersistentClient(path="/tmp/chroma_db")
# 2. Koleksiyonu Al veya Oluştur
collection = client.get_or_create_collection(
name="my_docs",
metadata={"hnsw:space": "cosine"} # Metin için standart kosinüs benzerliği
)
# 3. Belgeleri Ekle
# Chroma, 'documents' alanını otomatik olarak gömer
docs = [
"Fransa'nın başkenti Paris'tir.",
"Almanya'nın başkenti Berlin'dir.",
"İtalya'nın başkenti Roma'dır."
]
collection.add(
documents=docs,
ids=["doc1", "doc2", "doc3"]
)
# 4. Benzerlik İçin Sorgula
results = collection.query(
query_texts=["Baget için nereye gitmeliyim?"],
n_results=2 # İlk 2 eşleşmeyi döndür
)
# 5. Sonuçları İncele
print(results["documents"])
# Çıktı: [['Fransa'nın başkenti Paris'tir.', 'İtalya'nın başkenti Roma'dır.']]
print(results["metadatas"])
# Çıktı: [None, None] (Eğer metadata sağlanmadıysa)
print(results["distances"])
# Çıktı: [[0.123, 0.456]] (Kosinüs mesafesi için düşük değer daha iyidir)
Gelişmiş Kullanım: Metadata Filtreleme
Vektör veritabanlarının temel özelliklerinden biri, benzerlik aramasından önce veya sırasında metadata'ya göre filtreleme yapabilmektir. Bu, çok kiracılı (multi-tenant) uygulamalarda veya arama sonuçlarını belirli bir kategoriye kısıtlamak istediğinizde hayati önem taşır.# Metadata ile daha fazla veri ekle
collection.add(
documents=["Python popüler bir dildir.", "Java bayt koduna derlenir."],
ids=["doc4", "doc5"],
metadatas=[{"language": "Python", "year": 2023}, {"language": "Java", "year": 2022}]
)
# Sadece Python belgelerini sorgula
python_results = collection.query(
query_texts=["Dinamik tiplemeli dil nedir?"],
where={"language": "Python"},
n_results=1
)
print(python_results["documents"])
# Çıktı: [['Python popüler bir dildir.']]
Performans Düşünceleri ve Ölçekleme
Chroma kullanımı son derece kolay olsa da, sınırlamalarını anlamak önemlidir. Chroma, yaklaşık en yakın komşu araması için HNSW (Hierarchical Navigable Small World) algoritmalarını kullanır. Bu, hız ve doğruluk arasında harika bir denge sağlar. Ancak, milyonlarca vektörü aşan veri kümeleri için, FAISS veya Milvus gibi özel motorlara kıyasla performans darboğazlarıyla karşılaşabilirsiniz.Ne Zaman Ölçeklenmeli:
- Çok Düğümlü Kümeleme: Yüksek kullanılabilirliğe ihtiyacınız varsa ve veri kümenizi yerel belleğe sığdıramıyorsanız.
- Yüksek Eşzamanlılık: Binlerce eşzamanlı kullanıcının veritabanını sorguladığı durumlarda.
- Gelişmiş Özellikler: İnce ayarlı kontrol ile karma arama (anahtar kelime ve vektör aramasının birleşimi) gerektiriyorsanız.
Bu senaryolar için, Chroma'yı sunucu modunda çalıştırıp bir yük dengeleyicinin arkasına dağıtmayı veya daha dağıtık bir çözüme geçmeyi düşünebilirsiniz.