Web Vector Storage (WVS) es una base de datos de vectores liviana y eficiente que almacena vectores de documentos en IndexedDB del navegador. Este paquete le permite realizar búsquedas de similitud semántica en documentos de texto utilizando incrustaciones de vectores. La búsqueda semántica se refiere a la capacidad de comprender el significado y el contexto de consultas y documentos de texto, lo que permite resultados de búsqueda más precisos y relevantes.
Web Vector Storage admite una variedad de proveedores y modelos de incrustación para generar incrustaciones para convertir documentos de texto en vectores y proporciona una interfaz para buscar documentos similares según la similitud del coseno.
Los almacenes de vectores son un componente central en la creación de aplicaciones de IA generativa de generación de aumento de recuperación (RAG) que utilizan modelos de lenguaje grandes (LLM). Cuando se ejecuta un LLM en el borde (es decir, en el navegador), puede resultar útil tener un almacén de vectores nativo del navegador web. Esto permite el almacenamiento local de los datos del usuario, así como aprovechar la capacidad informática local dentro del dispositivo del usuario, aliviando así los gastos generales y los costos.
La similitud del coseno es una medida de similitud entre dos vectores distintos de cero en un espacio producto interno. Se define como el coseno del ángulo entre dos vectores. El valor de similitud del coseno varía de -1 a 1, donde 1 indica similitud completa, 0 indica ninguna similitud y -1 indica disimilitud completa.
En este paquete, la similitud del coseno se utiliza para medir la similitud entre los vectores de documentos y el vector de consulta. La puntuación de similitud del coseno se calcula utilizando el producto escalar de los vectores, dividido por el producto de sus magnitudes.
El mecanismo de uso menos reciente (LRU) se utiliza para administrar el tamaño de almacenamiento y eliminar documentos automáticamente cuando el tamaño de almacenamiento excede el límite especificado. Los documentos se ordenan por su contador de visitas (ascendente) y luego por su marca de tiempo (ascendente). Los documentos con el recuento de visitas más bajo y las marcas de tiempo más antiguas se eliminan primero hasta que el tamaño de almacenamiento esté por debajo del límite.
Instale el paquete usando npm:
npm i web-vector-storage
A continuación se muestra un ejemplo básico de cómo utilizar la clase 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 ) ;
A continuación se muestra un ejemplo básico de cómo utilizar la clase 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 ) ;
A continuación se muestra un ejemplo básico de cómo utilizar la clase 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 ) ;
La clase principal para gestionar vectores de documentos en IndexedDB.
Crea una nueva instancia de VectorStorage.
incrustador : una instancia de una clase de incrustador (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.
}
opciones : un objeto que contiene las siguientes propiedades:
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.
}
Agrega un documento de texto a la tienda y devuelve el documento creado.
Agrega varios documentos de texto a la tienda y devuelve una serie de documentos creados.
Realiza una búsqueda de similitud en los documentos almacenados y devuelve una serie de documentos coincidentes.
params : un objeto que contiene las siguientes propiedades:
La interfaz IWVSDocument representa un objeto de documento almacenado en la base de datos vectorial. Contiene las siguientes propiedades:
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.
}
¡Las contribuciones a este proyecto son bienvenidas! Si desea contribuir, siga estos pasos:
Asegúrese de que su código siga el estilo de codificación del proyecto y que todas las pruebas pasen antes de enviar una solicitud de extracción. Si encuentra algún error o tiene sugerencias para mejorar, no dude en abrir un problema en GitHub.
Este proyecto está bajo la licencia MIT. Consulte el archivo LICENCIA para obtener el texto completo de la licencia.
Web Vector Storage se basa en el gran trabajo de Nitai Aharoni. Reservados todos los derechos.