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;
}
}