Integrar o Milvus com o MindsDB
O MindsDB é uma ferramenta poderosa para integrar aplicações de IA com diversas fontes de dados empresariais. Ele atua como um mecanismo de consulta federado que coloca ordem na dispersão de dados, respondendo meticulosamente a consultas em dados estruturados e não estruturados. Quer seus dados estejam espalhados por aplicativos SaaS, bancos de dados ou data warehouses, o MindsDB pode conectar e consultar tudo isso usando SQL padrão. Ele apresenta sistemas RAG autônomos de última geração por meio de bases de conhecimento, suporta centenas de fontes de dados e oferece opções flexíveis de implantação, desde o desenvolvimento local até ambientes de nuvem.
Este tutorial demonstra como integrar o Milvus com o MindsDB, permitindo-lhe tirar partido das capacidades de IA do MindsDB com a funcionalidade de base de dados de vectores do Milvus através de operações do tipo SQL para gerir e consultar embeddings de vectores.
Este tutorial refere-se principalmente à documentação oficial do MindsDB Milvus Handler. Se encontrar alguma parte desactualizada neste tutorial, pode dar prioridade ao seguimento da documentação oficial e criar um problema para nós.
Instalar o MindsDB
Antes de começarmos, instale o MindsDB localmente via Docker ou Docker Desktop.
Antes de prosseguir, certifique-se de ter uma sólida compreensão dos conceitos e operações fundamentais do MindsDB e do Milvus.
Introdução aos argumentos
Os argumentos necessários para estabelecer uma conexão são:
uriuri para a base de dados milvus, pode ser definido para o ficheiro local ".db" ou para o serviço docker ou cloudtokentoken para suportar o serviço docker ou cloud de acordo com a opção uri
Os argumentos opcionais para estabelecer uma ligação são:
Estes são utilizados para as consultas SELECT:
search_default_limit: limite predefinido a ser passado em instruções select (predefinição=100)search_metric_typeTipo de métrica utilizado para pesquisas (predefinição="L2")search_ignore_growing: se os segmentos crescentes devem ser ignorados durante as pesquisas de similaridade (por defeito=False)search_params: específico parasearch_metric_type(pré-definição={"nprobe": 10})
Estas são utilizadas para as consultas CREATE:
create_auto_id: se se deve gerar automaticamente o id quando se inserem registos sem ID (pré-definição=False)create_id_max_len: comprimento máximo do campo id ao criar uma tabela (predefinição=64)create_embedding_dim: dimensão de incorporação para criar uma tabela (predefinição=8)create_dynamic_field: se as tabelas criadas têm ou não campos dinâmicos (predefinição=Verdadeiro)create_content_max_len: comprimento máximo da coluna de conteúdo (pré-definição=200)create_content_default_value: valor por defeito da coluna de conteúdo (por defeito='')create_schema_description: descrição dos esquemas criados (por defeito='')create_aliasalias dos esquemas criados (por defeito='default')create_index_params: parâmetros do índice criado na coluna "embeddings" (predefinição={})create_index_metric_type: métrica utilizada para criar o índice (predefinição='L2')create_index_typeo tipo de índice (predefinição='AUTOINDEX')
Utilização
Antes de continuar, certifique-se de que a versão pymilvus é igual a esta versão fixada. Se encontrar quaisquer problemas com a compatibilidade de versões, pode reverter a sua versão do pymilvus ou personalizá-la neste ficheiro de requisitos.
Criar uma ligação
Para utilizar este manipulador e ligar-se a um servidor Milvus no MindsDB, pode ser utilizada a seguinte sintaxe:
CREATE DATABASE milvus_datasource
WITH
ENGINE = 'milvus',
PARAMETERS = {
"uri": "./milvus_local.db",
"token": "",
"create_embedding_dim": 3,
"create_auto_id": true
};
- Se apenas necessitar de uma base de dados vetorial local para dados de pequena escala ou prototipagem, definir o uri como um ficheiro local, por exemplo,
./milvus.db, é o método mais conveniente, uma vez que utiliza automaticamente o Milvus Lite para armazenar todos os dados neste ficheiro.- Para dados de maior escala e tráfego em produção, pode configurar um servidor Milvus em Docker ou Kubernetes. Nesta configuração, use o endereço e a porta do servidor como seu
uri, por exemplo,http://localhost:19530. Se ativar a funcionalidade de autenticação no Milvus, defina otokencomo"<your_username>:<your_password>", caso contrário não é necessário definir o token.- Também pode utilizar o Milvus totalmente gerido no Zilliz Cloud. Basta definir os endereços
urietokenpara o Public Endpoint e a chave API da sua instância Zilliz Cloud.
Abandonar a ligação
Para abandonar a ligação, utilize este comando
DROP DATABASE milvus_datasource;
Criar tabelas
Para inserir dados de uma tabela pré-existente, utilize CREATE
CREATE TABLE milvus_datasource.test
(SELECT * FROM sqlitedb.test);
Eliminar colecções
A eliminação de uma coleção não é suportada
Consultar e selecionar
Para consultar a base de dados utilizando um vetor de pesquisa, pode utilizar search_vector na cláusula WHERE
Advertências:
- Se omitir
LIMIT, a cláusulasearch_default_limité utilizada, uma vez que o Milvus assim o exige - A coluna de metadados não é suportada, mas se a coleção tiver um esquema dinâmico ativado, pode efetuar a consulta normalmente, ver o exemplo abaixo
- Os campos dinâmicos não podem ser apresentados, mas podem ser consultados
SELECT * from milvus_datasource.test
WHERE search_vector = '[3.0, 1.0, 2.0, 4.5]'
LIMIT 10;
Se omitir a cláusula search_vector, esta torna-se uma pesquisa básica e é devolvida a quantidade de entradas na coleção LIMIT ou search_default_limit
SELECT * from milvus_datasource.test
Pode utilizar a cláusula WHERE nos campos dinâmicos como se fosse uma SQL normal.
SELECT * FROM milvus_datasource.createtest
WHERE category = "science";
Eliminar registos
Pode eliminar registos utilizando DELETE tal como em SQL.
Advertências:
- O Milvus apenas suporta a eliminação de entidades com chaves primárias claramente especificadas
- Só é possível utilizar o operador
IN
DELETE FROM milvus_datasource.test
WHERE id IN (1, 2, 3);
Inserir registos
Também pode inserir linhas individuais desta forma:
INSERT INTO milvus_test.testable (id,content,metadata,embeddings)
VALUES ("id3", 'this is a test', '{"test": "test"}', '[1.0, 8.0, 9.0]');
Atualização
A atualização de registos não é suportada pela API do Milvus. Pode tentar utilizar a combinação de DELETE e INSERT
Para obter mais detalhes e exemplos, consulte a documentação oficial do MindsDB.