vecdb
v1.7
Una base de datos de incrustación vectorial muy simple, puede decir que es una mesa de hash que le permite encontrar elementos similares al elemento que está buscando.
Soy un entusiasta de las bases de datos, y este es un proyecto de diversión y aprendizaje que podría usarse en la producción;).
PD : Me gusta reinventar la rueda en mi tiempo libre, ¡porque es mi tiempo libre!
Estoy usando el modelo
{key => value},
keydebe ser un valor único que represente el elemento.valuedebe ser el vector en sí (lista de flotadores).
Por defecto,
vecdbbuscaconfig.ymlen el directorio de trabajo actual. Pero puede anularlo utilizando el indicador--config /path/to/config.ymlproporcionando su propia ruta de archivo personalizado.
# 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 cuando tenga un vector y desea almacenarlo en algún lugar.POST /v1/vectors/search cuando tenga un vector y desea enumerar todas las claves/ID de vectores similares ordenadas por similitud de coseno en orden descendente.POST /v1/embeddings/text/write cuando tenga un texto y desea que vecdb construya y almacene el vector para usted usando el embedido configurado (Gemini por ahora).POST /v1/embeddings/text/search cuando tenga un texto y desea que vecdb cree un vector y busque claves de vectores similares para usted ordenadas por similitud de coseno en orden descendente. {
"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 configura
trueembedder.enabled.
{
"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 configura
trueembedder.enabled.
{
"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)
}