Une base de données d'intégration de vecteur très simple, vous pouvez dire qu'il s'agit d'une table de hash qui vous permet de trouver des éléments similaires à l'élément que vous recherchez.
Je suis un passionné de bases de données, et c'est un projet pour le plaisir et l'apprentissage qui pourrait être utilisé en production;).
PS : J'aime réinventer la roue dans mon temps libre, car c'est mon temps libre!
J'utilise le modèle
{key => value},
keydoit être une valeur unique qui représente l'élément.valuedoit être le vecteur lui-même (liste des flotteurs).
Par défaut,
vecdbrechercheconfig.ymldans le répertoire de travail actuel. Mais vous pouvez le remplacer à l'aide de l'indicateur--config /path/to/config.ymlen fournissant votre propre chemin de fichier personnalisé.
# http server related configs
server :
# the address to listen on in the form of '[host]:port'
listen : " 0.0.0.0:3000 "
# storage related configs
store :
# the driver you want to use
# currently vecdb supports "bolt" which is based on boltdb the in process embedded the database
driver : " bolt "
# the arguments required by the driver
# for bolt, it requires a key called `database` points to the path you want to store the data in.
args :
database : " ./vec.db "
# embeddings related configs
embedder :
# whether to enable the embedder and all endpoints using it or not
enabled : true
# the driver you want to use, currently vecdb supports gemini
driver : gemini
# the arguments required by the driver
# currently gemini driver requires `api_key` and `text_embedding_model`
args :
# by default vecdb will replace anything between ${..} with the actual value from the ENV var
api_key : " ${GEMINI_API_KEY} "
text_embedding_model : " text-embedding-004 "POST /v1/vectors/write lorsque vous avez un vecteur et que vous souhaitez le stocker quelque part.POST /v1/vectors/search lorsque vous avez un vecteur et que vous souhaitez répertorier toutes les clés / ID des vecteurs similaires commandés par la similitude du cosinus dans l'ordre descendant.POST /v1/embeddings/text/write lorsque vous avez un texte et que vous souhaitez que vecdb construise et stockent le vecteur pour vous en utilisant l'embedder configuré (Gemini pour l'instant).POST /v1/embeddings/text/search lorsque vous avez un texte et que vous souhaitez que vecdb construise un vecteur et recherche des clés de vecteurs similaires que vous avez commandées par la similitude des cosinus dans l'ordre descendant. {
"bucket" : "BUCKET_NAME" , // consider it a collection or a table
"key" : "product-id-1" , // should be unique and represents a valid value in your main data store (example: the row id in your mysql/postgres ... etc)
"vector" : [ 1.929292 , 0.3848484 , - 1.9383838383 , ... ] // the vector you want to store
} {
"bucket" : "BUCKET_NAME" , // consider it a collection or a table
"vector" : [ 1.929292 , 0.3848484 , - 1.9383838383 , ... ] , // you will get a list ordered by cosine-similarity in descending order
"min_cosine_similarity" : 0.0 , // the more you increase, the fewer data you will get
"max_result_count" : 10 // max vectors to return (vecdb will first order by cosine similarity then apply the limit)
}Si vous définissez
embedder.enabledsurtrue.
{
"bucket" : "BUCKET_NAME" , // consider it a collection or a table
"key" : "product-id-1" , // should be unique and represents a valid value in your main data store (example: the row id in your mysql/postgres ... etc)
"content" : "This is some text representing the product" // this will be converted to a vector using the configured embedder
}Si vous définissez
embedder.enabledsurtrue.
{
"bucket" : "BUCKET_NAME" , // consider it a collection or a table
"content" : "A Product Text" , // you will get a list ordered by cosine-similarity in descending order
"min_cosine_similarity" : 0.0 , // the more you increase, the fewer data you will get
"max_result_count" : 10 // max vectors to return (vecdb will first order by cosine similarity then apply the limit)
}