يعد Web Vector Storage (WVS) قاعدة بيانات متجهة خفيفة الوزن وفعالة تقوم بتخزين متجهات المستندات في IndexedDB للمتصفح. تسمح لك هذه الحزمة بإجراء عمليات بحث عن التشابه الدلالي في المستندات النصية باستخدام التضمين المتجه. يشير البحث الدلالي إلى القدرة على فهم معنى وسياق المستندات النصية والاستعلامات، مما يتيح نتائج بحث أكثر دقة وذات صلة.
يدعم Web Vector Storage مجموعة متنوعة من موفري ونماذج التضمين لإنشاء عمليات التضمين لتحويل المستندات النصية إلى متجهات ويوفر واجهة للبحث في المستندات المماثلة بناءً على تشابه جيب التمام.
تعد مخازن المتجهات مكونًا أساسيًا في إنشاء تطبيقات الذكاء الاصطناعي التوليدي لجيل الاسترجاع (RAG) باستخدام نماذج اللغة الكبيرة (LLMs). عند تشغيل LLM على الحافة (أي داخل المتصفح)، قد يكون من المفيد وجود متجر ناقل أصلي لمتصفح الويب. يتيح ذلك التخزين المحلي لبيانات المستخدم بالإضافة إلى الاستفادة من سعة الحوسبة المحلية داخل جهاز المستخدم وبالتالي تخفيف النفقات العامة والتكلفة.
تشابه جيب التمام هو مقياس للتشابه بين ناقلين غير صفريين في مساحة المنتج الداخلية. يتم تعريفه على أنه جيب تمام الزاوية بين المتجهين. تتراوح قيمة تشابه جيب التمام من -1 إلى 1، حيث يشير 1 إلى التشابه الكامل، ويشير 0 إلى عدم التشابه، ويشير -1 إلى الاختلاف الكامل.
في هذه الحزمة، يتم استخدام تشابه جيب التمام لقياس التشابه بين متجهات المستند ومتجه الاستعلام. يتم حساب درجة تشابه جيب التمام باستخدام حاصل الضرب النقطي للمتجهات مقسومًا على حاصل ضرب مقاديرها.
يتم استخدام آلية الأقل استخدامًا مؤخرًا (LRU) لإدارة حجم التخزين وإزالة المستندات تلقائيًا عندما يتجاوز حجم التخزين الحد المحدد. يتم فرز المستندات حسب عداد النتائج (تصاعدي) ثم حسب الطابع الزمني (تصاعدي). تتم إزالة المستندات التي تحتوي على أقل عدد من النتائج والطوابع الزمنية الأقدم أولاً حتى يصبح حجم التخزين أقل من الحد.
قم بتثبيت الحزمة باستخدام npm:
npm i web-vector-storage
فيما يلي مثال أساسي لكيفية استخدام فئة 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 ) ;
فيما يلي مثال أساسي لكيفية استخدام فئة 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 ) ;
فيما يلي مثال أساسي لكيفية استخدام فئة 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 ) ;
الفئة الرئيسية لإدارة ناقلات المستندات في IndexedDB.
إنشاء مثيل جديد لـ VectorStorage.
embedder : مثيل لفئة 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 : كائن يحتوي على الخصائص التالية:
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.
}
إضافة مستند نصي إلى المتجر وإرجاع المستند الذي تم إنشاؤه.
إضافة مستندات نصية متعددة إلى المتجر وإرجاع مجموعة من المستندات التي تم إنشاؤها.
يقوم بإجراء بحث تشابه في المستندات المخزنة ويعيد مجموعة من المستندات المطابقة.
params : كائن يحتوي على الخصائص التالية:
تمثل واجهة IWVSDocument كائن مستند مخزن في قاعدة بيانات المتجهات. يحتوي على الخصائص التالية:
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.
}
المساهمات في هذا المشروع هي موضع ترحيب! إذا كنت ترغب في المساهمة، يرجى اتباع الخطوات التالية:
يرجى التأكد من أن الكود الخاص بك يتبع نمط ترميز المشروع وأن جميع الاختبارات تمر قبل إرسال طلب السحب. إذا وجدت أي أخطاء أو كانت لديك اقتراحات للتحسينات، فلا تتردد في فتح مشكلة على GitHub.
هذا المشروع مرخص بموجب ترخيص MIT. راجع ملف الترخيص للحصول على نص الترخيص الكامل.
تم إنشاء Web Vector Storage بناءً على العمل الرائع الذي قام به Nitai Aharoni. جميع الحقوق محفوظة.