Milvus
Zilliz
  • Home
  • Blog
  • Apresentando a função de incorporação: Como o Milvus 2.6 agiliza a vectorização e a pesquisa semântica

Apresentando a função de incorporação: Como o Milvus 2.6 agiliza a vectorização e a pesquisa semântica

  • Engineering
December 03, 2025
Xuqi Yang

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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 como FunctionType.TEXTEMBEDDING para as incorporações de texto. O Milvus também suporta outros tipos de funções, como FunctionType.BM25 e FunctionType.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 para provider e model_name têm de corresponder às entradas correspondentes no seu ficheiro de configuração milvus.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.'},
])

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

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Continue Lendo