Web Vector Storage (WVS) adalah database vektor ringan dan efisien yang menyimpan vektor dokumen di IndexedDB browser. Paket ini memungkinkan Anda melakukan pencarian kesamaan semantik pada dokumen teks menggunakan penyematan vektor. Pencarian semantik mengacu pada kemampuan untuk memahami makna dan konteks dokumen teks dan kueri, memungkinkan hasil pencarian yang lebih akurat dan relevan.
Penyimpanan Vektor Web mendukung berbagai penyedia dan model penyematan untuk menghasilkan penyematan guna mengubah dokumen teks menjadi vektor dan menyediakan antarmuka untuk mencari dokumen serupa berdasarkan kesamaan kosinus.
Penyimpanan vektor adalah komponen inti dalam membangun aplikasi AI Generatif Retrieval Augmentation Generation (RAG) menggunakan Large Language Model (LLM). Saat menjalankan LLM di edge (yaitu di dalam browser), memiliki penyimpanan vektor asli browser web dapat bermanfaat. Hal ini memungkinkan penyimpanan lokal data pengguna serta memanfaatkan kapasitas komputasi lokal dalam perangkat pengguna sehingga mengurangi overhead dan biaya.
Kemiripan kosinus adalah ukuran kemiripan antara dua vektor bukan nol dalam ruang hasil kali dalam. Didefinisikan sebagai kosinus sudut antara dua vektor. Nilai kosinus kemiripan berkisar antara -1 hingga 1, dimana 1 menunjukkan kemiripan sempurna, 0 menunjukkan tidak ada kemiripan, dan -1 menunjukkan ketidakmiripan sempurna.
Dalam paket ini, kesamaan kosinus digunakan untuk mengukur kesamaan antara vektor dokumen dan vektor kueri. Skor kesamaan kosinus dihitung menggunakan perkalian titik dari vektor-vektor, dibagi dengan perkalian besarnya.
Mekanisme Least Terakhir Digunakan (LRU) digunakan untuk mengatur ukuran penyimpanan dan secara otomatis menghapus dokumen ketika ukuran penyimpanan melebihi batas yang ditentukan. Dokumen diurutkan berdasarkan hit counternya (ascending) dan kemudian berdasarkan stempel waktunya (ascending). Dokumen dengan jumlah hit terendah dan stempel waktu terlama akan dihapus terlebih dahulu hingga ukuran penyimpanan berada di bawah batas.
Instal paket menggunakan npm:
npm i web-vector-storage
Berikut adalah contoh dasar cara menggunakan kelas 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 ) ;
Berikut adalah contoh dasar cara menggunakan kelas 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 ) ;
Berikut adalah contoh dasar cara menggunakan kelas 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 ) ;
Kelas utama untuk mengelola vektor dokumen di IndexedDB.
Membuat instance baru dari VectorStorage.
embedder : Sebuah instance dari kelas 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 : Sebuah objek yang berisi properti berikut:
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.
}
Menambahkan dokumen teks ke penyimpanan dan mengembalikan dokumen yang dibuat.
Menambahkan beberapa dokumen teks ke penyimpanan dan mengembalikan serangkaian dokumen yang dibuat.
Melakukan pencarian kesamaan pada dokumen yang disimpan dan mengembalikan serangkaian dokumen yang cocok.
params : Sebuah objek yang berisi properti berikut:
Antarmuka IWVSDocument mewakili objek dokumen yang disimpan dalam database vektor. Ini berisi properti berikut:
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.
}
Kontribusi untuk proyek ini dipersilahkan! Jika Anda ingin berkontribusi, silakan ikuti langkah-langkah berikut:
Harap pastikan bahwa kode Anda mengikuti gaya pengkodean proyek dan semua pengujian lulus sebelum mengirimkan permintaan penarikan. Jika Anda menemukan bug atau memiliki saran perbaikan, jangan ragu untuk membuka masalah di GitHub.
Proyek ini dilisensikan di bawah Lisensi MIT. Lihat file LISENSI untuk teks lisensi lengkap.
Penyimpanan Vektor Web dibangun berdasarkan karya hebat Nitai Aharoni. Semua hak dilindungi undang-undang.