Chroma, büyük ölçekli yüksek boyutlu vektör verilerini verimli bir şekilde depolamak ve almak için vektör benzerlik arama teknolojisini kullanan açık kaynaklı bir vektör veritabanıdır.
Chroma, bir paket olarak kodumuzun içine gömülü bir uygulama gömülü veritabanıdır. Onun avantajı basitliğinde yatar. Bağımsız bir vektör veritabanı kurmak istemeden LLM belleğini uygulamak ve metin benzerliği dil aramasını desteklemek için bir vektör veritabanına ihtiyaç duyan bir LLM uygulaması geliştiriyorsanız, Chroma iyi bir seçenektir. Bu kılavuzun ana konusu JavaScript'e dayanmaktadır.
1. Paket kurulumu
npm install --save chromadb # yarn add chromadb
2. Chroma istemcisini başlatma
const {ChromaClient} = require('chromadb');
const client = new ChromaClient();
3. Bir koleksiyon oluşturma
Chroma veritabanındaki bir koleksiyon, vektör verilerinin (belgeler ve diğer kaynak veriler dahil) depolandığı bir Mysql tablosuna benzerdir. Aşağıdaki koleksiyon oluşturur:
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "your_api_key"})
const collection = await client.createCollection({name: "my_collection", embeddingFunction: embedder})
Burada, metin vektörlerini hesaplamak için bir openai metin gömme modeli kullanılır, bu nedenle openai api anahtarını sağlamanız gerekir. Tabii ki, embeddingFunction parametresini atlayabilir ve vektörleri hesaplamak için Chroma'daki yerleşik modeli kullanabilir veya başka bir açık kaynaklı metin gömme modeli ile değiştirebilirsiniz.
4. Veri ekleme
Bir koleksiyon tanımladıktan sonra, veriler koleksiyona eklenir ve Chroma verilerimizi depolar ve daha sonra kolay sorgulamak için metin verilerin vektörleri üzerinde özel bir vektör endeksi oluşturur.
await collection.add({
ids: ["id1", "id2"],
metadatas: [{"source": "my_source"}, {"source": "my_source"}],
documents: ["Bu bir belgedir", "Bu başka bir belgedir"],
})
Önceden hesaplanmış metin vektörlerini kullanarak, Chroma'nın yerleşik gömme fonksiyonunu kullanmadan:
await collection.add({
ids: ["id1", "id2"],
embeddings: [[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
where: [{"source": "my_source"}, {"source": "my_source"}],
documents: ["Bu bir belgedir", "Bu başka bir belgedir"]
})
5. Koleksiyon verilerini sorgulama
Sorgulama koşulları için ayarlanan queryTexts'e dayanarak, Chroma en benzer nResults sonuçlarını döndürecektir.
const results = await collection.query({
nResults: 2,
queryTexts: ["Bu bir sorgu belgesidir"]
})