I vettori di embedding sono il modo nativo per l'intelligenza artificiale di rappresentare qualsiasi tipo di dati e molti algoritmi utilizzano vettori di feature per rappresentare i dati. Possono rappresentare testi, immagini, nonché audio e video. Ci sono molti metodi per calcolare i vettori di feature, inclusi l'utilizzo di modelli di embedding open-source o alcuni servizi cloud API, come l'API openai.
Chroma fornisce un wrapper leggero per i modelli di embedding popolari, rendendo facile usarli nelle tue applicazioni.
Transformers.js
Chroma può eseguire i modelli di embedding localmente sulla tua macchina utilizzando Transformers.js per generare vettori di feature. Transformers utilizza il modello "Xenova/all-MiniLM-L6-v2". Per eseguire questo, installa la libreria Transformers.js eseguendo npm install @xenova/transformers
nella riga di comando.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Specifica la funzione di embedding da utilizzare tramite il parametro embeddingFunction
const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})
// Aggiungi dati senza specificare i vettori; la funzione di aggiunta chiamerà la funzione di embedding per calcolare i vettori di testo
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"],
})
// Interroga i dati, che chiamerà anche la funzione di embedding per calcolare i vettori per i queryTexts e quindi cercare dati simili
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma fornisce un comodo wrapper per l'API del modello di embedding di OpenAI. Per effettuare chiamate all'API di OpenAI, avrai bisogno di una chiave API, che puoi ottenere registrandoti per un account OpenAI.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "apiKey"})
// usa direttamente
const embeddings = embedder.generate(["documento1","documento2"])
// Specifica la funzione di embedding utilizzando il parametro embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})
È possibile passare in modo facoltativo un parametro model_name per scegliere il modello di embedding OpenAI da utilizzare. Per impostazione predefinita, Chroma utilizza text-embedding-ada-002.
Funzioni di Embedding Personalizzate
Se si utilizzano altri modelli di embedding, è possibile integrare la classe base EmbeddingFunction e chiamare il proprio modello scelto per generare vettori.
Nota: Le funzioni di embedding personalizzate non sono obbligatorie, poiché è possibile calcolare preventivamente i vettori utilizzando il proprio modello di embedding e quindi utilizzare i vettori per leggere e scrivere dati di Chroma.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Chiama il proprio modello per calcolare i vettori
return embeddings;
}
}