
HNWI (Hierarchical Navigable Small Worlds) HollowDB에 대한 인덱스 구현.
패키지 설치 :
yarn add hollowdb-vector
pnpm add hollowdb-vector
npm install hollowdb-vector다음과 같이 vectordb를 만들 수 있습니다.
import HollowDBVector from "hollowdb-vector" ;
import { WarpFactory , defaultCacheOptions } from "warp-contracts" ;
import { SetSDK } from "hollowdb" ;
import { Redis } from "ioredis" ;
import { RedisCache } from "warp-contracts-redis" ;
// connect to Redis
const redis = new Redis ( ) ;
// create Warp instance with Redis cache
const warp = WarpFactory . forMainnet ( ) . useKVStorageFactory (
( contractTxId : string ) =>
new RedisCache ( { ... defaultCacheOptions , dbLocation : ` ${ contractTxId } ` } , { client : redis } ) ,
) ;
// create HollowDB SDK
const wallet = JSON . parse ( readFileSync ( "./path/to/wallet.json" , "utf-8" ) ) ;
const contractTxId = "your-contract-tx-id" ;
const hollowdb = new SetSDK < string > ( wallet , contractTxId , warp ) ;
// create HollowDB Vector
const vectordb = new HollowDBVector ( hollowdb ) ;이를 통해 새로운 포인트를 삽입 할 수 있습니다.
const point = [ - 0.28571999073028564 /* and many more... */ , 0.13964000344276428 ] ;
// any object
const metadata = {
name : "My favorite vector!" ,
} ;
// insert a point
await vectordb . insert ( point , metadata ) ; 메타 데이터는 선택 사항이며 insert 중에 남겨 둘 수 있습니다. 나중에 설정하려면 언제든지 할 수 있습니다.
vectordb . db . set_metadata ( index , metadata ) ; 메모
포인트를 삽입하는 복잡성은 DB에서 더 많은 포인트로 증가 할 수 있습니다.
인덱스별로 벡터를 얻을 수 있으며, 이는 포인트 값과 메타 데이터를 반환합니다.
const { point , metadata } = await vectordb . get_vector ( index ) ;쿼리를 만들고 상단 K 관련 결과를 반환 할 수 있습니다.
// a query point
const query = [ - 0.28571999073028564 /* and many more... */ , 0.13964000344276428 ] ;
// number of top results to return
const K = 10 ;
// make a KNN search
const results = await vectordb . knn_search ( query , K ) ;
// each result contains the vector id, its distance to query, and metadata
const { id , distance , metadata } = results [ 0 ] ; HollowDB 벡터는 두 사람이 소유 한 새 계약을 배포 할 수있는 정적 기능을 내 보냅니다. 위에서 설명한대로 wallet 과 warp 인스턴스가 있다고 가정하면 다음과 함께 새로운 계약을 작성할 수 있습니다.
const { contractTxId } = await HollowDBVector . deploy ( wallet , warp ) ;
console . log ( "Deployed at:" , contractTxId ) ; 이 저장소의 로컬 설정을 위해 먼저 복제하십시오.
git clone https://github.com/firstbatchxyz/hollowdb-vector그런 다음 패키지를 설치하십시오.
pnpm install피어 종속성은 자동으로 설치해야합니다.
우리는 레포 내에 미리 컴파일 된 protobuf를 포함하지만 나중에 protobuf를 변경하려면 다음과 같이 컴파일 된 코드를 생성 할 수 있습니다.
# HNSW protobufs
pnpm proto:code:hnsw # generate js code
pnpm proto:type:hnsw # generate types
# Request protobufs
pnpm proto:code:req # generate js code
pnpm proto:type:req # generate types 고정 된 세트에 대한 몇 가지 사례에 따라 테스트가 진행됩니다.
pnpm test 경고
HollowDB 테스트를 위해서는 라이브 Redis 서버가 필요합니다. 또한 HollowDB 테스트에 시간이 걸릴 수 있습니다.
다음과 함께 서식을 확인하십시오.
pnpm format모든 것을 다음과 함께 보풀
pnpm lint다음과 같이 유형을 확인할 수도 있습니다.
pnpm checkHollowDB Vector는 Danny를 대체합니다. 레거시 코드는이 분기를 참조하십시오.
HollowDB 벡터는 Apache 2.0에 따라 라이센스가 부여됩니다.