Los vectores de incrustación son la forma nativa en la que la inteligencia artificial representa cualquier tipo de datos, y muchos algoritmos utilizan vectores de características para representar datos. Pueden representar texto, imágenes, así como audio y video. Existen muchos métodos para calcular vectores de características, incluido el uso de modelos de incrustación de código abierto o algunos servicios en la nube, como la API de OpenAI.
Chroma proporciona un envoltorio ligero para modelos de incrustación populares, facilitando su uso en tus aplicaciones.
Transformers.js
Chroma puede ejecutar modelos de incrustación localmente en tu máquina mediante Transformers.js para generar vectores de características. Transformers utiliza el modelo "Xenova/all-MiniLM-L6-v2". Para ejecutar esto, instala la biblioteca Transformers.js ejecutando npm install @xenova/transformers
en la línea de comandos.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Especifica la función de incrustación a través del parámetro embeddingFunction
const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})
// Agrega datos sin especificar vectores; la función add llamará a la función embeddingFunction para calcular vectores de texto
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"],
})
// Consulta datos, que también llamará a la función embeddingFunction para calcular vectores para los queryTexts y luego buscar datos similares
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma proporciona un envoltorio conveniente para la API del modelo de incrustación de OpenAI. Para realizar llamadas a la API de OpenAI, necesitarás una clave API, que puedes obtener registrándote en una cuenta de OpenAI.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "apiKey"})
// usar directamente
const embeddings = embedder.generate(["documento1","documento2"])
// Especifica la función de incrustación utilizando el parámetro embeddingFunction
const collection = await client.createCollection({name: "nombre", embeddingFunction: embedder})
const collection = await client.getCollection({name: "nombre", embeddingFunction: embedder})
Opcionalmente, puedes pasar un parámetro model_name para elegir el modelo de incrustación de OpenAI a utilizar. Por defecto, Chroma utiliza text-embedding-ada-002.
Funciones de incrustación personalizadas
Si utilizas otros modelos de incrustación, puedes integrar la clase base EmbeddingFunction y llamar a tu propio modelo elegido para generar vectores.
Nota: Las funciones de incrustación personalizadas no son necesarias, ya que puedes precalcular vectores usando tu propio modelo de incrustación y luego utilizar los vectores para leer y escribir datos en Chroma.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Llama a tu propio modelo para calcular vectores
return embeddings;
}
}