Web Vector Storage (WVS) เป็นฐานข้อมูลเวกเตอร์ที่มีน้ำหนักเบาและมีประสิทธิภาพ ซึ่งจัดเก็บเวกเตอร์เอกสารไว้ใน IndexedDB ของเบราว์เซอร์ แพ็คเกจนี้ช่วยให้คุณทำการค้นหาความคล้ายคลึงทางความหมายในเอกสารข้อความโดยใช้การฝังเวกเตอร์ การค้นหาความหมายหมายถึงความสามารถในการเข้าใจความหมายและบริบทของเอกสารข้อความและการสืบค้น ทำให้ผลการค้นหามีความแม่นยำและเกี่ยวข้องมากขึ้น
Web Vector Storage รองรับผู้ให้บริการและโมเดลการฝังที่หลากหลายเพื่อสร้างการฝังเพื่อแปลงเอกสารข้อความให้เป็นเวกเตอร์ และจัดให้มีอินเทอร์เฟซสำหรับการค้นหาเอกสารที่คล้ายกันโดยยึดตามความคล้ายคลึงโคไซน์
ร้านค้าเวกเตอร์เป็นองค์ประกอบหลักในการสร้างแอปพลิเคชัน AI ที่สร้างการดึงข้อมูล (RAG) โดยใช้โมเดลภาษาขนาดใหญ่ (LLM) เมื่อรัน LLM บน Edge (เช่น ในเบราว์เซอร์) การมีเวคเตอร์เนทีฟของเว็บเบราว์เซอร์อาจมีประโยชน์ ช่วยให้สามารถจัดเก็บข้อมูลของผู้ใช้ในเครื่องได้ เช่นเดียวกับการใช้ประโยชน์จากความสามารถในการประมวลผลในเครื่องภายในอุปกรณ์ของผู้ใช้ ซึ่งช่วยลดค่าใช้จ่ายและต้นทุน
ความคล้ายคลึงกันของโคไซน์คือการวัดความคล้ายคลึงกันระหว่างเวกเตอร์ที่ไม่เป็นศูนย์สองตัวในพื้นที่ผลคูณภายใน มันถูกกำหนดให้เป็นโคไซน์ของมุมระหว่างเวกเตอร์สองตัว ค่าความคล้ายคลึงของโคไซน์มีตั้งแต่ -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 : อินสแตนซ์ของคลาสตัวฝัง (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 สงวนลิขสิทธิ์.