Apresentando a função de incorporação: Como o Milvus 2.6 agiliza a vectorização e a pesquisa semântica
Se alguma vez criou uma aplicação de pesquisa vetorial, já conhece demasiado bem o fluxo de trabalho. Antes de os dados poderem ser armazenados, têm de ser transformados em vectores utilizando um modelo de incorporação, limpos e formatados e, por fim, ingeridos na base de dados de vectores. Cada consulta também passa pelo mesmo processo: incorporar a entrada, executar uma pesquisa de semelhança e, em seguida, mapear os IDs resultantes para os documentos ou registos originais. Funciona - mas cria um emaranhado distribuído de scripts de pré-processamento, pipelines de incorporação e código cola que tem de manter.
Milvus, um banco de dados vetorial de código aberto de alto desempenho, agora dá um grande passo para simplificar tudo isso. O Milvus 2.6 apresenta o recurso Data-in, Data-out (também conhecido como Função de Incorporação), um recurso de incorporação integrado que se conecta diretamente aos principais provedores de modelos, como OpenAI, AWS Bedrock, Google Vertex AI e Hugging Face. Em vez de gerir a sua própria infraestrutura de incorporação, o Milvus pode agora chamar estes modelos por si. Também é possível inserir e consultar usando texto bruto - e em breve outros tipos de dados - enquanto o Milvus lida automaticamente com a vetorização no momento da gravação e da consulta.
No restante deste post, veremos mais de perto como o Data-in, Data-out funciona nos bastidores, como configurar provedores e funções de incorporação e como você pode usá-lo para simplificar seus fluxos de trabalho de pesquisa vetorial de ponta a ponta.
O que é Data-in, Data-out?
Data-in, Data-out no Milvus 2.6 é construído sobre o novo módulo Function - uma estrutura que permite ao Milvus lidar com a transformação de dados e geração de embedding internamente, sem quaisquer serviços externos de pré-processamento. (Pode seguir a proposta de design na issue #35856 do GitHub.) Com este módulo, o Milvus pode receber dados de entrada em bruto, chamar diretamente um fornecedor de embedding e escrever automaticamente os vectores resultantes na sua coleção.
Em um alto nível, o módulo Function transforma a geração de embedding em uma capacidade de banco de dados nativa. Em vez de executar pipelines de embedding separados, trabalhadores em segundo plano ou serviços de reranker, o Milvus agora envia solicitações ao seu provedor configurado, recupera embeddings e os armazena junto com seus dados - tudo dentro do caminho de ingestão. Isso elimina a sobrecarga operacional de gerenciar sua própria infraestrutura de incorporação.
Data-in, Data-out introduz três grandes melhorias no fluxo de trabalho do Milvus:
Inserir dados brutos diretamente - Pode agora inserir texto não processado, imagens ou outros tipos de dados diretamente no Milvus. Não é necessário convertê-los previamente em vectores.
Configurar uma função de incorporação - Uma vez configurado um modelo de incorporação no Milvus, este gere automaticamente todo o processo de incorporação. Milvus integra-se perfeitamente com uma série de fornecedores de modelos, incluindo OpenAI, AWS Bedrock, Google Vertex AI, Cohere e Hugging Face.
Consulta com entradas brutas - Agora é possível efetuar uma pesquisa semântica utilizando texto bruto ou outras consultas baseadas em conteúdos. O Milvus utiliza o mesmo modelo configurado para gerar incorporação em tempo real, efetuar pesquisas por semelhança e apresentar resultados relevantes.
Resumindo, o Milvus agora incorpora automaticamente - e opcionalmente reordena - os seus dados. A vectorização torna-se uma função incorporada na base de dados, eliminando a necessidade de serviços de incorporação externos ou de lógica de pré-processamento personalizada.
Como funciona o Data-in, Data-out
O diagrama abaixo ilustra como o Data-in, Data-out funciona dentro do Milvus.
O fluxo de trabalho Data-in, Data-out pode ser dividido em seis passos principais:
Dados de entrada - O utilizador insere dados em bruto - como texto, imagens ou outros tipos de conteúdo - diretamente no Milvus sem realizar qualquer pré-processamento externo.
Gerar embeddings - O módulo Function invoca automaticamente o modelo de embeddings configurado através da sua API de terceiros, convertendo a entrada bruta em embeddings vectoriais em tempo real.
Armazenar Embeddings - Milvus escreve os embeddings gerados no campo vetorial designado dentro da sua coleção, onde ficam disponíveis para operações de pesquisa de similaridade.
Submeter uma consulta - O utilizador emite uma consulta de texto em bruto ou baseada no conteúdo para o Milvus, tal como na fase de entrada.
Pesquisa semântica - Milvus incorpora a consulta usando o mesmo modelo configurado, executa uma pesquisa de similaridade sobre os vectores armazenados e determina as correspondências semânticas mais próximas.
Devolver resultados - Milvus devolve os top-k resultados mais semelhantes - mapeados de volta aos seus dados originais - diretamente à aplicação.
Como configurar o Data-in, Data-out
Pré-requisitos
Instale a versão mais recente do Milvus 2.6.
Prepare sua chave de API de incorporação de um provedor compatível (por exemplo, OpenAI, AWS Bedrock ou Cohere). Neste exemplo, usaremos o Cohere como o provedor de incorporação.
Modificar a configuração de milvus.yaml
Se você estiver executando o Milvus com o Docker Compose, precisará modificar o arquivo milvus.yaml para habilitar o módulo Function. Você pode consultar a documentação oficial para obter orientação: Configurar o Milvus com o Docker Compose (Instruções para outros métodos de implantação também podem ser encontradas aqui).
No ficheiro de configuração, localize as secções credential e function.
Em seguida, actualize os campos apikey1.apikey e providers.cohere.
...
credential:
aksk1:
access_key_id: # Your access_key_id
secret_access_key: # Your secret_access_key
apikey1:
apikey: "***********************" # Edit this section
gcp1:
credential_json: # base64 based gcp credential data
# Any configuration related to functions
function:
textEmbedding:
providers:
...
cohere: # Edit the section below
credential: apikey1 # The name in the crendential configuration item
enable: true # Whether to enable cohere model service
url: "https://api.cohere.com/v2/embed" # Your cohere embedding url, Default is the official embedding url
...
...
Depois de fazer essas alterações, reinicie o Milvus para aplicar a configuração atualizada.
Como usar o recurso de entrada e saída de dados
1. Definir o esquema para a coleção
Para ativar a funcionalidade de incorporação, o esquema da coleção deve incluir pelo menos três campos:
Campo de chave primária (
id) - Identifica de forma única cada entidade na coleção.Campo escalar (
document) - Armazena os dados brutos originais.Campo vetorial (
dense) - Armazena as incorporações vectoriais geradas.
from pymilvus import MilvusClient, DataType, Function, FunctionType
# Initialize Milvus client
client = MilvusClient(
uri="http://localhost:19530",
)
# Create a new schema for the collection
schema = client.create_schema()
# Add primary field "id"
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
# Add scalar field "document" for storing textual data
schema.add_field("document", DataType.VARCHAR, max_length=9000)
# Add vector field "dense" for storing embeddings.
# IMPORTANT: Set `dim` to match the exact output dimension of the embedding model.
# For instance, OpenAI's text-embedding-3-small model outputs 1536-dimensional vectors.
# For dense vector, data type can be FLOAT_VECTOR or INT8_VECTOR
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1536) # Set dim according to the embedding model you use.
2. Definir a função de incorporação
Em seguida, defina a função de incorporação no esquema.
name- Um identificador único para a função.function_type- Definir comoFunctionType.TEXTEMBEDDINGpara as incorporações de texto. O Milvus também suporta outros tipos de funções, comoFunctionType.BM25eFunctionType.RERANK. Para mais pormenores, consulte a Pesquisa de texto integral e a Descrição geral do Decay Ranker.input_field_names- Define o campo de entrada para dados em bruto (document).output_field_names- Define o campo de saída onde os vectores de incorporação serão armazenados (dense).params- Contém parâmetros de configuração para a função de incorporação. Os valores paraprovideremodel_nametêm de corresponder às entradas correspondentes no seu ficheiro de configuraçãomilvus.yaml.
Nota: Cada função deve ter um único name e output_field_names para distinguir diferentes lógicas de transformação e evitar conflitos.
# Define embedding function (example: OpenAI provider)
text_embedding_function = Function(
name="cohere_embedding", # Unique identifier for this embedding function
function_type=FunctionType.TEXTEMBEDDING, # Type of embedding function
input_field_names=["document"], # Scalar field to embed
output_field_names=["dense"], # Vector field to store embeddings
params={ # Provider-specific configuration (highest priority)
"provider": "cohere", # Embedding model provider
"model_name": "embed-v4.0", # Embedding model
# "credential": "apikey1", # Optional: Credential label
# Optional parameters:
# "dim": "1536", # Optionally shorten the vector dimension
# "user": "user123" # Optional: identifier for API tracking
}
)
# Add the embedding function to your schema
schema.add_function(text_embedding_function)
3. Configurar o índice
Quando os campos e as funções estiverem definidos, crie um índice para a coleção. Para simplificar, utilizamos aqui o tipo AUTOINDEX como exemplo.
# Prepare index parameters
index_params = client.prepare_index_params()
# Add AUTOINDEX to automatically select optimal indexing method
index_params.add_index(
field_name="dense",
index_type="AUTOINDEX",
metric_type="COSINE"
)
4. Criar a coleção
Utilize o esquema e o índice definidos para criar uma nova coleção. Neste exemplo, vamos criar uma coleção chamada Demo.
# Create collection named "demo"
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)
5. Inserir dados
Agora pode inserir dados brutos diretamente no Milvus - não há necessidade de gerar embeddings manualmente.
# Insert sample documents
client.insert('demo', [
{'id': 1, 'document': 'Milvus simplifies semantic search through embeddings.'},
{'id': 2, 'document': 'Vector embeddings convert text into searchable numeric data.'},
{'id': 3, 'document': 'Semantic search helps users find relevant information quickly.'},
])
6. Fazer pesquisa de vectores
Depois de inserir os dados, pode fazer pesquisas diretamente usando consultas de texto em bruto. O Milvus converte automaticamente a sua consulta num embedding, efectua uma pesquisa de similaridade com os vectores armazenados, e devolve as melhores correspondências.
# Perform semantic search
results = client.search(
collection_name='demo',
data=['How does Milvus handle semantic search?'], # Use text query rather than query vector
anns_field='dense', # Use the vector field that stores embeddings
limit=1,
output_fields=['document'],
)
print(results)
# Example output:
# data: ["[{'id': 1, 'distance': 0.8821347951889038, 'entity': {'document': 'Milvus simplifies semantic search through embeddings.'}}]"]
Para obter mais detalhes sobre a pesquisa de vetores, consulte: Pesquisa Vetorial Básica e API de Consulta.
Começar a usar o Milvus 2.6
Com Data-in, Data-out, Milvus 2.6 leva a simplicidade da pesquisa vetorial para o próximo nível. Ao integrar as funções de embedding e reranking diretamente no Milvus, deixa de ser necessário gerir o pré-processamento externo ou manter serviços de embedding separados.
Pronto para experimentar? Instale o Milvus 2.6 hoje e experimente o poder do Data-in, Data-out por si mesmo.
Tem dúvidas ou quer aprofundar alguma funcionalidade? Junte-se ao nosso canal Discord ou registe problemas no GitHub. Também pode reservar uma sessão individual de 20 minutos para obter informações, orientação e respostas às suas perguntas através do Milvus Office Hours.
Saiba mais sobre os recursos do Milvus 2.6
Apresentando o Milvus 2.6: Pesquisa Vetorial Acessível em Escala de Bilhões
JSON Shredding em Milvus: Filtragem JSON 88,9x mais rápida com flexibilidade
MinHash LSH em Milvus: A arma secreta para combater duplicatas em dados de treinamento LLM
Leve a compressão vetorial ao extremo: como o Milvus atende a 3× mais consultas com o RaBitQ
Os benchmarks mentem - os bancos de dados vetoriais merecem um teste real
Pesquisa vetorial no mundo real: como filtrar com eficiência sem prejudicar a recuperação
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



