Presentación de la función de incrustación: Cómo Milvus 2.6 agiliza la vectorización y la búsqueda semántica
Si alguna vez has creado una aplicación de búsqueda vectorial, ya conoces el flujo de trabajo demasiado bien. Antes de almacenar los datos, hay que transformarlos en vectores mediante un modelo de incrustación, limpiarlos, formatearlos y, por último, introducirlos en la base de datos vectorial. Cada consulta pasa también por el mismo proceso: incrustar la entrada, ejecutar una búsqueda de similitud y, a continuación, asignar los ID resultantes a los documentos o registros originales. Funciona, pero crea una maraña distribuida de secuencias de comandos de preprocesamiento, conductos de incrustación y código de cola que hay que mantener.
Milvus, una base de datos vectorial de código abierto de alto rendimiento, da ahora un gran paso hacia la simplificación de todo esto. Milvus 2.6 introduce la función Data-in, Data-out (también conocida como función de incrustación), una capacidad de incrustación integrada que se conecta directamente a los principales proveedores de modelos como OpenAI, AWS Bedrock, Google Vertex AI y Hugging Face. En lugar de gestionar su propia infraestructura de incrustación, Milvus puede ahora llamar a estos modelos por usted. También puede insertar y consultar utilizando texto sin formato - y pronto otros tipos de datos - mientras Milvus maneja automáticamente la vectorización en el momento de la escritura y la consulta.
En el resto de este artículo, veremos más de cerca cómo funciona Data-in, Data-out, cómo configurar los proveedores y las funciones de incrustación, y cómo puede utilizarlo para agilizar sus flujos de trabajo de búsqueda vectorial de principio a fin.
¿Qué es Data-in, Data-out?
Data-in, Data-out en Milvus 2.6 está construido sobre el nuevo módulo Function - un marco que permite a Milvus manejar la transformación de datos y la generación de incrustaciones internamente, sin ningún servicio externo de preprocesamiento. (Puede seguir la propuesta de diseño en GitHub issue #35856.) Con este módulo, Milvus puede tomar datos de entrada sin procesar, llamar directamente a un proveedor de incrustación y escribir automáticamente los vectores resultantes en su colección.
A un alto nivel, el módulo Function convierte la generación de incrustación en una capacidad de base de datos nativa. En lugar de ejecutar tuberías de incrustación separadas, trabajadores en segundo plano o servicios reranker, Milvus ahora envía solicitudes a su proveedor configurado, recupera incrustaciones y las almacena junto con sus datos, todo dentro de la ruta de ingestión. Esto elimina la sobrecarga operativa de gestionar su propia infraestructura de incrustación.
Data-in, Data-out introduce tres mejoras importantes en el flujo de trabajo de Milvus:
Inserción directa de datos sin procesar: ahora puede insertar texto, imágenes u otros tipos de datos sin procesar directamente en Milvus. No es necesario convertirlos previamente en vectores.
Configure una función de incrustación - Una vez configurado un modelo de incrustación en Milvus, éste gestiona automáticamente todo el proceso de incrustación. Milvus se integra perfectamente con una gama de proveedores de modelos, incluyendo OpenAI, AWS Bedrock, Google Vertex AI, Cohere y Hugging Face.
Consulta con entradas sin procesar - Ahora puede realizar búsquedas semánticas utilizando texto sin procesar u otras consultas basadas en contenido. Milvus utiliza el mismo modelo configurado para generar incrustaciones sobre la marcha, realizar búsquedas por similitud y devolver resultados relevantes.
En resumen, Milvus ahora incrusta automáticamente - y opcionalmente reordena - sus datos. La vectorización se convierte en una función integrada en la base de datos, eliminando la necesidad de servicios de incrustación externos o de lógica de preprocesamiento personalizada.
Cómo funciona Data-in, Data-out
El siguiente diagrama ilustra cómo funciona Data-in, Data-out dentro de Milvus.
El flujo de trabajo Data-in, Data-out puede dividirse en seis pasos principales:
Entrada de datos - El usuario inserta datos sin procesar - como texto, imágenes u otros tipos de contenido - directamente en Milvus sin realizar ningún preprocesamiento externo.
Generar inc rustaciones - El módulo Function invoca automáticamente el modelo de incrustación configurado a través de su API de terceros, convirtiendo la entrada bruta en incrustaciones vectoriales en tiempo real.
Almacenar inc rustaciones - Milvus escribe las incrustaciones generadas en el campo vectorial designado dentro de su colección, donde están disponibles para operaciones de búsqueda de similitud.
Enviar una consulta - El usuario envía a Milvus una consulta de texto sin procesar o basada en el contenido, igual que en la etapa de entrada.
Búsqueda semántica - Milvus incorpora la consulta utilizando el mismo modelo configurado, ejecuta una búsqueda de similitud sobre los vectores almacenados y determina las coincidencias semánticas más cercanas.
Devolución de resultados - Milvus devuelve directamente a la aplicación los k resultados más similares, asignados a sus datos originales.
Cómo configurar Data-in, Data-out
Requisitos previos
Instale la última versión de Milvus 2.6.
Prepare su clave API de incrustación de un proveedor compatible (por ejemplo, OpenAI, AWS Bedrock o Cohere). En este ejemplo, utilizaremos Cohere como proveedor de incrustación.
Modifique la configuración de milvus.yaml
Si está ejecutando Milvus con Docker Compose, necesitará modificar el archivo milvus.yaml para habilitar el módulo Function. Puede consultar la documentación oficial como guía: Configure Milvus with Docker Comp ose (También puede encontrar instrucciones para otros métodos de despliegue aquí).
En el archivo de configuración, localice las secciones credential y function.
A continuación, actualice los campos apikey1.apikey y 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
...
...
Una vez realizados estos cambios, reinicie Milvus para aplicar la configuración actualizada.
Cómo utilizar la función de entrada y salida de datos
1. 1. Definir el esquema de la colección
Para habilitar la función de incrustación, el esquema de su colección debe incluir al menos tres campos:
Campo de clave primaria (
id) - Identifica de forma única cada entidad de la colección.Campo escalar (
document) - Almacena los datos originales sin procesar.Campo vectorial (
dense) - Almacena las incrustaciones vectoriales generadas.
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 la función de incrustación
A continuación, defina la función de inc rustación en el esquema.
name- Un identificador único para la función.function_type- Establézcalo enFunctionType.TEXTEMBEDDINGpara incrustaciones de texto. Milvus también admite otros tipos de función comoFunctionType.BM25yFunctionType.RERANK. Consulte Búsqueda de texto completo y descripción general del clasificador de descomposición para obtener más detalles.input_field_names- Define el campo de entrada para datos sin procesar (document).output_field_names- Define el campo de salida donde se almacenarán las incrustaciones vectoriales (dense).params- Contiene parámetros de configuración para la función de incrustación. Los valores deproviderymodel_namedeben coincidir con las entradas correspondientes del archivo de configuraciónmilvus.yaml.
Nota: Cada función debe tener un único name y output_field_names para distinguir diferentes lógicas de transformación y evitar conflictos.
# 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 el índice
Una vez definidos los campos y las funciones, cree un índice para la colección. Para simplificar, utilizamos aquí como ejemplo el tipo AUTOINDEX.
# 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. Crear la colección
Utilice el esquema y el índice definidos para crear una nueva colección. En este ejemplo, crearemos una colección llamada Demo.
# Create collection named "demo"
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)
5. Insertar datos
Ahora puede insertar datos sin procesar directamente en Milvus - no hay necesidad de generar incrustaciones 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. 6. Realizar búsqueda vectorial
Después de insertar los datos, puede realizar búsquedas directamente utilizando consultas de texto sin procesar. Milvus convierte automáticamente su consulta en una incrustación, realiza una búsqueda de similitud contra vectores almacenados y devuelve las coincidencias más altas.
# 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 más detalles sobre la búsqueda vectorial, véase: Búsqueda vectorial básica y API de consulta.
Empezar con Milvus 2.6
Con Data-in, Data-out, Milvus 2.6 lleva la simplicidad de la búsqueda vectorial al siguiente nivel. Al integrar las funciones de incrustación y reordenación directamente en Milvus, ya no necesitará gestionar el preprocesamiento externo ni mantener servicios de incrustación independientes.
¿Listo para probarlo? Instale Milvus 2.6 hoy mismo y experimente por sí mismo la potencia de Data-in, Data-out.
¿Tiene alguna pregunta o desea profundizar en alguna función? Únase a nuestro canal Discord o presente incidencias en GitHub. También puede reservar una sesión individual de 20 minutos para obtener información, orientación y respuestas a sus preguntas a través de Milvus Office Hours.
Más información sobre las características de Milvus 2.6
Presentación de Milvus 2.6: Búsqueda vectorial asequible a escala de miles de millones
JSON Shredding en Milvus: Filtrado JSON 88,9 veces más rápido con flexibilidad
MinHash LSH en Milvus: El arma secreta para combatir los duplicados en los datos de formación LLM
Llevar la compresión vectorial al extremo: cómo Milvus sirve 3 veces más consultas con RaBitQ
Los puntos de referencia mienten: las bases de datos vectoriales merecen una prueba real
Búsqueda vectorial en el mundo real: cómo filtrar eficazmente sin matar la recuperación
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



