Vektor embedding adalah cara asli bagi kecerdasan buatan untuk merepresentasikan berbagai jenis data, dan banyak algoritma menggunakan vektor fitur untuk merepresentasikan data. Mereka dapat merepresentasikan teks, gambar, serta audio dan video. Ada banyak metode untuk menghitung vektor fitur, termasuk menggunakan model embedding sumber terbuka atau beberapa API layanan cloud, seperti openai API.
Chroma menyediakan pembungkus ringan untuk model embedding populer, sehingga memudahkan Anda untuk menggunakannya dalam aplikasi Anda.
Transformers.js
Chroma dapat menjalankan model embedding secara lokal pada mesin Anda menggunakan Transformers.js untuk menghasilkan vektor fitur. Transformers menggunakan model "Xenova/all-MiniLM-L6-v2". Untuk menjalankannya, pasang pustaka Transformers.js dengan menjalankan npm install @xenova/transformers
di baris perintah.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Tentukan fungsi embedding yang akan digunakan melalui parameter embeddingFunction
const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})
// Tambahkan data tanpa menentukan vektor; fungsi tambah akan memanggil fungsi embeddingFunction untuk menghitung vektor teks
await collection.add({
ids: ["id1", "id2", "id3"],
metadatas: [{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],
documents: ["lorem ipsum...", "doc2", "doc3"],
})
// Query data, yang juga akan memanggil fungsi embeddingFunction untuk menghitung vektor untuk queryTexts dan kemudian mencari data yang mirip
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma menyediakan pembungkus praktis untuk API model embedding OpenAI. Untuk melakukan panggilan ke API OpenAI, Anda akan memerlukan kunci API, yang dapat Anda peroleh dengan mendaftar ke akun OpenAI.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "apiKey"})
// Gunakan langsung
const embeddings = embedder.generate(["document1","document2"])
// Tentukan fungsi embedding menggunakan parameter embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})
Anda dapat opsionalnya melewati parameter model_name untuk memilih model embedding OpenAI yang akan digunakan. Secara default, Chroma menggunakan text-embedding-ada-002.
Fungsi Embedding Kustom
Jika Anda menggunakan model embedding lain, Anda dapat mengintegrasikan kelas dasar EmbeddingFunction dan memanggil model yang Anda pilih sendiri untuk menghasilkan vektor.
Catatan: Fungsi embedding kustom tidak diperlukan, karena Anda dapat menghitung vektor sebelumnya menggunakan model embedding Anda sendiri dan kemudian menggunakan vektor tersebut untuk membaca dan menulis data Chroma.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Panggil model Anda sendiri untuk menghitung vektor
return embeddings;
}
}