Vector Storage es una base de datos vectorial liviana y eficiente que almacena vectores de documentos en el indexedDB del navegador. Este paquete le permite realizar búsquedas de similitud semántica en documentos de texto utilizando incrustaciones vectoriales. La búsqueda semántica se refiere a la capacidad de comprender el significado y el contexto de los documentos y consultas de texto, lo que permite resultados de búsqueda más precisos y relevantes. El almacenamiento de Vector aprovecha los incrustaciones de OpenAI para convertir los documentos de texto en vectores y proporciona una interfaz para buscar documentos similares basados en la similitud de coseno.
La similitud de coseno es una medida de similitud entre dos vectores distintos de cero en un espacio de productos internos. Se define como el coseno del ángulo entre los dos vectores. El valor de similitud de coseno varía de -1 a 1, donde 1 indica una similitud completa, 0 indica no similitud y -1 indica una disimilitud completa.
En este paquete, la similitud de coseno se utiliza para medir la similitud entre los vectores de documentos y el vector de consulta. El puntaje de similitud de coseno se calcula utilizando el producto DOT de los vectores, dividido por el producto de sus magnitudes.
El mecanismo menos utilizado (LRU) se utiliza para administrar el tamaño de almacenamiento y eliminar automáticamente los documentos cuando el tamaño de almacenamiento excede el límite especificado. Los documentos se clasifican por su contador de éxito (ascendente) y luego por su marca de tiempo (ascendente). Los documentos con el conteo de éxito 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 con NPM:
npm i vector-storageAquí hay un ejemplo básico de cómo usar la clase VectorStorage:
import { VectorStorage } from "vector-storage" ;
// Create an instance of VectorStorage
const vectorStore = new VectorStorage ( { openAIApiKey : "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 ) ; La clase principal para administrar vectores de documentos en IndexedDB.
Crea una nueva instancia de VectorStorage.
Opciones : un objeto que contiene las siguientes propiedades:
interface IVSOptions {
openAIApiKey : string ; // The OpenAI API key used for generating embeddings.
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.
openaiModel ?: string ; // The OpenAI model used for generating embeddings. Defaults to 'text-embedding-ada-002'.
}Agrega un documento de texto a la tienda y devuelve el documento creado.
Agrega múltiples documentos de texto a la tienda y devuelve una variedad de documentos creados.
Realiza una búsqueda de similitud en los documentos almacenados y devuelve una matriz de documentos coincidentes.
Parámetros : un objeto que contiene las siguientes propiedades:
La interfaz IVSDocument representa un objeto de documento almacenado en la base de datos Vector. Contiene las siguientes propiedades:
interface IVSDocument {
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 de mejoras, no dude en abrir un problema en GitHub.
Este proyecto tiene licencia bajo la licencia MIT. Consulte el archivo de licencia para el texto completo de la licencia.
Copyright (c) Nitai Aharoni. Reservados todos los derechos.