Les vecteurs d'incorporation sont le moyen naturel pour que l'intelligence artificielle représente tout type de données, et de nombreux algorithmes utilisent des vecteurs de caractéristiques pour représenter les données. Ils peuvent représenter du texte, des images, ainsi que de l'audio et de la vidéo. Il existe de nombreuses méthodes pour calculer des vecteurs de caractéristiques, notamment l'utilisation de modèles d'incorporation open source ou de quelques API de services cloud, comme l'API OpenAI.
Chroma fournit une enveloppe légère pour les modèles d'incorporation populaires, facilitant ainsi leur utilisation dans vos applications.
Transformers.js
Chroma peut exécuter des modèles d'incorporation localement sur votre machine à l'aide de Transformers.js pour générer des vecteurs de caractéristiques. Transformers utilise le modèle "Xenova/all-MiniLM-L6-v2". Pour exécuter cela, installez la bibliothèque Transformers.js en exécutant npm install @xenova/transformers
dans la ligne de commande.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Spécifiez la fonction d'incorporation à utiliser via le paramètre embeddingFunction
const collection = await client.getOrCreateCollection({name: "nom", embeddingFunction: embedder})
// Ajoutez des données sans spécifier de vecteurs ; la fonction d'ajout appellera la fonction d'incorporation pour calculer des vecteurs de texte
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"],
})
// Interrogez les données, qui appelleront également la fonction d'incorporation pour calculer des vecteurs pour les queryTexts, puis rechercher des données similaires
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma fournit une enveloppe pratique pour l'API du modèle d'incorporation d'OpenAI. Pour appeler l'API OpenAI, vous aurez besoin d'une clé API, que vous pouvez obtenir en vous inscrivant à un compte OpenAI.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "cléAPI"})
// utilisation directe
const embeddings = embedder.generate(["document1","document2"])
// Spécifiez la fonction d'incorporation en utilisant le paramètre embeddingFunction
const collection = await client.createCollection({name: "nom", embeddingFunction: embedder})
const collection = await client.getCollection({name: "nom", embeddingFunction: embedder})
Vous pouvez éventuellement transmettre un paramètre model_name pour choisir le modèle d'incorporation OpenAI à utiliser. Par défaut, Chroma utilise text-embedding-ada-002.
Fonctions d'incorporation personnalisées
Si vous utilisez d'autres modèles d'incorporation, vous pouvez intégrer la classe de base EmbeddingFunction et appeler votre propre modèle choisi pour générer des vecteurs.
Remarque : Les fonctions d'incorporation personnalisées ne sont pas requises, car vous pouvez précalculer des vecteurs à l'aide de votre propre modèle d'incorporation, puis utiliser les vecteurs pour lire et écrire des données Chroma.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Appelez votre propre modèle pour calculer des vecteurs
return embeddings;
}
}