Google Gemini
Utilice un modelo de incrustación de Google Gemini con Milvus eligiendo un modelo y configurando Milvus con su clave API Gemini.
Elija un modelo de incrustación
Milvus es compatible con los modelos de incrustación proporcionados por Google Gemini. A continuación se muestran los modelos de incrustación de Gemini disponibles actualmente para una referencia rápida:
Nombre del modelo |
Dimensiones |
Fichas máximas |
Descripción |
|---|---|---|---|
gemini-incrustación-001 |
Predeterminado: 3.072 (recomendado: 768, 1.536 o 3.072) |
8,192 |
Modelo de incrustación de texto con dimensiones flexibles, entrenado mediante Matryoshka Representation Learning (MRL). |
gemini-incrustación-2 |
Por defecto: 3.072 (recomendado: 768, 1.536 o 3.072) |
8,192 |
El primer modelo de incrustación multimodal nativo de Google, que admite texto, imágenes, vídeo, audio y documentos en un espacio de incrustación unificado. |
Ambos modelos se entrenan mediante la técnica Matryoshka Representation Learning (MRL), que permite dimensiones de salida flexibles a través del parámetro dim. Se recomienda empezar con 768 dimensiones y ampliarlas a 1.536 o 3.072 si es necesario. Para más información, consulte Modelos de incrustación Gemini.
Los modelos de incrustación Gemini también admiten un parámetro de tipo de tarea que optimiza las incrustaciones para casos de uso específicos. Milvus establece automáticamente el tipo de tarea en función de la operación:
Insertar / Subinsertar:
RETRIEVAL_DOCUMENTBuscar:
RETRIEVAL_QUERY
Puede anular esto especificando explícitamente un parámetro task (por ejemplo, SEMANTIC_SIMILARITY, CLASSIFICATION, CLUSTERING).
Configurar credenciales
Milvus debe conocer su clave API Gemini antes de poder solicitar incrustaciones. Milvus proporciona dos métodos para configurar las credenciales:
Archivo de configuración (recomendado): Almacene la clave API en
milvus.yamlpara que cada reinicio y nodo la recoja automáticamente.Variables de entorno: Inyectar la clave en el momento del despliegue, ideal para Docker Compose.
Elija uno de los dos métodos siguientes: el archivo de configuración es más fácil de mantener en máquinas virtuales y máquinas sin infraestructura, mientras que la ruta de las variables de entorno se adapta a los flujos de trabajo de los contenedores.
Si una clave API para el mismo proveedor está presente tanto en el archivo de configuración como en una variable de entorno, Milvus siempre utiliza el valor en milvus.yaml e ignora la variable de entorno.
Opción 1: Archivo de configuración (recomendado y de mayor prioridad)
Mantenga sus claves API en milvus.yaml; Milvus las lee al inicio y anula cualquier variable de entorno para el mismo proveedor.
Declare sus claves bajo credencial:
Puedes listar una o muchas claves API - dale a cada una una etiqueta que inventes y a la que harás referencia más tarde.
# milvus.yaml credential: apikey_dev: # dev environment apikey: <YOUR_DEV_KEY> apikey_prod: # production environment apikey: <YOUR_PROD_KEY>Poner las claves API aquí las hace persistentes a través de reinicios y le permite cambiar las claves simplemente cambiando una etiqueta.
Indique a Milvus qué clave debe utilizar para las llamadas a Gemini
En el mismo archivo, indique al proveedor Gemini la etiqueta que desea que utilice.
function: textEmbedding: providers: gemini: credential: apikey_dev # ← choose any label you defined aboveEsto vincula una clave específica a cada solicitud que Milvus envía al punto final de incrustaciones Gemini.
Opción 2: Variable de entorno
Utilice este método cuando ejecute Milvus con Docker Compose y prefiera mantener los secretos fuera de los archivos e imágenes.
Milvus recurre a la variable de entorno sólo si no se encuentra ninguna clave para el proveedor en milvus.yaml.
Variable |
Requerida |
Descripción |
|---|---|---|
MILVUS_GEMINI_API_KEY |
Sí |
Hace que la clave Gemini esté disponible dentro de cada contenedor Milvus (se ignora cuando existe una clave para Gemini en milvus.yaml) |
En su archivo docker-compose.yaml, establezca la variable de entorno MILVUS_GEMINI_API_KEY.
# docker-compose.yaml (standalone service section)
standalone:
# ... other configurations ...
environment:
# ... other environment variables ...
# Set the environment variable pointing to the Gemini API key inside the container
MILVUS_GEMINI_API_KEY: <YOUR_GEMINI_API_KEY>
El bloque environment: inyecta la clave sólo en el contenedor Milvus, dejando su sistema operativo anfitrión intacto. Para más detalles, consulte Configurar Milvus con Docker Compose.
Paso 1: Crear una colección con una función de incrustación de texto
Definir campos de esquema
Para utilizar una función de incrustación, cree una colección con un esquema específico. Este esquema debe incluir al menos tres campos necesarios:
El campo primario que identifica de forma única a cada entidad de una colección.
Un campo
VARCHARque almacena los datos brutos que se van a incrustar.Un campo vectorial reservado para almacenar las incrustaciones vectoriales densas que la función de incrustación de texto generará para el campo
VARCHAR.
El siguiente ejemplo define un esquema con un campo escalar "document" para almacenar los datos textuales y un campo vectorial "dense" para almacenar las incrustaciones que generará el módulo Función. Recuerde ajustar la dimensión del vector (dim) para que coincida con la salida del modelo de incrustación elegido.
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, Gemini's gemini-embedding-001 model outputs 3072-dimensional vectors by default,
# but can be shortened to 768 or 1536 dimensions.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=768)
Definir la función de incrustación de texto
La función de incrustación de texto convierte automáticamente los datos brutos almacenados en un campo VARCHAR en incrustaciones y los almacena en el campo vectorial definido explícitamente.
El ejemplo siguiente añade un módulo de función (gemini_embedding) que convierte el campo escalar "document" en incrustaciones, almacenando los vectores resultantes en el campo vectorial "dense" definido anteriormente.
# Define embedding function (example: Gemini provider)
text_embedding_function = Function(
name="gemini_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": "gemini", # Embedding model provider
"model_name": "gemini-embedding-001", # Embedding model
# Optional parameters:
# "credential": "apikey_dev", # Optional: Credential label specified in milvus.yaml
# "dim": "768", # Optional: Output vector dimension (default 3072)
# "task": "RETRIEVAL_DOCUMENT", # Optional: Task type for embedding optimization
}
)
# Add the embedding function to your schema
schema.add_function(text_embedding_function)
Tipos de tarea admitidos para el parámetro task:
RETRIEVAL_DOCUMENT- Optimiza las incrustaciones para la indexación de documentos (por defecto para insertar/insertar).RETRIEVAL_QUERY- Optimiza las incrustaciones para la recuperación de consultas (por defecto para la búsqueda).SEMANTIC_SIMILARITY- Optimiza las incrustaciones para medir la similitud de textos.CLASSIFICATION- Optimiza las incrustaciones para la clasificación de textos.CLUSTERING- Optimiza las incrustaciones para la agrupación.
Cuando no se establece explícitamente, Milvus utiliza automáticamente RETRIEVAL_DOCUMENT durante la inserción/inserción y RETRIEVAL_QUERY durante la búsqueda.
Configurar el índice
Después de definir el esquema con los campos necesarios y la función incorporada, configure el índice para su colección. Para simplificar este proceso, utilice AUTOINDEX como index_type, una opción que permite a Milvus elegir y configurar el tipo de índice más adecuado en función de la estructura de sus datos.
# 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"
)
Crear la colección
Ahora cree la colección utilizando el esquema y los parámetros de índice definidos.
# Create collection named "demo"
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)
Paso 2: Insertar datos
Una vez configurada la colección y el índice, está listo para insertar los datos sin procesar. En este proceso, sólo necesita proporcionar el texto sin procesar. El módulo Function que definimos anteriormente genera automáticamente el vector disperso correspondiente para cada entrada de texto.
# 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.'},
])
Paso 3: Búsqueda con texto
Después de insertar los datos, realice una búsqueda semántica utilizando el texto en bruto de la consulta. Milvus convierte automáticamente su consulta en un vector de incrustación, recupera los documentos relevantes basándose en la similitud y devuelve los resultados más coincidentes.
# 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)
Para obtener más información sobre las operaciones de búsqueda y consulta, consulte Búsqueda vectorial básica y consulta.