vectordb
é um banco de dados vetorial Pythonic que oferece um conjunto abrangente de operações CRUD (Criar, Ler, Atualizar, Excluir) e opções robustas de escalabilidade, incluindo fragmentação e replicação. Ele pode ser facilmente implementado em vários ambientes, desde locais até locais e na nuvem. vectordb
oferece exatamente o que você precisa - nem mais, nem menos. É uma prova do design Pythonic eficaz sem excesso de engenharia, tornando-o uma solução enxuta, porém poderosa, para todas as suas necessidades.
vectordb
aproveita a poderosa capacidade de recuperação do DocArray e a escalabilidade, confiabilidade e recursos de serviço do Jina. Aqui está a mágica: DocArray serve como mecanismo que conduz a lógica de pesquisa vetorial, enquanto Jina garante serviço de índice eficiente e escalonável. Essa sinergia culmina em uma experiência de banco de dados vetorial robusta e fácil de usar - isso é vectordb
para você.
pip instalar vetordb
vectordb
localmenteComece definindo um esquema de documento com a sintaxe de classe de dados DocArray:
de docarray importar BaseDoc de docarray.typing importar NdArrayclass ToyDoc (BaseDoc): texto: str = '' incorporação: NdArray[128]
Opte por um banco de dados pré-construído (como InMemoryExactNNVectorDB
ou HNSWVectorDB
) e aplique o esquema:
from docarray import DocListimport numpy as npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# Especifique seu espaço de trabalho pathdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# Indexe uma lista de documentos com embeddings aleatóriosdoc_list = [ToyDoc(text=f'toy doc {eu}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# Execute uma consulta de pesquisaquery = ToyDoc(text='query', embedding=np .random.rand(128))resultados = db.search(inputs=DocList[ToyDoc]([query]), limit=10)# Imprima as correspondências de m em results[0].matches: print(m)
Como emitimos uma única consulta, results
contêm apenas um elemento. Os resultados da pesquisa do vizinho mais próximo são convenientemente armazenados no atributo .matches
.
vectordb
como serviço vectordb
foi projetado para ser facilmente servido como um serviço, suportando protocolos de comunicação gRPC
, HTTP
e Websocket
.
No lado do servidor, você iniciaria o serviço da seguinte maneira:
com db.serve(protocol='grpc', port=12345, replicas=1, shards=1) como serviço: service.block()
Este comando inicia vectordb
como um serviço na porta 12345
, usando o protocolo gRPC
com 1
réplica e 1
fragmento.
Do lado do cliente, você pode acessar o serviço com os seguintes comandos:
from vectordb import Client# Instancia um cliente conectado ao servidor. Na prática, substitua 0.0.0.0 no endereço IP do servidor.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# Execute uma pesquisa queryresults = client.search(inputs=DocList[ToyDoc] ([consulta]), limite=10)
Isso permite que você execute uma consulta de pesquisa, recebendo os resultados diretamente do serviço remoto vectordb
.
vectordb
no Jina AI Cloud Você pode implantar perfeitamente sua instância vectordb
no Jina AI Cloud, o que garante acesso ao seu banco de dados de qualquer local.
Comece incorporando sua instância ou classe de banco de dados em um arquivo Python:
# example.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # observe como `db` é a instância que queremos servirif __name__ == '__main__':# IMPORTANTE: certifique-se para proteger esta parte do código usando __main__ guardwith db.serve() como service:service.block()
A seguir, siga estas etapas para implantar sua instância:
Se ainda não o fez, inscreva-se para uma conta Jina AI Cloud.
Use a linha de comando jc
para fazer login em sua conta Jina AI Cloud:
login jc
Implante sua instância:
vectordb implantar --db exemplo:db
Após a implantação, use o cliente vectordb
para acessar o endpoint atribuído:
from vectordb import Client# substitua o ID pelo ID do seu banco de dados implantado, conforme mostrado na captura de tela acimac = Client(address='grpcs://ID.wolf.jina.ai')
Você pode então listar, pausar, retomar ou excluir seus bancos de dados implantados com o comando jc
:
jcloud list ID
jcloud pause ID
ou jcloud resume ID
jcloud remove ID
Bancos de dados vetoriais servem como repositórios sofisticados para incorporações, capturando a essência da similaridade semântica entre objetos díspares. Estas bases de dados facilitam pesquisas de similaridade em uma infinidade de tipos de dados multimodais, abrindo caminho para uma nova era de recuperação de informação. Ao fornecer compreensão contextual e enriquecer os resultados de geração, os bancos de dados vetoriais melhoram muito o desempenho e a utilidade dos Modelos de Aprendizagem de Línguas (LLM). Isto sublinha o seu papel fundamental na evolução da ciência de dados e das aplicações de aprendizagem automática.
Tanto o uso da biblioteca local quanto as interações cliente-servidor no vectordb
compartilham a mesma API. Isso fornece funcionalidades index
, search
, update
e delete
:
index
: aceita um DocList
para indexar.
search
: pega uma DocList
de consultas em lote ou um único BaseDoc
como uma única consulta. Ele retorna resultados únicos ou múltiplos, cada um com atributos matches
e scores
classificados por relevance
.
delete
: Aceita uma DocList
de documentos para remover do índice. Apenas o atributo id
é necessário, portanto, certifique-se de rastrear os IDs
indexed
se precisar excluir documentos.
update
: Aceita uma DocList
de documentos para atualizar no índice. A operação update
substituirá o documento indexed
pelo mesmo índice com os atributos e carga útil dos documentos de entrada.
Você pode servir vectordb
e acessá-lo de um cliente com os seguintes parâmetros:
protocolo: O protocolo de serviço. Pode ser gRPC
, HTTP
, websocket
ou uma combinação deles, fornecida como uma lista. O padrão é gRPC
.
port: A porta de acesso ao serviço. Pode ser uma lista de portas para cada protocolo fornecido. O padrão é 8081.
espaço de trabalho: o caminho onde o VectorDB persiste os dados necessários. O padrão é '.' (diretório atual).
Você pode definir dois parâmetros de escalabilidade ao servir ou implantar seus bancos de dados vetoriais com vectordb
:
Fragmentos: o número de fragmentos de dados. Isso melhora a latência, pois vectordb
garante que os documentos sejam indexados em apenas um dos fragmentos. As solicitações de pesquisa são enviadas para todos os fragmentos e os resultados são mesclados.
Réplicas: o número de réplicas de banco de dados. vectordb
usa o algoritmo RAFT para sincronizar o índice entre as réplicas de cada fragmento. Isso aumenta a disponibilidade do serviço e o rendimento da pesquisa, pois múltiplas réplicas podem responder em paralelo a mais solicitações de pesquisa, permitindo operações CRUD. Observação: nas implantações do JCloud, o número de réplicas é definido como 1. Estamos trabalhando para ativar a replicação na nuvem.
Aqui estão os parâmetros para cada tipo VectorDB
:
Este banco de dados realiza pesquisas exaustivas em embeddings e possui definições de configuração limitadas:
workspace
: a pasta onde os dados necessários são persistidos.
InMemoryExactNNVectorDB[MeuDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
Este banco de dados emprega o algoritmo HNSW (Hierarchical Navigable Small World) do HNSWLib para pesquisa aproximada de vizinho mais próximo. Ele fornece várias opções de configuração:
workspace
: especifica o diretório onde os dados necessários são armazenados e persistidos.
Além disso, o HNSWVectorDB oferece um conjunto de configurações que permitem ajustar o desempenho e a precisão do algoritmo de busca do vizinho mais próximo. Descrições detalhadas dessas configurações podem ser encontradas no README HNSWLib:
space
: especifica a métrica de similaridade usada para o espaço (as opções são "l2", "ip" ou "cosseno"). O padrão é "l2".
max_elements
: Define a capacidade inicial do índice, que pode ser aumentada dinamicamente. O padrão é 1024.
ef_construction
: Este parâmetro controla a compensação entre velocidade/precisão durante a construção do índice. O padrão é 200.
ef
: Este parâmetro controla a compensação entre tempo/precisão da consulta. O padrão é 10.
M
: Este parâmetro define o número máximo de conexões de saída no gráfico. O padrão é 16.
allow_replace_deleted
: Se definido como True
, permite a substituição de elementos excluídos por elementos recém-adicionados. O padrão é False
.
num_threads
: define o número padrão de threads a serem usados durante as operações de index
e search
. O padrão é 1.
vectordb
inclui uma CLI simples para servir e implantar seu banco de dados:
Descrição | Comando |
---|---|
Sirva seu banco de dados localmente | vectordb serve --db example:db |
Implante seu banco de dados no Jina AI Cloud | vectordb deploy --db example:db |
Interface amigável: Com vectordb
, a simplicidade é fundamental. Sua interface intuitiva foi projetada para acomodar usuários de diversos níveis de conhecimento.
Design minimalista: vectordb
reúne todos os elementos essenciais, sem complexidade desnecessária. Ele garante uma transição perfeita da implantação local para o servidor e na nuvem.
Suporte completo a CRUD: desde indexação e pesquisa até atualização e exclusão, vectordb
cobre todo o espectro de operações CRUD.
Banco de dados como serviço: aproveite o poder dos protocolos gRPC, HTTP e Websocket com vectordb
. Ele permite que você atenda seus bancos de dados e conduza operações de inserção ou pesquisa com eficiência.
Escalabilidade: experimente o poder bruto dos recursos de implantação do vectordb
, incluindo recursos robustos de escalabilidade, como fragmentação e replicação. Melhore a latência do seu serviço com fragmentação, enquanto a replicação aumenta a disponibilidade e o rendimento.
Implantação na nuvem: implantar seu serviço na nuvem é muito fácil com Jina AI Cloud. Mais opções de implantação estarão disponíveis em breve!
Capacidade sem servidor: vectordb
pode ser implantado em modo sem servidor na nuvem, garantindo a utilização ideal de recursos e disponibilidade de dados de acordo com suas necessidades.
Vários algoritmos ANN: vectordb
oferece diversas implementações de algoritmos de vizinhos mais próximos aproximados (ANN). Aqui estão as ofertas atuais, com mais integrações no horizonte:
InMemoryExactNNVectorDB (Exact NN Search): Implementa algoritmo simples de vizinho mais próximo.
HNSWVectorDB (baseado em HNSW): utiliza HNSWLib
O futuro do banco de dados vetorial parece brilhante e temos planos ambiciosos! Aqui está uma prévia dos recursos que estamos desenvolvendo atualmente:
Mais algoritmos de pesquisa de RNA: Nosso objetivo é oferecer suporte a uma gama ainda maior de algoritmos de pesquisa de RNA.
Capacidades aprimoradas de filtragem: Estamos trabalhando para aprimorar nossas soluções de pesquisa de RNA para oferecer suporte à filtragem avançada.
Personalização: Nosso objetivo é tornar vectordb
altamente personalizável, permitindo que os desenvolvedores Python adaptem seu comportamento às suas necessidades específicas com facilidade.
Expansão da capacidade sem servidor: Estamos nos esforçando para aprimorar a capacidade sem servidor do vectordb
na nuvem. Embora atualmente suportemos o escalonamento entre 0 e 1 réplica, nosso objetivo é estender isso para 0 a N réplicas.
Opções de implantação expandidas: Estamos trabalhando ativamente para facilitar a implantação do vectordb
em diversas plataformas de nuvem, com uma ampla gama de opções.
Precisa de ajuda com vectordb
? Interessado em usá-lo, mas precisa de determinados recursos para atender às suas necessidades exclusivas? Não hesite em entrar em contato conosco. Junte-se à nossa comunidade Discord para conversar conosco e com outros membros da comunidade.
O projeto VectorDB é apoiado pela Jina AI e licenciado sob Apache-2.0. As contribuições da comunidade são muito apreciadas! Se você tiver uma ideia para um novo recurso ou melhoria, adoraríamos ouvir sua opinião. Estamos sempre procurando maneiras de tornar vectordb
mais fácil de usar e eficaz.