Le stockage vectoriel est une base de données vectorielle légère et efficace qui stocke des vecteurs documentaires dans le Browser du navigateur. Ce package vous permet d'effectuer des recherches de similitudes sémantiques sur des documents texte à l'aide d'incorporation vectorielle. La recherche sémantique fait référence à la capacité de comprendre le sens et le contexte des documents et requêtes texte, permettant des résultats de recherche plus précis et pertinents. Le stockage vectoriel exploite les incorporations OpenAI pour convertir les documents de texte en vecteurs et fournit une interface pour rechercher des documents similaires basés sur la similitude des cosinus.
La similitude en cosinus est une mesure de la similitude entre deux vecteurs non nuls dans un espace produit intérieur. Il est défini comme le cosinus de l'angle entre les deux vecteurs. La valeur de similitude du cosinus varie de -1 à 1, où 1 indique une similitude complète, 0 n'indique aucune similitude et -1 indique une dissimilarité complète.
Dans ce package, la similitude du cosinus est utilisée pour mesurer la similitude entre les vecteurs de documents et le vecteur de requête. Le score de similitude en cosinus est calculé à l'aide du produit DOT des vecteurs, divisé par le produit de leurs amplitudes.
Le mécanisme le moins récemment utilisé (LRU) est utilisé pour gérer la taille du stockage et supprimer automatiquement les documents lorsque la taille du stockage dépasse la limite spécifiée. Les documents sont triés par leur compteur à succès (ascendant) puis par leur horodatage (ascendant). Les documents avec le nombre de coups le plus bas et les plus anciens horodatages sont supprimés en premier jusqu'à ce que la taille du stockage soit inférieure à la limite.
Installez le package à l'aide de NPM:
npm i vector-storageVoici un exemple de base de la façon d'utiliser la classe 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 classe principale pour gérer les vecteurs de documents dans IndededDB.
Crée une nouvelle instance de VectorStorage.
Options : un objet contenant les propriétés suivantes:
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'.
}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 similitude sur les documents stockés et renvoie un tableau de documents correspondants.
Paramètres : un objet contenant les propriétés suivantes:
L'interface IVSDocument représente un objet de document stocké dans la base de données vectorielle. Il contient les propriétés suivantes:
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.
} 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 passent avant de soumettre une demande de traction. Si vous trouvez des bogues ou avez des suggestions d'améliorations, n'hésitez pas à ouvrir un problème sur GitHub.
Ce projet est autorisé sous la licence du MIT. Voir le fichier de licence pour le texte complet de licence.
Copyright (c) Nitai Aharoni. Tous droits réservés.