
Implementasi indeks Hierarkis Navigable Small Worlds (HNSW) atas Hollowdb.
Instal paket:
yarn add hollowdb-vector
pnpm add hollowdb-vector
npm install hollowdb-vectorAnda dapat membuat vectordb sebagai berikut:
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 ) ;Dengan ini, Anda dapat memasukkan poin baru:
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 ) ; Metadata adalah opsional, dan Anda dapat meninggalkannya selama insert . Jika Anda ingin mengaturnya nanti, Anda selalu dapat melakukannya:
vectordb . db . set_metadata ( index , metadata ) ; Catatan
Kompleksitas memasukkan titik dapat meningkat dengan lebih banyak titik di DB.
Anda bisa mendapatkan vektor dengan indeksnya, yang mengembalikan nilai poin dan metadata:
const { point , metadata } = await vectordb . get_vector ( index ) ;Anda dapat membuat kueri dan mengembalikan hasil yang relevan K yang relevan:
// 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 Vector mengekspor fungsi statis yang memungkinkan Anda berdua menggunakan kontrak baru yang Anda miliki. Dengan asumsi bahwa Anda memiliki wallet dan instance warp seperti dijelaskan di atas, Anda dapat membuat kontrak baru dengan:
const { contractTxId } = await HollowDBVector . deploy ( wallet , warp ) ;
console . log ( "Deployed at:" , contractTxId ) ; Untuk pengaturan lokal repo ini, pertama -tama klon.
git clone https://github.com/firstbatchxyz/hollowdb-vectorKemudian, instal paket:
pnpm installKetergantungan sebaya harus diinstal secara otomatis.
Kami menyertakan protobuf yang telah dikompilasi sebelumnya dalam repo, tetapi jika Anda mengubah protobuf nanti, Anda dapat menghasilkan kode yang dikompilasi sebagai berikut:
# 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 Tes dijalankan lebih dari beberapa kasus untuk satu set tetap
pnpm test Peringatan
Anda memerlukan server Redis langsung untuk tes HollowDB berfungsi. Selain itu, tes hollowdb mungkin memakan waktu.
Periksa pemformatan dengan:
pnpm formatSubur semuanya dengan:
pnpm lintAnda juga dapat memeriksa jenis dengan:
pnpm checkVektor HollowdB menggantikan Danny, untuk kode warisan silakan merujuk ke cabang ini.
Hollowdb Vector dilisensikan di bawah Apache 2.0.