chromadb rs
v1.1.0

cargo add chromadbСсылка на библиотеку можно найти здесь.
client - для взаимодействия с сервером ChromADB.collection - для взаимодействия с соответствующей коллекцией ChromADB. use chromadb :: v2 :: client :: { ChromaAuthMethod , ChromaClient , ChromaClientOptions , ChromaTokenHeader } ;
use chromadb :: v2 :: collection :: { ChromaCollection , GetQuery , GetResult , CollectionEntries } ;
// With default ChromaClientOptions
// Defaults to http://localhost:8000
let client : ChromaClient = ChromaClient :: new ( Default :: default ( ) ) ;
// With custom ChromaClientOptions
let auth = ChromaAuthMethod :: TokenAuth {
token : "<TOKEN>" . to_string ( ) ,
header : ChromaTokenHeader :: Authorization
} ;
let client : ChromaClient = ChromaClient :: new ( ChromaClientOptions {
url : "<CHROMADB_URL>" . into ( ) ,
database : Some ( "<DATABASE>" . into ( ) ) ,
auth
} ) ; use serde_json :: json ;
// Get or create a collection with the given name and no metadata.
let collection : ChromaCollection = client . get_or_create_collection ( "my_collection" , None ) . await ? ;
// Get the UUID of the collection
let collection_uuid = collection . id ( ) ;
println ! ( "Collection UUID: {}" , collection_uuid ) ; // Upsert some embeddings with documents and no metadata.
let collection_entries = CollectionEntries {
ids : vec ! [ "demo-id-1" . into ( ) , "demo-id-2" . into ( ) ] ,
embeddings : Some ( vec ! [ vec! [ 0.0_f32 ; 768 ] , vec! [ 0.0_f32 ; 768 ] ] ) ,
metadatas : None ,
documents : Some ( vec ! [
"Some document about 9 octopus recipies" . into ( ) ,
"Some other document about DCEU Superman Vs CW Superman" . into ( )
] )
} ;
let result : bool = collection . upsert ( collection_entries , None ) . await ? ;
// Create a filter object to filter by document content.
let where_document = json ! ( {
"$contains" : "Superman"
} ) ;
// Get embeddings from a collection with filters and limit set to 1.
// An empty IDs vec will return all embeddings.
let get_query = GetQuery {
ids : vec ! [ ] ,
where_metadata : None ,
limit : Some ( 1 ) ,
offset : None ,
where_document : Some ( where_document ) ,
include : Some ( vec ! [ "documents" . into ( ) , "embeddings" . into ( ) ] )
} ;
let get_result : GetResult = collection . get ( get_query ) . await ? ;
println ! ( "Get result: {:?}" , get_result ) ;Найдите больше информации о доступных фильтрах и опциях в документации get ().
//Instantiate QueryOptions to perform a similarity search on the collection
//Alternatively, an embedding_function can also be provided with query_texts to perform the search
let query = QueryOptions {
query_texts : None ,
query_embeddings : Some ( vec ! [ vec! [ 0.0_f32 ; 768 ] , vec! [ 0.0_f32 ; 768 ] ] ) ,
where_metadata : None ,
where_document : None ,
n_results : Some ( 5 ) ,
include : None ,
} ;
let query_result : QueryResult = collection . query ( query , None ) . await ? ;
println ! ( "Query result: {:?}" , query_result ) ;Этот ящик обладает встроенной поддержкой для Enterdings OpenAI и Sbert.
Для использования Openai Enterdings, включите функцию openai в вашем Cargo.toml.
let collection : ChromaCollection = client . get_or_create_collection ( "openai_collection" , None ) . await ? ;
let collection_entries = CollectionEntries {
ids : vec ! [ "demo-id-1" , "demo-id-2" ] ,
embeddings : None ,
metadatas : None ,
documents : Some ( vec ! [
"Some document about 9 octopus recipies" ,
"Some other document about DCEU Superman Vs CW Superman" ] )
} ;
// Use OpenAI embeddings
let openai_embeddings = OpenAIEmbeddings :: new ( Default :: default ( ) ) ;
collection . upsert ( collection_entries , Some ( Box :: new ( openai_embeddings ) ) ) . await ? ; OpenSaud дает представление о проектах с открытым исходным кодом, используя Data Science в GIT Commits.