Wektory osadzeń są naturalnym sposobem, aby sztuczna inteligencja mogła reprezentować dowolny rodzaj danych, a wiele algorytmów używa wektorów cech do reprezentowania danych. Mogą one reprezentować teksty, obrazy, a także dźwięki i wideo. Istnieje wiele metod obliczania wektorów cech, w tym korzystanie z modeli osadzających dostępnych jako oprogramowanie open source, bądź korzystanie z niektórych usług chmurowych API, takich jak API openai.

Chroma dostarcza lekką otoczkę dla popularnych modeli osadzających, ułatwiając ich wykorzystanie w aplikacjach.

Transformers.js

Chroma może uruchamiać modele osadzające lokalnie na Twoim komputerze, korzystając z Transformers.js do generowania wektorów cech. Transformers używa modelu "Xenova/all-MiniLM-L6-v2". Aby to uruchomić, zainstaluj bibliotekę Transformers.js, wykonując npm install @xenova/transformers w wierszu poleceń.

const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();

(async () => {
    // Określ funkcję osadzającą do użycia za pomocą parametru embeddingFunction
    const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})

    // Dodaj dane, nie określając wektorów; funkcja add wywoła funkcję embeddingFunction do obliczenia wektorów tekstu
    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"], 
    })

    // Wyszukaj dane, które również wywołają funkcję embeddingFunction do obliczenia wektorów dla zapytań i następnie wyszukają podobne dane
    const results = await collection.query({
        nResults: 2, 
        queryTexts: ["lorem ipsum"]
    }) 
})();

OPENAI

Chroma dostarcza wygodną otoczkę dla interfejsu API modelu osadzającego OpenAI. Aby wywoływać API OpenAI, będziesz potrzebować klucza API, który możesz uzyskać, rejestrację na konto OpenAI.

const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "kluczAPI"})

// użyj bezpośrednio 
const embeddings = embedder.generate(["dokument1","dokument2"])

// Określ funkcję osadzającą za pomocą parametru embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})

Opcjonalnie możesz przekazać parametr model_name, aby wybrać model osadzający OpenAI do użycia. Domyślnie Chroma używa text-embedding-ada-002.

Niestandardowe funkcje osadzające

Jeśli używasz innych modeli osadzających, możesz zintegrować bazową klasę EmbeddingFunction i wywołać swój wybrany model do generowania wektorów.

Uwaga: Niestandardowe funkcje osadzające nie są wymagane, ponieważ możesz wstępnie obliczyć wektory za pomocą własnego modelu osadzającego, a następnie używać wektorów do odczytywania i zapisywania danych Chromy.

class MyEmbeddingFunction {
  private api_key: string;

  constructor(api_key: string) {
    this.api_key = api_key;
  }

  public async generate(texts: string[]): Promise<number[][]> {
    // Wywołaj swój własny model do obliczania wektorów
    return embeddings;
  }
}