Introdução a uma conexão com o Milvus

Nov 25, 20233 min read

Milvus é um banco de dados vetorial de código aberto para criar aplicações de IA com embeddings de dados não estruturados. Ele vem com tudo de que você precisa para começar já integrado e é executado na sua máquina local ou hospedado no Zilliz Cloud (veja o notebook connect to Zilliz Free Tier).

O Milvus tem quatro SDKs: Java, Python, React, e Ruby. Abaixo, mostraremos os passos para Python.

  1. Instale e inicie um servidor Milvus

pip install milvus pymilvus #pymilvus is the python sdk

from milvus import default_server
default_server.start()

Nota: Se você estiver se conectando ao Zilliz, pode pular a instalação do Milvus e iniciar o cluster a partir do console.

  1. Obtenha o cliente Milvus (conexão)

from pymilvus import connections

connections.connect(
   host=’127.0.0.1’,
   port=default_server.listen_port)

Nota: Para se conectar ao Milvus serverless em execução no Zilliz Cloud em vez de localhost, você precisa obter o uri do endpoint e o token no console.

from pymilvus import connections

ENDPOINT=”https://endpoint.api.region.zillizcloud.com:443”
connections.connect(
   uri=ENDPOINT,
   token=TOKEN)
  1. Crie uma collection

Você pode pensar em uma collection como uma tabela de banco de dados. É onde você armazenará seus embeddings, documentos e quaisquer metadados adicionais.

Associados a uma collection estão um schema e um índice.

O índice é criado usando um algoritmo de busca vetorial e uma métrica de similaridade vetorial. Você pode usar os padrões do Milvus. No entanto, para desempenho ideal, você deve configurar os parâmetros. A escolha do índice de busca e dos parâmetros depende dos seus dados. Veja este guia de melhores práticas para escolher um índice de busca. Este notebook mostra como modificar os parâmetros.

from pymilvus import (
   FieldSchema, DataType, 
   CollectionSchema, Collection)

## 1. Define a minimum expandable schema.
fields = [
   FieldSchema(“pk”, DataType.INT64, is_primary=True, auto_id=True),
   FieldSchema(“vector”, DataType.FLOAT_VECTOR, dim=768),
]
schema = CollectionSchema(
   fields,
   enable_dynamic_field=True,
)

## 2. Create a collection.
mc = Collection(“my_collection_name”, schema)

## 3. Index the collection.
mc.create_index(
   field_name=”vector”,
   index_params={
       “Index_type”: “AUTOINDEX”,
       “Metric_type”: “COSINE”,
       }
  1. Insira dados no Milvus

Se você já gerou embeddings a partir dos seus dados não estruturados, pode carregá-los.

Os dados de entrada podem estar na forma de um dataframe pandas ou de uma lista de dicionários. Eles devem conter um embedding vetorial. Os campos restantes são opcionais: trecho de texto original e campos de metadados.

from pymilvus import connections

## 1. Input data can be pandas dataframe or list of dicts.
data_rows = []
data_rows.extend([
   {“vector”: np.random.randn(768).tolist(),
    “text”: “This is a document”,
    “source”: “source_url_1”},
   {“vector”: np.random.randn(768).tolist(),
    “text”: “This is another document”,
    “source”: “source_url_2”},
])

## 2. Insert data into milvus.
mc.insert(data_rows)
mc.flush()
  1. Consulte a collection

As perguntas precisam ser transformadas em embeddings usando o mesmo modelo usado para gerar embeddings dos dados não estruturados carregados no banco de dados. Você pode consultar a collection usando os embeddings das perguntas com os parâmetros de busca padrão do Milvus. As mesmas melhores práticas se aplicam à escolha do índice de busca correto para desempenho ideal.

Abaixo, o Milvus retornará os top_k = 3 resultados mais semelhantes. Além disso, observe que o fragmento de texto original e os metadados são retornados, o que pode ajudar com a fundamentação (basear o texto gerado em informações factuais para reduzir alucinações).

## 1. Search for answers to your embedded questions.
mc.load()
results = mc.search(
   data=encoder([“my_question_1”]),
   anns_field=”vector”,
   output_fields-[“text”, “source”], #optional return fields
   limit=3,
   param={}, #no params if using milvus defaults
)

## 2. View the answers.
for n, hits in enumerate(results):
   print(f”{n}th result:”)
   for hit in hits:
      print(hit)

No meu próximo blog, abordarei como criar um chatbot usando LangChain e Milvus. Fique ligado.

Mais recursos para começar a usar o Milvus e a Zilliz

Atualizado em Jul 09, 2026