Die Einbettungsvektoren sind der natürliche Weg für künstliche Intelligenz, um jede Art von Daten darzustellen, und viele Algorithmen verwenden Merkmalsvektoren, um Daten darzustellen. Sie können Texte, Bilder sowie Audio- und Videodaten darstellen. Es gibt viele Methoden zur Berechnung von Merkmalsvektoren, einschließlich der Verwendung von Open-Source-Einbettungsmodellen oder einiger Cloud-Service-APIs, wie z.B. der openai API.
Chroma bietet eine leichte Wrapper-Bibliothek für beliebte Einbettungsmodelle, die es Ihnen ermöglicht, diese in Ihren Anwendungen zu verwenden.
Transformers.js
Chroma kann Einbettungsmodelle lokal auf Ihrem Rechner ausführen und mithilfe von Transformers.js Merkmalsvektoren generieren. Transformers verwendet das Modell "Xenova/all-MiniLM-L6-v2". Um dies auszuführen, installieren Sie die Transformers.js-Bibliothek, indem Sie in der Befehlszeile npm install @xenova/transformers
ausführen.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Geben Sie die zu verwendende Einbettungsfunktion über den Parameter embeddingFunction an
const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})
// Fügen Sie Daten hinzu, ohne Vektoren anzugeben; die add-Funktion ruft die Einbettungsfunktion auf, um Textvektoren zu berechnen
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"],
})
// Abfrage von Daten, bei der ebenfalls die Einbettungsfunktion aufgerufen wird, um Vektoren für die Abfrage-Texte zu berechnen und anschließend nach ähnlichen Daten zu suchen
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma bietet einen praktischen Wrapper für die OpenAI-Einbettungsmodell-API. Um Aufrufe an die OpenAI-API zu tätigen, benötigen Sie einen API-Schlüssel, den Sie durch Registrierung eines OpenAI-Kontos erhalten können.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "apiKey"})
// Direkte Verwendung
const embeddings = embedder.generate(["document1","document2"])
// Angeben der Einbettungsfunktion mit dem Parameter embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})
Sie können optional einen model_name-Parameter übergeben, um das zu verwendende OpenAI-Einbettungsmodell auszuwählen. Standardmäßig verwendet Chroma text-embedding-ada-002.
Benutzerdefinierte Einbettungsfunktionen
Wenn Sie andere Einbettungsmodelle verwenden, können Sie die Basisklasse EmbeddingFunction integrieren und Ihr eigenes gewähltes Modell aufrufen, um Vektoren zu generieren.
Hinweis: Benutzerdefinierte Einbettungsfunktionen sind nicht erforderlich, da Sie Vektoren mithilfe Ihres eigenen Einbettungsmodells vorberechnen und dann die Vektoren zum Lesen und Schreiben von Chroma-Daten verwenden können.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Rufen Sie Ihr eigenes Modell auf, um Vektoren zu berechnen
return embeddings;
}
}