
การดำเนินการตามดัชนี Small Worlds (HNSW) ตามลำดับชั้นเหนือ 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 Vector ส่งออกฟังก์ชั่นคงที่ที่ช่วยให้คุณปรับใช้สัญญาใหม่ที่คุณเป็นเจ้าของสองคน สมมติว่าคุณมี wallet และอินสแตนซ์วา warp ตามที่อธิบายไว้ข้างต้นคุณสามารถสร้างสัญญาใหม่ด้วย:
const { contractTxId } = await HollowDBVector . deploy ( wallet , warp ) ;
console . log ( "Deployed at:" , contractTxId ) ; สำหรับการตั้งค่าท้องถิ่นของ repo นี้ให้ทำการโคลนครั้งแรก
git clone https://github.com/firstbatchxyz/hollowdb-vectorจากนั้นติดตั้งแพ็คเกจ:
pnpm installควรติดตั้งการพึ่งพาของเพียร์โดยอัตโนมัติ
เรารวม protobuf ที่รวบรวมไว้ล่วงหน้าภายใน repo แต่ถ้าคุณจะเปลี่ยน 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 คำเตือน
คุณต้องใช้เซิร์ฟเวอร์ Redis สดเพื่อให้การทดสอบ HollowDB ทำงาน นอกจากนี้การทดสอบ HollowDB อาจใช้เวลาพอสมควร
ตรวจสอบการจัดรูปแบบด้วย:
pnpm formatผ้าสำลีทุกอย่างด้วย:
pnpm lintคุณสามารถตรวจสอบประเภทด้วย:
pnpm checkHollowDB Vector แทนที่ Danny สำหรับรหัสดั้งเดิมโปรดดูที่สาขานี้
เวกเตอร์ HollowDB ได้รับอนุญาตภายใต้ Apache 2.0