Web Vector Storage (WVS) est une base de données vectorielles légère et efficace qui stocke les vecteurs de documents dans IndexedDB du navigateur. Ce package vous permet d'effectuer des recherches de similarité sémantique sur des documents texte à l'aide d'intégrations vectorielles. La recherche sémantique fait référence à la capacité de comprendre la signification et le contexte des documents texte et des requêtes, permettant ainsi des résultats de recherche plus précis et plus pertinents.
Web Vector Storage prend en charge une variété de fournisseurs et de modèles d'intégration pour générer des intégrations afin de convertir des documents texte en vecteurs et fournit une interface pour rechercher des documents similaires en fonction de la similarité cosinus.
Les magasins de vecteurs sont un composant essentiel dans la création d'applications d'IA générative de génération d'augmentation de récupération (RAG) à l'aide de grands modèles linguistiques (LLM). Lors de l'exécution d'un LLM en périphérie (c'est-à-dire dans un navigateur), disposer d'un magasin de vecteurs natif du navigateur Web peut être utile. Cela permet le stockage local des données de l'utilisateur ainsi que l'exploitation de la capacité de calcul locale au sein de l'appareil de l'utilisateur, réduisant ainsi les frais généraux et les coûts.
La similarité cosinus est une mesure de similarité entre deux vecteurs non nuls dans un espace produit interne. Il est défini comme le cosinus de l'angle entre les deux vecteurs. La valeur de similarité cosinus va de -1 à 1, où 1 indique une similarité complète, 0 indique une absence de similarité et -1 indique une dissimilarité totale.
Dans ce package, la similarité cosinus est utilisée pour mesurer la similarité entre les vecteurs de document et le vecteur de requête. Le score de similarité cosinus est calculé en utilisant le produit scalaire des vecteurs, divisé par le produit de leurs grandeurs.
Le mécanisme LRU (Les moins récemment utilisés) est utilisé pour gérer la taille de stockage et supprimer automatiquement les documents lorsque la taille de stockage dépasse la limite spécifiée. Les documents sont triés par leur compteur d'accès (croissant) puis par leur horodatage (croissant). Les documents avec le nombre d'accès le plus faible et les horodatages les plus anciens sont supprimés en premier jusqu'à ce que la taille de stockage soit inférieure à la limite.
Installez le package à l'aide de npm :
npm i web-vector-storage
Voici un exemple simple d'utilisation de la 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 ) ;
Voici un exemple simple d'utilisation de la 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 ) ;
Voici un exemple simple d'utilisation de la 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 ) ;
La classe principale pour gérer les vecteurs de documents dans IndexedDB.
Crée une nouvelle instance de VectorStorage.
embedder : Une instance d'une classe embedder (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 : Un objet contenant les propriétés suivantes :
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.
}
Ajoute un document texte au magasin et renvoie le document créé.
Ajoute plusieurs documents texte au magasin et renvoie un tableau de documents créés.
Effectue une recherche de similarité sur les documents stockés et renvoie un tableau de documents correspondants.
params : Un objet contenant les propriétés suivantes :
L'interface IWVSDocument représente un objet document stocké dans la base de données vectorielles. Il contient les propriétés suivantes :
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.
}
Les contributions à ce projet sont les bienvenues ! Si vous souhaitez contribuer, veuillez suivre ces étapes :
Veuillez vous assurer que votre code suit le style de codage du projet et que tous les tests réussissent avant de soumettre une pull request. Si vous trouvez des bugs ou avez des suggestions d'améliorations, n'hésitez pas à ouvrir un ticket sur GitHub.
Ce projet est sous licence MIT. Voir le fichier LICENSE pour le texte complet de la licence.
Le Web Vector Storage est construit sur l'excellent travail de Nitai Aharoni. Tous droits réservés.