Web Vector Storage (WVS) é um banco de dados vetorial leve e eficiente que armazena vetores de documentos no IndexedDB do navegador. Este pacote permite realizar pesquisas de similaridade semântica em documentos de texto usando embeddings vetoriais. A pesquisa semântica refere-se à capacidade de compreender o significado e o contexto de documentos de texto e consultas, permitindo resultados de pesquisa mais precisos e relevantes.
O Web Vector Storage oferece suporte a uma variedade de provedores e modelos de incorporação para gerar incorporações para converter documentos de texto em vetores e fornece uma interface para pesquisar documentos semelhantes com base na similaridade de cosseno.
Os armazenamentos de vetores são um componente central na construção de aplicativos de IA generativos de geração de aumento de recuperação (RAG) usando modelos de linguagem grande (LLMs). Ao executar um LLM no edge (ou seja, no navegador), ter um armazenamento de vetores nativo do navegador da web pode ser útil. Isso permite o armazenamento local dos dados do usuário, bem como aproveita a capacidade de computação local no dispositivo do usuário, aliviando assim a sobrecarga e os custos.
A similaridade de cossenos é uma medida de similaridade entre dois vetores diferentes de zero em um espaço de produto interno. É definido como o cosseno do ângulo entre os dois vetores. O valor de similaridade do cosseno varia de -1 a 1, onde 1 indica similaridade completa, 0 indica nenhuma similaridade e -1 indica dissimilaridade completa.
Neste pacote, a similaridade de cosseno é usada para medir a similaridade entre os vetores do documento e o vetor de consulta. A pontuação de similaridade de cosseno é calculada usando o produto escalar dos vetores, dividido pelo produto de suas magnitudes.
O mecanismo menos usado recentemente (LRU) é usado para gerenciar o tamanho do armazenamento e remover documentos automaticamente quando o tamanho do armazenamento excede o limite especificado. Os documentos são classificados pelo contador de ocorrências (crescente) e, em seguida, pelo carimbo de data/hora (crescente). Os documentos com a contagem de ocorrências mais baixa e os carimbos de data/hora mais antigos são removidos primeiro, até que o tamanho do armazenamento fique abaixo do limite.
Instale o pacote usando npm:
npm i web-vector-storage
Aqui está um exemplo básico de como usar a classe VectorStorage:
import { VectorStorage } from "web-vector-storage" ;
import { OpenAIEmbedder } from "web-vector-storage" ;
// Create an instance of VectorStorage
const vectorStore = new VectorStorage ( new OpenAIEmbedder ( { apiKey : "your-openai-api-key" } ) ) ;
// Add a text document to the store
await vectorStore . addText ( "The quick brown fox jumps over the lazy dog." , {
category : "example" ,
} ) ;
// Perform a similarity search
const results = await vectorStore . similaritySearch ( {
query : "A fast fox leaps over a sleepy hound." ,
} ) ;
// Display the search results
console . log ( results ) ;
Aqui está um exemplo básico de como usar a classe VectorStorage:
import { VectorStorage } from "web-vector-storage" ;
import { OllamaEmbedder } from "web-vector-storage" ;
// Create an instance of VectorStorage
const vectorStore = new VectorStorage ( new OllamaEmbedder ( { embeddingModel : "your-favorite-ollama-embedding-model" } ) ) ;
// Add a text document to the store
await vectorStore . addText ( "The quick brown fox jumps over the lazy dog." , {
category : "example" ,
} ) ;
// Perform a similarity search
const results = await vectorStore . similaritySearch ( {
query : "A fast fox leaps over a sleepy hound." ,
} ) ;
// Display the search results
console . log ( results ) ;
Aqui está um exemplo básico de como usar a classe VectorStorage:
import { VectorStorage } from "web-vector-storage" ;
import { HFTransformerEmbedder } from "web-vector-storage" ;
// Create an instance of VectorStorage
const vectorStore = new VectorStorage ( new HFTransformerEmbedder ( { embeddingModel : "your-favorite-hf-transformer-embedding-model" } ) ) ;
// Add a text document to the store
await vectorStore . addText ( "The quick brown fox jumps over the lazy dog." , {
category : "example" ,
} ) ;
// Perform a similarity search
const results = await vectorStore . similaritySearch ( {
query : "A fast fox leaps over a sleepy hound." ,
} ) ;
// Display the search results
console . log ( results ) ;
A principal classe para gerenciar vetores de documentos no IndexedDB.
Cria uma nova instância do VectorStorage.
embedder : uma instância de uma classe incorporadora (OpenAIEmbedder, OllamaEmbedder, HFTransformerEmbedder)
interface IEmbedderOptions {
apiKey ?: string ; // The API key to use. Only applicable to OpenAIEmbedder.
baseUrl ?: string ; // The base URL to use to connect to remote service. Only applicable to OllamaEmbedder and defaults to http://localhost:11434
embeddingModel ?: string ; // The specific embedding model to use. Each embedder has a default if none is specified.
}
options : um objeto que contém as seguintes propriedades:
interface IWVSOptions {
maxSizeInMB ?: number ; // The maximum size of the storage in megabytes. Defaults to 2GB
debounceTime ?: number ; // The debounce time in milliseconds for saving to IndexedDB. Defaults to 0.
}
Adiciona um documento de texto à loja e retorna o documento criado.
Adiciona vários documentos de texto ao armazenamento e retorna uma série de documentos criados.
Executa uma pesquisa de similaridade nos documentos armazenados e retorna uma matriz de documentos correspondentes.
params : um objeto que contém as seguintes propriedades:
A interface IWVSDocument representa um objeto de documento armazenado no banco de dados vetorial. Ele contém as seguintes propriedades:
interface IWVSDocument {
hits ?: number ; // The number of hits (accesses) for the document. Omit if the value is 0.
metadata : object ; // The metadata associated with the document for filtering.
text : string ; // The text content of the document.
timestamp : number ; // The timestamp indicating when the document was added to the store.
vectorMag : number ; // The magnitude of the document vector.
vector : number [ ] ; // The vector representation of the document.
}
Contribuições para este projeto são bem-vindas! Se você quiser contribuir, siga estes passos:
Certifique-se de que seu código siga o estilo de codificação do projeto e que todos os testes sejam aprovados antes de enviar uma solicitação pull. Se você encontrar algum bug ou tiver sugestões de melhorias, fique à vontade para abrir um problema no GitHub.
Este projeto está licenciado sob a licença MIT. Consulte o arquivo LICENSE para obter o texto completo da licença.
O Web Vector Storage é baseado no excelente trabalho de Nitai Aharoni. Todos os direitos reservados.