? Bekerja dalam proses
Voy sedang dalam pengembangan aktif. Akibatnya, API tidak stabil. Perlu diketahui bahwa mungkin ada perubahan perubahan sebelum rilis 1.0 mendatang.
Mengintip apa yang sedang kami kerjakan:
- Transformasi teks bawaan di WebAssembly: Sampai sekarang, Voy bergantung pada pustaka JavaScript seperti
transformers.js
untuk menghasilkan embeddings teks. Lihat Penggunaan untuk lebih detail.- Pembaruan Indeks: Saat ini diminta untuk membangun kembali indeks ketika pembaruan sumber daya terjadi.
- Dukungan TypeScript: Karena batasan perkakas WASM, tipe data yang kompleks tidak dihasilkan secara otomatis.
# with npm
npm i voy-search
# with Yarn
yarn add voy-search
# with pnpm
pnpm add voy-search
class Voy
Kelas Voy merangkum indeks dan memaparkan semua metode publik yang ditawarkan Voy.
class Voy {
/**
* By instantiating with a resource, Voy will construct the index. If the resource is
* absent, it will construct an empty index. Calling Voy.index() later on will override
* the empty index.
* @param {Resource | undefined} resource
*/
constructor ( resource ?: Resource ) ;
/**
* Index given resource. Voy.index() is designed for the use case where a Voy instance
* is instantiated without a resource. It will override the existing index. If you'd like
* to keep the existing index, you can use Voy.add() to add your resource to the index.
* @param {Resource} resource
*/
index ( resource : Resource ) : void ;
/**
* Search top k results with given query embedding.
* @param {Float32Array} query: Query Embedding
* @param {number} k: Number of items in the search result
* @returns {SearchResult}
*/
search ( query : Float32Array , k : number ) : SearchResult ;
/**
* Add given resource to the index.
* @param {Resource} resource
*/
add ( resource : Resource ) : void ;
/**
* Remove given resource from the index.
* @param {Resource} resource
*/
remove ( resource : Resource ) : void ;
/**
* Remove all resources from the index.
*/
clear ( ) : void ;
/**
* @returns {number}
*/
size ( ) : number ;
/**
* Serialize a Voy instance.
* @returns {string}
*/
serialize ( ) : string ;
/**
* Deserialize a serialized index into a Voy instance.
* @param {string} serialized_index
* @returns {Voy}
*/
static deserialize ( serialized_index : string ) : Voy ;
}
interface Resource {
embeddings : Array < {
id : string ; // id of the resource
title : string ; // title of the resource
url : string ; // url to the resource
embeddings : number [ ] ; // embeddings of the resource
} > ;
}
interface SearchResult {
neighbors : Array < {
id : string ; // id of the resource
title : string ; // title of the resource
url : string ; // url to the resource
} > ;
}
Selain kelas Voy, Voy juga mengekspor semua metode instan sebagai fungsi individu.
index(resource: Resource): SerializedIndex
Ini mengindeks sumber daya yang diberikan dan mengembalikan indeks serial.
Parameter
interface Resource {
embeddings : Array < {
id : string ; // id of the resource
title : string ; // title of the resource
url : string ; // url to the resource
embeddings : number [ ] ; // embeddings of the resource
} > ;
}
Kembali
type SerializedIndex = string ;
search(index: SerializedIndex, query: Query, k: NumberOfResult): SearchResult
Ini deserialisasi indeks yang diberikan dan mencari k
terdekat dari kueri.
Parameter
type SerializedIndex = string ;
type Query = Float32Array ; // embeddings of the search query
type NumberOfResult = number ; // K top results to return
Kembali
interface SearchResult {
neighbors : Array < {
id : string ; // id of the resource
title : string ; // title of the resource
url : string ; // url to the resource
} > ;
}
add(index: SerializedIndex, resource: Resource): SerializedIndex
Ini menambah sumber daya ke indeks dan mengembalikan indeks serial yang diperbarui.
Parameter
type SerializedIndex = string ;
interface Resource {
embeddings : Array < {
id : string ; // id of the resource
title : string ; // title of the resource
url : string ; // url to the resource
embeddings : number [ ] ; // embeddings of the resource
} > ;
}
Kembali
type SerializedIndex = string ;
remove(index: SerializedIndex, resource: Resource): SerializedIndex
Ini menghilangkan sumber daya dari indeks dan mengembalikan indeks serial yang diperbarui.
Parameter
type SerializedIndex = string ;
interface Resource {
embeddings : Array < {
id : string ; // id of the resource
title : string ; // title of the resource
url : string ; // url to the resource
embeddings : number [ ] ; // embeddings of the resource
} > ;
}
Kembali
type SerializedIndex = string ;
clear(index: SerializedIndex): SerializedIndex
Ini menghapus semua item dari indeks dan mengembalikan indeks serial kosong.
Parameter
type SerializedIndex = string ;
Kembali
type SerializedIndex = string ;
size(index: SerializedIndex): number;
Ini mengembalikan ukuran indeks.
Parameter
type SerializedIndex = string ;
Sampai sekarang, Voy bergantung pada perpustakaan seperti transformers.js
dan web-ai
untuk menghasilkan embeddings untuk teks:
import { TextModel } from "@visheratin/web-ai" ;
const { Voy } = await import ( "voy-search" ) ;
const phrases = [
"That is a very happy Person" ,
"That is a Happy Dog" ,
"Today is a sunny day" ,
] ;
const query = "That is a happy person" ;
// Create text embeddings
const model = await ( await TextModel . create ( "gtr-t5-quant" ) ) . model ;
const processed = await Promise . all ( phrases . map ( ( q ) => model . process ( q ) ) ) ;
// Index embeddings with voy
const data = processed . map ( ( { result } , i ) => ( {
id : String ( i ) ,
title : phrases [ i ] ,
url : `/path/ ${ i } ` ,
embeddings : result ,
} ) ) ;
const resource = { embeddings : data } ;
const index = new Voy ( resource ) ;
// Perform similarity search for a query embeddings
const q = await model . process ( query ) ;
const result = index . search ( q . result , 1 ) ;
// Display search result
result . neighbors . forEach ( ( result ) =>
console . log ( ` voy similarity search result: " ${ result . title } "` )
) ;
import { TextModel } from "@visheratin/web-ai" ;
const { Voy } = await import ( "voy-search" ) ;
const phrases = [
"That is a very happy Person" ,
"That is a Happy Dog" ,
"Today is a sunny day" ,
"Sun flowers are blooming" ,
] ;
const model = await ( await TextModel . create ( "gtr-t5-quant" ) ) . model ;
const processed = await Promise . all ( phrases . map ( ( q ) => model . process ( q ) ) ) ;
const data = processed . map ( ( { result } , i ) => ( {
id : String ( i ) ,
title : phrases [ i ] ,
url : `/path/ ${ i } ` ,
embeddings : result ,
} ) ) ;
const resourceA = { embeddings : data . slice ( 0 , 2 ) } ;
const resourceB = { embeddings : data . slice ( 2 ) } ;
const indexA = new Voy ( resourceA ) ;
const indexB = new Voy ( resourceB ) ;
Berlisensi di bawah salah satu dari
di pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, kontribusi apa pun secara sengaja diserahkan untuk dimasukkan dalam pekerjaan oleh Anda, sebagaimana didefinisikan dalam lisensi APACHE-2.0, harus dilisensikan ganda seperti di atas, tanpa syarat atau ketentuan tambahan.