WVS(웹 벡터 저장소)는 브라우저의 IndexedDB에 문서 벡터를 저장하는 가볍고 효율적인 벡터 데이터베이스입니다. 이 패키지를 사용하면 벡터 임베딩을 사용하여 텍스트 문서에서 의미론적 유사성 검색을 수행할 수 있습니다. 의미 검색은 텍스트 문서와 쿼리의 의미와 맥락을 이해하여 보다 정확하고 관련성이 높은 검색 결과를 제공하는 기능을 말합니다.
웹 벡터 스토리지는 다양한 임베딩 공급자와 모델을 지원하여 텍스트 문서를 벡터로 변환하는 임베딩을 생성하고 코사인 유사성을 기반으로 유사한 문서를 검색하기 위한 인터페이스를 제공합니다.
벡터 스토어는 LLM(Large Language Models)을 사용하여 RAG(Retrieval Augmentation Generation) 생성 AI 애플리케이션을 구축하는 핵심 구성 요소입니다. 에지(예: 브라우저 내)에서 LLM을 실행할 때 웹 브라우저 기본 벡터 저장소를 갖는 것이 유용할 수 있습니다. 이를 통해 사용자 데이터를 로컬에 저장할 수 있을 뿐만 아니라 사용자 장치 내의 로컬 컴퓨팅 용량을 활용하여 오버헤드와 비용을 줄일 수 있습니다.
코사인 유사성은 내부 곱 공간에서 0이 아닌 두 벡터 간의 유사성을 측정한 것입니다. 두 벡터 사이의 각도의 코사인으로 정의됩니다. 코사인 유사성 값의 범위는 -1부터 1까지입니다. 여기서 1은 완전한 유사성을 나타내고, 0은 유사성이 없음을 나타내고, -1은 완전한 비유사성을 나타냅니다.
이 패키지에서는 문서 벡터와 쿼리 벡터 간의 유사성을 측정하기 위해 코사인 유사성을 사용합니다. 코사인 유사성 점수는 벡터의 내적을 크기의 곱으로 나누어 계산합니다.
LRU(Least Recent Used) 메커니즘을 사용하여 저장소 크기를 관리하고 저장소 크기가 지정된 제한을 초과하면 문서를 자동으로 제거합니다. 문서는 히트 카운터(오름차순)를 기준으로 정렬된 다음 타임스탬프(오름차순)를 기준으로 정렬됩니다. 적중 횟수가 가장 낮고 타임스탬프가 가장 오래된 문서는 저장소 크기가 한도 미만이 될 때까지 먼저 제거됩니다.
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 라이선스에 따라 라이선스가 부여됩니다. 전체 라이센스 텍스트는 LICENSE 파일을 참조하세요.
웹 벡터 저장소는 Nitai Aharoni의 훌륭한 작업을 기반으로 구축되었습니다. 모든 권리 보유.