Os vetores de incorporação são a maneira nativa para a inteligência artificial representar qualquer tipo de dados, e muitos algoritmos utilizam vetores de características para representar dados. Eles podem representar texto, imagens, assim como áudio e vídeo. Existem muitos métodos para calcular vetores de características, incluindo o uso de modelos de incorporação de código aberto ou alguns serviços de API em nuvem, como a API do openai.
Chroma fornece um invólucro leve para modelos populares de incorporação, tornando fácil o uso deles em suas aplicações.
Transformers.js
Chroma pode executar modelos de incorporação localmente em sua máquina usando o Transformers.js para gerar vetores de características. O Transformers utiliza o modelo "Xenova/all-MiniLM-L6-v2". Para executar isso, instale a biblioteca Transformers.js executando npm install @xenova/transformers
no terminal.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Especifique a função de incorporação a ser usada através do parâmetro embeddingFunction
const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})
// Adicione dados sem especificar vetores; a função de adição chamará a função de incorporação para computar vetores 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"],
})
// Consulte dados, que também chamará a função de incorporação para calcular vetores para os textos da consulta e depois procurar dados similares
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma fornece um invólucro conveniente para a API do modelo de incorporação da OpenAI. Para fazer chamadas à API da OpenAI, você precisará de uma chave de API, que pode obter registrando uma conta na OpenAI.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "apiKey"})
// usar diretamente
const embeddings = embedder.generate(["documento1","documento2"])
// Especifique a função de incorporação usando o parâmetro embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})
Você pode opcionalmente passar um parâmetro model_name para escolher o modelo de incorporação da OpenAI a ser usado. Por padrão, Chroma usa text-embedding-ada-002.
Funções de Incorporação Personalizadas
Se você usar outros modelos de incorporação, pode integrar a classe base EmbeddingFunction e chamar o modelo escolhido para gerar vetores.
Nota: Funções de incorporação personalizadas não são necessárias, pois você pode pré-calcular vetores usando seu próprio modelo de incorporação e depois usar os vetores para ler e escrever dados do Chroma.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Chame seu próprio modelo para calcular vetores
return embeddings;
}
}