Web Vector Storage (WVS) ist eine leichte und effiziente Vektordatenbank, die Dokumentvektoren in der IndexedDB des Browsers speichert. Mit diesem Paket können Sie semantische Ähnlichkeitssuchen in Textdokumenten mithilfe von Vektoreinbettungen durchführen. Semantische Suche bezieht sich auf die Fähigkeit, die Bedeutung und den Kontext von Textdokumenten und Abfragen zu verstehen und so genauere und relevantere Suchergebnisse zu ermöglichen.
Web Vector Storage unterstützt eine Vielzahl von Einbettungsanbietern und -modellen zum Generieren von Einbettungen zum Konvertieren von Textdokumenten in Vektoren und bietet eine Schnittstelle zum Durchsuchen ähnlicher Dokumente auf der Grundlage der Kosinusähnlichkeit.
Vektorspeicher sind eine Kernkomponente beim Aufbau generativer KI-Anwendungen mit Retrieval Augmentation Generation (RAG) unter Verwendung von Large Language Models (LLMs). Wenn ein LLM am Edge (d. h. im Browser) ausgeführt wird, kann es hilfreich sein, über einen nativen Vektorspeicher des Webbrowsers zu verfügen. Dies ermöglicht die lokale Speicherung der Benutzerdaten sowie die Nutzung der lokalen Rechenkapazität im Gerät des Benutzers und verringert so den Aufwand und die Kosten.
Kosinusähnlichkeit ist ein Maß für die Ähnlichkeit zwischen zwei Vektoren ungleich Null in einem inneren Produktraum. Er ist definiert als der Kosinus des Winkels zwischen den beiden Vektoren. Der Kosinus-Ähnlichkeitswert reicht von -1 bis 1, wobei 1 vollständige Ähnlichkeit angibt, 0 keine Ähnlichkeit angibt und -1 völlige Unähnlichkeit angibt.
In diesem Paket wird die Kosinusähnlichkeit verwendet, um die Ähnlichkeit zwischen Dokumentvektoren und dem Abfragevektor zu messen. Der Kosinus-Ähnlichkeitswert wird anhand des Skalarprodukts der Vektoren dividiert durch das Produkt ihrer Größen berechnet.
Der LRU-Mechanismus (Least Recent Used) wird verwendet, um die Speichergröße zu verwalten und Dokumente automatisch zu entfernen, wenn die Speichergröße den angegebenen Grenzwert überschreitet. Dokumente werden nach ihrem Trefferzähler (aufsteigend) und dann nach ihrem Zeitstempel (aufsteigend) sortiert. Dokumente mit der niedrigsten Trefferzahl und den ältesten Zeitstempeln werden zuerst entfernt, bis die Speichergröße unter den Grenzwert fällt.
Installieren Sie das Paket mit npm:
npm i web-vector-storage
Hier ist ein einfaches Beispiel für die Verwendung der VectorStorage-Klasse:
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 ) ;
Hier ist ein einfaches Beispiel für die Verwendung der VectorStorage-Klasse:
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 ) ;
Hier ist ein einfaches Beispiel für die Verwendung der VectorStorage-Klasse:
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 ) ;
Die Hauptklasse zum Verwalten von Dokumentvektoren in IndexedDB.
Erstellt eine neue Instanz von VectorStorage.
Embedder : Eine Instanz einer Embedder-Klasse (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.
}
Optionen : Ein Objekt mit den folgenden Eigenschaften:
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.
}
Fügt dem Speicher ein Textdokument hinzu und gibt das erstellte Dokument zurück.
Fügt dem Speicher mehrere Textdokumente hinzu und gibt ein Array erstellter Dokumente zurück.
Führt eine Ähnlichkeitssuche für die gespeicherten Dokumente durch und gibt eine Reihe übereinstimmender Dokumente zurück.
params : Ein Objekt, das die folgenden Eigenschaften enthält:
Die IWVSDocument-Schnittstelle stellt ein Dokumentobjekt dar, das in der Vektordatenbank gespeichert ist. Es enthält die folgenden Eigenschaften:
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.
}
Beiträge zu diesem Projekt sind willkommen! Wenn Sie einen Beitrag leisten möchten, befolgen Sie bitte diese Schritte:
Bitte stellen Sie sicher, dass Ihr Code dem Codierungsstil des Projekts entspricht und dass alle Tests erfolgreich sind, bevor Sie eine Pull-Anfrage senden. Wenn Sie Fehler finden oder Verbesserungsvorschläge haben, können Sie gerne ein Problem auf GitHub eröffnen.
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Den vollständigen Lizenztext finden Sie in der LIZENZ-Datei.
Der Web Vector Storage basiert auf der großartigen Arbeit von Nitai Aharoni. Alle Rechte vorbehalten.