Chroma adalah basis data vektor sumber terbuka yang menggunakan teknologi pencarian kesamaan vektor untuk menyimpan dan mengambil data vektor berdimensi tinggi dalam skala besar secara efisien.

Chroma adalah basis data tertanam dalam aplikasi yang disematkan ke dalam kode kami dalam bentuk paket. Keunggulannya terletak pada kesederhanaannya. Jika Anda sedang mengembangkan aplikasi LLM yang memerlukan basis data vektor untuk menerapkan memori LLM dan mendukung pencarian bahasa serupa teks, tanpa ingin menginstal basis data vektor independen, Chroma adalah pilihan yang baik. Tutorial ini terutama berbasis JavaScript.

1. Instalasi paket

npm install --save chromadb # yarn add chromadb

2. Inisialisasi klien Chroma

const {ChromaClient} = require('chromadb');
const client = new ChromaClient();

3. Buat koleksi

Koleksi dalam basis data Chroma mirip dengan tabel dalam Mysql, di mana data vektor (termasuk dokumen dan data sumber lainnya) disimpan. Berikut membuat koleksi:

const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "kunci_api_anda"})
const collection = await client.createCollection({name: "my_collection", embeddingFunction: embedder})

Di sini, model penggandaan teks openai digunakan untuk menghitung vektor teks, jadi Anda perlu menyediakan kunci api openai Anda. Tentu saja, Anda juga dapat mengabaikan parameter embeddingFunction dan menggunakan model bawaan di Chroma untuk menghitung vektor, atau menggantinya dengan model penggandaan teks sumber terbuka lainnya.

4. Tambah data

Setelah mendefinisikan koleksi, data ditambahkan ke koleksi, dan Chroma akan menyimpan data kami dan membuat indeks vektor yang didedikasikan berdasarkan vektor data teks untuk pencarian mudah nantinya.

await collection.add({
    ids: ["id1", "id2"],
    metadatas: [{"source": "sumber_saya"}, {"source": "sumber_saya"}],
    documents: ["Ini adalah dokumen", "Ini adalah dokumen lain"]
}) 

Menggunakan vektor teks yang telah dihitung sebelumnya, tanpa menggunakan fungsi pembangkitan bawaan Chroma untuk menghitung:

await collection.add({
    ids: ["id1", "id2"],
    embeddings: [[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
    where: [{"source": "sumber_saya"}, {"source": "sumber_saya"}],
    documents: ["Ini adalah dokumen", "Ini adalah dokumen lain"]
}) 

5. Query data koleksi

Berdasarkan queryTexts yang ditetapkan untuk kondisi pencarian, Chroma akan Mengembalikan hasil sebanyak nResults paling mirip.

const results = await collection.query({
    nResults: 2, 
    queryTexts: ["Ini adalah dokumen query"]
})