vectordb
es una base de datos vectorial Pythonic que ofrece un conjunto completo de operaciones CRUD (Crear, Leer, Actualizar, Eliminar) y sólidas opciones de escalabilidad, que incluyen fragmentación y replicación. Se puede implementar fácilmente en una variedad de entornos, desde locales hasta locales y en la nube. vectordb
ofrece exactamente lo que necesita, ni más ni menos. Es un testimonio del diseño Pythonic eficaz sin demasiada ingeniería, lo que lo convierte en una solución sencilla pero potente para todas sus necesidades.
vectordb
aprovecha la poderosa capacidad de recuperación de DocArray y la escalabilidad, confiabilidad y capacidades de servicio de Jina. Aquí está la magia: DocArray sirve como motor que impulsa la lógica de búsqueda vectorial, mientras que Jina garantiza un servicio de índices eficiente y escalable. Esta sinergia culmina en una experiencia de base de datos vectorial sólida pero fácil de usar: eso es vectordb
para usted.
pip instalar vectordb
vectordb
localmenteComience definiendo un esquema de documento con la sintaxis de clase de datos DocArray:
de docarray importar BaseDoc de docarray.typing importar NdArrayclass ToyDoc (BaseDoc): texto: str = '' incrustación: NdArray[128]
Opte por una base de datos prediseñadas (como InMemoryExactNNVectorDB
o HNSWVectorDB
) y aplique el esquema:
from docarray import DocListimport numpy as npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# Especifique su espacio de trabajo pathdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# Indexe una lista de documentos con incrustaciones aleatoriasdoc_list = [ToyDoc(text=f'toy doc) {i}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# Realizar una consulta de búsquedaquery = ToyDoc(text='query', embedding=np .random.rand(128))resultados = db.search(inputs=DocList[ToyDoc]([query]), limit=10)# Imprime el formulario de coincidencias en resultados[0].matches: print(m)
Como emitimos una única consulta, results
contienen solo un elemento. Los resultados de la búsqueda del vecino más cercano se almacenan convenientemente en el atributo .matches
.
vectordb
como servicio vectordb
está diseñado para funcionar fácilmente como un servicio y admite los protocolos de comunicación gRPC
, HTTP
y Websocket
.
En el lado del servidor, iniciarías el servicio de la siguiente manera:
con db.serve(protocol='grpc', puerto=12345, réplicas=1, fragmentos=1) como servicio: service.block()
Este comando inicia vectordb
como un servicio en el puerto 12345
, utilizando el protocolo gRPC
con 1
réplica y 1
fragmento.
Del lado del cliente, puede acceder al servicio con los siguientes comandos:
from vectordb import Client# Crea una instancia de un cliente conectado al servidor. En la práctica, reemplace 0.0.0.0 en la dirección IP del servidor.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# Realice una consulta de búsquedaresults = client.search(inputs=DocList[ToyDoc] ([consulta]), límite=10)
Esto le permite realizar una consulta de búsqueda y recibir los resultados directamente desde el servicio vectordb
remoto.
vectordb
en Jina AI Cloud Puede implementar sin problemas su instancia vectordb
en Jina AI Cloud, lo que garantiza el acceso a su base de datos desde cualquier ubicación.
Comience integrando su instancia o clase de base de datos en un archivo Python:
# ejemplo.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # observe cómo `db` es la instancia que queremos servir si __name__ == '__main__':# IMPORTANTE: asegúrese para proteger esta parte del código usando __main__ guard con db.serve() como servicio:service.block()
A continuación, siga estos pasos para implementar su instancia:
Si aún no lo ha hecho, regístrese para obtener una cuenta de Jina AI Cloud.
Utilice la línea de comando jc
para iniciar sesión en su cuenta de Jina AI Cloud:
iniciar sesión
Implemente su instancia:
implementación de vectordb --db ejemplo:db
Después de la implementación, use el cliente vectordb
para acceder al punto final asignado:
de vectordb import Client# reemplace el ID con el ID de su base de datos implementada como se muestra en la captura de pantalla anteriorc = Cliente(address='grpcs://ID.wolf.jina.ai')
Luego puede enumerar, pausar, reanudar o eliminar sus bases de datos implementadas con el comando jc
:
jcloud list ID
jcloud pause ID
o jcloud resume ID
jcloud remove ID
Las bases de datos vectoriales sirven como repositorios sofisticados para incrustaciones, capturando la esencia de la similitud semántica entre objetos dispares. Estas bases de datos facilitan búsquedas de similitudes en una gran variedad de tipos de datos multimodales, allanando el camino para una nueva era de recuperación de información. Al proporcionar comprensión contextual y enriquecer los resultados de generación, las bases de datos vectoriales mejoran enormemente el rendimiento y la utilidad de los modelos de aprendizaje de idiomas (LLM). Esto subraya su papel fundamental en la evolución de las aplicaciones de ciencia de datos y aprendizaje automático.
Tanto el uso de la biblioteca local como las interacciones cliente-servidor en vectordb
comparten la misma API. Esto proporciona funciones index
, search
, update
y delete
:
index
: Acepta una DocList
para indexar.
search
: toma una DocList
de consultas por lotes o un único BaseDoc
como una sola consulta. Devuelve resultados únicos o múltiples, cada uno con matches
y atributos scores
ordenados por relevance
.
delete
: Acepta una DocList
de documentos para eliminar del índice. Solo el atributo id
es necesario, así que asegúrese de realizar un seguimiento de los IDs
indexed
si necesita eliminar documentos.
update
: Acepta una DocList
de documentos para actualizar en el índice. La operación update
reemplazará el documento indexed
con el mismo índice con los atributos y la carga útil de los documentos de entrada.
Puede servir vectordb
y acceder a él desde un cliente con los siguientes parámetros:
protocolo: El protocolo de servicio. Puede ser gRPC
, HTTP
, websocket
o una combinación de ellos, proporcionados como una lista. El valor predeterminado es gRPC
.
puerto: El puerto de acceso al servicio. Puede ser una lista de puertos para cada protocolo proporcionado. El valor predeterminado es 8081.
Espacio de trabajo: la ruta donde VectorDB conserva los datos requeridos. El valor predeterminado es '.' (directorio actual).
Puede establecer dos parámetros de escala al servir o implementar sus bases de datos vectoriales con vectordb
:
Fragmentos: el número de fragmentos de datos. Esto mejora la latencia, ya que vectordb
garantiza que los documentos se indexen solo en uno de los fragmentos. Las solicitudes de búsqueda se envían a todos los fragmentos y los resultados se combinan.
Réplicas: el número de réplicas de base de datos. vectordb
utiliza el algoritmo RAFT para sincronizar el índice entre réplicas de cada fragmento. Esto aumenta la disponibilidad del servicio y el rendimiento de la búsqueda, ya que múltiples réplicas pueden responder en paralelo a más solicitudes de búsqueda y al mismo tiempo permitir operaciones CRUD. Nota: En las implementaciones de JCloud, la cantidad de réplicas se establece en 1. Estamos trabajando para habilitar la replicación en la nube.
Estos son los parámetros para cada tipo VectorDB
:
Esta base de datos realiza una búsqueda exhaustiva de incrustaciones y tiene ajustes de configuración limitados:
workspace
: la carpeta donde se conservan los datos requeridos.
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
Esta base de datos emplea el algoritmo HNSW (Hierarchical Navigable Small World) de HNSWLib para la búsqueda aproximada del vecino más cercano. Proporciona varias opciones de configuración:
workspace
: especifica el directorio donde se almacenan y persisten los datos requeridos.
Además, HNSWVectorDB ofrece un conjunto de configuraciones que permiten ajustar el rendimiento y la precisión del algoritmo de búsqueda del vecino más cercano. Se pueden encontrar descripciones detalladas de estas configuraciones en el archivo README de HNSWLib:
space
: especifica la métrica de similitud utilizada para el espacio (las opciones son "l2", "ip" o "coseno"). El valor predeterminado es "l2".
max_elements
: establece la capacidad inicial del índice, que se puede aumentar dinámicamente. El valor predeterminado es 1024.
ef_construction
: este parámetro controla el equilibrio entre velocidad y precisión durante la construcción del índice. El valor predeterminado es 200.
ef
: este parámetro controla el equilibrio entre tiempo de consulta y precisión. El valor predeterminado es 10.
M
: Este parámetro define el número máximo de conexiones salientes en el gráfico. El valor predeterminado es 16.
allow_replace_deleted
: si se establece en True
, esto permite el reemplazo de elementos eliminados por elementos recién agregados. El valor predeterminado es False
.
num_threads
: esto establece el número predeterminado de subprocesos que se utilizarán durante las operaciones index
y search
. El valor predeterminado es 1.
vectordb
incluye una CLI simple para servir e implementar su base de datos:
Descripción | Dominio |
---|---|
Sirve tu base de datos localmente | vectordb serve --db example:db |
Implemente su base de datos en Jina AI Cloud | vectordb deploy --db example:db |
Interfaz fácil de usar: con vectordb
, la simplicidad es clave. Su interfaz intuitiva está diseñada para adaptarse a usuarios de distintos niveles de experiencia.
Diseño minimalista: vectordb
incluye todos los elementos esenciales, sin complejidad innecesaria. Garantiza una transición perfecta desde la implementación local a la del servidor y la nube.
Soporte CRUD completo: desde indexación y búsqueda hasta actualización y eliminación, vectordb
cubre todo el espectro de operaciones CRUD.
Base de datos como servicio: aproveche el poder de los protocolos gRPC, HTTP y Websocket con vectordb
. Le permite servir sus bases de datos y realizar operaciones de inserción o búsqueda de manera eficiente.
Escalabilidad: experimente el poder puro de las capacidades de implementación de vectordb
, incluidas funciones sólidas de escalabilidad como fragmentación y replicación. Mejore la latencia de su servicio con fragmentación, mientras que la replicación mejora la disponibilidad y el rendimiento.
Implementación en la nube: implementar su servicio en la nube es muy sencillo con Jina AI Cloud. ¡Pronto habrá más opciones de implementación!
Capacidad sin servidor: vectordb
se puede implementar en modo sin servidor en la nube, lo que garantiza una utilización óptima de los recursos y la disponibilidad de datos según sus necesidades.
Múltiples algoritmos ANN: vectordb
ofrece diversas implementaciones de algoritmos de vecinos más cercanos aproximados (ANN). Estas son las ofertas actuales, con más integraciones en el horizonte:
InMemoryExactNNVectorDB (búsqueda NN exacta): implementa un algoritmo de vecino más cercano simple.
HNSWVectorDB (basado en HNSW): utiliza HNSWLib
¡El futuro de Vector Database parece brillante y tenemos planes ambiciosos! Aquí hay un adelanto de las funciones que estamos desarrollando actualmente:
Más algoritmos de búsqueda de ANN: nuestro objetivo es admitir una gama aún más amplia de algoritmos de búsqueda de ANN.
Capacidades de filtrado mejoradas: estamos trabajando para mejorar nuestras soluciones de búsqueda de ANN para admitir el filtrado avanzado.
Personalización: Nuestro objetivo es hacer que vectordb
sea altamente personalizable, permitiendo a los desarrolladores de Python adaptar su comportamiento a sus necesidades específicas con facilidad.
Ampliación de la capacidad sin servidor: nos esforzamos por mejorar la capacidad sin servidor de vectordb
en la nube. Si bien actualmente admitimos el escalamiento entre 0 y 1 réplica, nuestro objetivo es extender esto de 0 a N réplicas.
Opciones de implementación ampliadas: estamos trabajando activamente para facilitar la implementación de vectordb
en varias plataformas en la nube, con una amplia gama de opciones.
¿Necesitas ayuda con vectordb
? ¿Está interesado en usarlo pero necesita ciertas funciones para satisfacer sus necesidades específicas? No dude en comunicarse con nosotros. Únase a nuestra comunidad de Discord para chatear con nosotros y otros miembros de la comunidad.
El proyecto VectorDB está respaldado por Jina AI y tiene licencia Apache-2.0. ¡Las contribuciones de la comunidad son muy apreciadas! Si tiene una idea para una nueva característica o una mejora, nos encantaría saber de usted. Siempre estamos buscando formas de hacer que vectordb
sea más fácil de usar y efectivo.