Consultar índices de acceso a servicios privados (emparejamiento entre redes de VPC) o de Private Service Connect

Una vez que hayas desplegado un endpoint de índice de emparejamiento entre redes de VPC o de Private Service Connect, la forma de consultarlo variará ligeramente en función de cómo se haya desplegado:

Implementado con la automatización de Private Service Connect

En el caso de los IndexEndpoints desplegados con la automatización de Private Service Connect, el SDK de Python asignará automáticamente la red de Private Service Connect al endpoint adecuado. Si no usas el SDK de Python, debes conectarte directamente a la dirección IP creada para tu endpoint siguiendo las instrucciones para consultar una implementación manual de Private Service Connect.

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_match_psc_automation(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    queries: List[List[float]],
    num_neighbors: int,
    psc_network: str,
) -> List[List[aiplatform.matching_engine.matching_engine_index_endpoint.MatchNeighbor]]:
    """Query the vector search index deployed with PSC automation.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
        against. The endpoint must be a private endpoint.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
        the queries against.
        queries (List[List[float]]): Required. A list of queries. Each query is
        a list of floats, representing a single embedding.
        num_neighbors (int): Required. The number of neighbors to return.
        ip_address (str): Required. The IP address of the PSC endpoint. Obtained
        from the created compute address used in the fordwarding rule to the
        endpoint's service attachment.
        psc_network (str): The network the endpoint was deployed to via PSC
        automation configuration. The format is
        projects/{project_id}/global/networks/{network_name}.

    Returns:
        List[List[aiplatform.matching_engine.matching_engine_index_endpoint.MatchNeighbor]] - A list of nearest neighbors for each query.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index endpoint instance from an existing endpoint.
    my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Query the index endpoint for matches.
    resp = my_index_endpoint.match(
        deployed_index_id=deployed_index_id,
        queries=queries,
        num_neighbors=num_neighbors,
        psc_network=psc_network
    )
    return resp

Implementado con la configuración manual de Private Service Connect

En el caso de Private Service Connect IndexEndpoints desplegado con una conexión configurada manualmente, se accede a tu punto final mediante la dirección IP de la dirección de cálculo reenviada a la vinculación de servicio de Private Service Connect de tu punto final.

Si aún no lo sabes, puedes obtener la dirección IP reenviada al URI del archivo adjunto del servicio con los comandos gcloud ai index-endpoints describe y gcloud compute forwarding-rules list.

Haz las siguientes sustituciones:

  • INDEX_ENDPOINT_ID: ID de endpoint de índice completo.
  • REGION: la región en la que se ha implementado el endpoint de índice.
SERVICE_ATTACHMENT_URI=`gcloud ai index-endpoints describe INDEX_ENDPOINT_ID \
  --region=REGION \
  --format="value(deployedIndexes.privateEndpoints.serviceAttachment)"`

gcloud compute forwarding-rules list --filter="TARGET:${SERVICE_ATTACHMENT_URI}"

El resultado incluirá la dirección IP interna que se debe usar al consultar la IndexEndpoint.

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_match_psc_manual(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    queries: List[List[float]],
    num_neighbors: int,
    ip_address: str,
) -> List[List[aiplatform.matching_engine.matching_engine_index_endpoint.MatchNeighbor]]:
    """Query the vector search index deployed with PSC manual configuration.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
        against. The endpoint must be a private endpoint.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
        the queries against.
        queries (List[List[float]]): Required. A list of queries. Each query is
        a list of floats, representing a single embedding.
        num_neighbors (int): Required. The number of neighbors to return.
        ip_address (str): Required. The IP address of the PSC endpoint. Obtained
        from the created compute address used in the forwarding rule to the
        endpoint's service attachment.

    Returns:
        List[List[aiplatform.matching_engine.matching_engine_index_endpoint.MatchNeighbor]] - A list of nearest neighbors for each query.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index endpoint instance from an existing endpoint.
    my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Set the IP address of the PSC endpoint.
    my_index_endpoint.private_service_connect_ip_address = ip_address

    # Query the index endpoint for matches.
    resp = my_index_endpoint.match(
        deployed_index_id=deployed_index_id,
        queries=queries,
        num_neighbors=num_neighbors
    )
    return resp

Línea de comandos

Para consultar un DeployedIndex, conéctate a su TARGET_IP en el puerto 10000 y llama al método Match o BatchMatch. Además, puedes hacer consultas usando un ID de embedding específico.

En los ejemplos siguientes se usa la herramienta de código abierto grpc_cli para enviar solicitudes gRPC al servidor de índice implementado.

En el primer ejemplo, se envía una sola consulta mediante el método Match.

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match 'deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]'
  

En el segundo ejemplo, se combinan dos consultas independientes en la misma solicitud BatchMatch.

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.BatchMatch 'requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}, {deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.2,..]}]}]'
  

Debes hacer llamadas a estas APIs desde un cliente que se ejecute en la misma VPC con la que se emparejó el servicio.

Para ejecutar una consulta con un embedding_id, usa el siguiente ejemplo.

./grpc_cli call ${TARGET_IP}:10000  google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"test_index1"',embedding_id: '"606431"'"

En este ejemplo, se envía una consulta con restricciones de token y numéricas.

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match 'deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [1, 1], "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}, numeric_restricts: [{name: "double-ns", value_double: 0.3, op: LESS_EQUAL}, {name: "double-ns", value_double: -1.2, op: GREATER}, {name: "double-ns", value_double: 0., op: NOT_EQUAL}], restricts: [{name: "color", allow_tokens: ["red"]}]'

Para obtener más información, consulta el artículo Información sobre las bibliotecas de cliente.

Consola

Sigue estas instrucciones para consultar un índice de VPC desde la consola.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Selecciona el índice de VPC que quieras consultar. Se abrirá la página Información del índice.
  3. Desplázate hacia abajo hasta la sección Índices implementados y selecciona el índice implementado que quieras consultar. Se abrirá la página Información del índice implementado.
  4. En la sección Índice de consultas, selecciona los parámetros de consulta. Puede hacer consultas por vector o por un punto de datos específico.
  5. Ejecuta la consulta con la herramienta de código abierto grpc_cli o con el SDK de Vertex AI para Python.

Implementado con el emparejamiento entre redes de VPC

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

Nota: El SDK de Python busca automáticamente la dirección IP de un IndexEndpoint implementado con el emparejamiento de redes de VPC.

def vector_search_match_hybrid_queries(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    num_neighbors: int,
) -> List[List[aiplatform.matching_engine.matching_engine_index_endpoint.MatchNeighbor]]:
    """Query the vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
        against. The endpoint must be a private endpoint.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
        the queries against.
        num_neighbors (int): Required. The number of neighbors to return.

    Returns:
        List[List[aiplatform.matching_engine.matching_engine_index_endpoint.MatchNeighbor]] - A list of nearest neighbors for each query.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index endpoint instance from an existing endpoint.
    my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Example queries containing hybrid datapoints, sparse-only datapoints, and
    # dense-only datapoints.
    hybrid_queries = [
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            dense_embedding=[1, 2, 3],
            sparse_embedding_dimensions=[10, 20, 30],
            sparse_embedding_values=[1.0, 1.0, 1.0],
            rrf_ranking_alpha=0.5,
        ),
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            dense_embedding=[1, 2, 3],
            sparse_embedding_dimensions=[10, 20, 30],
            sparse_embedding_values=[0.1, 0.2, 0.3],
        ),
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            sparse_embedding_dimensions=[10, 20, 30],
            sparse_embedding_values=[0.1, 0.2, 0.3],
        ),
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            dense_embedding=[1, 2, 3]
        ),
    ]

    # Query the index endpoint for matches.
    resp = my_index_endpoint.match(
        deployed_index_id=deployed_index_id,
        queries=hybrid_queries,
        num_neighbors=num_neighbors,
    )
    return resp

Línea de comandos

Cada DeployedIndex tiene un TARGET_IP, que puedes consultar en tu lista de IndexEndpoints.

Para consultar un DeployedIndex, conéctate a su TARGET_IP en el puerto 10000 y llama al método Match o BatchMatch. Además, puedes hacer consultas usando un ID de embedding específico.

En los ejemplos siguientes se usa la herramienta de código abierto grpc_cli para enviar solicitudes gRPC al servidor de índice implementado.

En el primer ejemplo, se envía una sola consulta mediante el método Match.

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match 'deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]'
  

En el segundo ejemplo, se combinan dos consultas independientes en la misma solicitud BatchMatch.

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.BatchMatch 'requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}, {deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.2,..]}]}]'
  

Debes hacer llamadas a estas APIs desde un cliente que se ejecute en la misma VPC con la que se emparejó el servicio.

Para ejecutar una consulta con un embedding_id, usa el siguiente ejemplo.

./grpc_cli call ${TARGET_IP}:10000  google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"test_index1"',embedding_id: '"606431"'"

En este ejemplo, se envía una consulta con restricciones de token y numéricas.

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match 'deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [1, 1], "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}, numeric_restricts: [{name: "double-ns", value_double: 0.3, op: LESS_EQUAL}, {name: "double-ns", value_double: -1.2, op: GREATER}, {name: "double-ns", value_double: 0., op: NOT_EQUAL}], restricts: [{name: "color", allow_tokens: ["red"]}]'

Para obtener más información, consulta el artículo Información sobre las bibliotecas de cliente.

Consola

Sigue estas instrucciones para consultar un índice de VPC desde la consola.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Selecciona el índice de VPC que quieras consultar. Se abrirá la página Información del índice.
  3. Desplázate hacia abajo hasta la sección Índices implementados y selecciona el índice implementado que quieras consultar. Se abrirá la página Información del índice implementado.
  4. En la sección Índice de consultas, selecciona los parámetros de consulta. Puede hacer consultas por vector o por un punto de datos específico.
  5. Ejecuta la consulta con la herramienta de código abierto grpc_cli o con el SDK de Vertex AI para Python.

Ajustes de tiempo de consulta que influyen en el rendimiento

Los siguientes parámetros de tiempo de consulta pueden afectar a la latencia, la disponibilidad y el coste al usar la búsqueda vectorial. Estas directrices se aplican a la mayoría de los casos. Sin embargo, siempre debes experimentar con tus configuraciones para asegurarte de que funcionan en tu caso práctico.

Para ver las definiciones de los parámetros, consulta Parámetros de configuración de índices.

Parámetro Información Impacto en el rendimiento
approximateNeighborsCount

Indica al algoritmo el número de resultados aproximados que se deben obtener de cada fragmento.

El valor de approximateNeighborsCount siempre debe ser mayor que el valor de setNeighborsCount. Si el valor de setNeighborsCount es pequeño, se recomienda que el valor de approximateNeighborsCount sea 10 veces mayor. Para valores de setNeighborsCount más grandes, se puede usar un multiplicador más pequeño.

El nombre de la API REST correspondiente a este campo es approximate_neighbor_count.

Si aumentas el valor de approximateNeighborsCount, el rendimiento puede verse afectado de las siguientes formas:

  • Recuperación: aumentada
  • Latencia: puede aumentar
  • Disponibilidad: sin impacto
  • Coste: puede aumentar porque se procesan más datos durante una búsqueda.

Si reduces el valor de approximateNeighborsCount, el rendimiento puede verse afectado de las siguientes formas:

  • Recuperación: disminuida
  • Latencia: puede disminuir
  • Disponibilidad: sin impacto
  • Coste: puede reducir el coste porque se procesan menos datos durante una búsqueda.
setNeighborCount

Especifica el número de resultados que quieres que devuelva la consulta.

El nombre de la API REST correspondiente a este campo es neighbor_count.

Los valores inferiores o iguales a 300 siguen siendo eficaces en la mayoría de los casos prácticos. Si los valores son más altos, haz pruebas para tu caso práctico específico.

fractionLeafNodesToSearch Controla el porcentaje de nodos hoja que se visitarán al buscar los vecinos más cercanos. Esto está relacionado con el leafNodeEmbeddingCount, ya que cuantos más embeddings haya por nodo hoja, más datos se examinarán por hoja.

El nombre de la API REST correspondiente a este campo es fraction_leaf_nodes_to_search_override.

Aumentar el valor de fractionLeafNodesToSearch puede afectar al rendimiento de las siguientes formas:

  • Recuperación: aumentada
  • Latencia: aumentada
  • Disponibilidad: sin impacto
  • Coste: puede aumentar porque una latencia más alta ocupa más recursos de la máquina.

Disminuir el valor de fractionLeafNodesToSearch puede afectar al rendimiento de las siguientes formas:

  • Recuperación: disminuida
  • Latencia: se ha reducido
  • Disponibilidad: sin impacto
  • Coste: puede disminuir porque una latencia más baja ocupa menos recursos de la máquina.

Siguientes pasos