
Implementierung des hierarchischen navigierbaren Small Worlds (HNSW) -Endex über Hollowdb.
Installieren Sie das Paket:
yarn add hollowdb-vector
pnpm add hollowdb-vector
npm install hollowdb-vectorSie können das VectordB wie folgt erstellen:
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 ) ;Damit können Sie einen neuen Punkt einfügen:
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 ) ; Metadaten sind optional und Sie können es während insert weglassen. Wenn Sie es später einstellen möchten, können Sie immer:
vectordb . db . set_metadata ( index , metadata ) ; Notiz
Die Komplexität des Einsetzens eines Punktes kann mit mehr Punkten in der DB zunehmen.
Sie können einen Vektor nach seinem Index erhalten, der seinen Punktwert und seine Metadaten zurückgibt:
const { point , metadata } = await vectordb . get_vector ( index ) ;Sie können eine Abfrage erstellen und die relevanten Top -K -Ergebnisse zurückgeben:
// 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 exportiert eine statische Funktion, mit der Sie zwei einen neuen Vertrag einsetzen können, den Sie besitzen. Unter der Annahme, dass Sie wie oben beschrieben eine wallet und eine warp -Instanz haben, können Sie einen neuen Vertrag erstellen:
const { contractTxId } = await HollowDBVector . deploy ( wallet , warp ) ;
console . log ( "Deployed at:" , contractTxId ) ; Für die lokale Einrichtung dieses Repo klonen Sie es zuerst.
git clone https://github.com/firstbatchxyz/hollowdb-vectorInstallieren Sie dann Pakete:
pnpm installPeer -Abhängigkeiten sollten automatisch installiert werden.
Wir schließen den vorgefertigten Protobuf in das Repo ein. Wenn Sie jedoch den Protobuf später ändern, können Sie den kompilierten Code wie folgt generieren:
# 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 Tests werden über einige Fälle für einen festen Satz von durchgeführt
pnpm test Warnung
Sie benötigen einen Live -Redis -Server, damit der HollowDB -Test funktioniert. Darüber hinaus können die HollowDB -Tests einige Zeit dauern.
Überprüfen Sie die Formatierung mit:
pnpm formatFININT ALLES MIT:
pnpm lintSie können auch Typen mit:
pnpm checkHollowdb Vector ersetzt Danny, für den Legacy -Code finden Sie in dieser Filiale.
Hollowdb -Vektor ist unter Apache 2.0 lizenziert.