Usa Vector Search de Vertex AI

En este documento, se describe cómo usar la Búsqueda de vectores de Vertex AI para realizar búsquedas de similitud de vectores con el SDK de Vertex AI para ABAP. Con la Búsqueda de vectores, puedes encontrar puntos de datos semánticamente similares dentro de conjuntos de datos grandes mediante vectores de alta dimensión. Se destaca en tareas como la recuperación de imágenes y texto, y prioriza el significado sobre las concordancias exactas de palabras clave.

La Búsqueda vectorial te permite aprovechar el poder de tus datos empresariales para mejorar la eficiencia, mejorar las experiencias de los clientes y obtener una ventaja competitiva. Puede aportar un valor significativo a tu entorno de SAP y brindar beneficios como los siguientes:

  • Mejora las capacidades de búsqueda: Mejora la exactitud y la relevancia de los resultados de la búsqueda en grandes cantidades de datos de SAP, incluida la información estructurada y no estructurada dispersa en sistemas dispares. Esto genera una recuperación de información más rápida y eficaz de los datos empresariales relevantes.

  • Obtén estadísticas a partir de datos no estructurados: Utiliza la Búsqueda de vectores para extraer estadísticas valiosas de datos no estructurados que no se habían aprovechado en los sistemas de SAP, como datos de productos, datos de clientes, opiniones de clientes, tickets de asistencia o documentos internos.

  • Mejora la experiencia del cliente: Ofrece interacciones personalizadas y adaptadas al contexto con los clientes mediante la Búsqueda vectorial para recomendaciones de productos, chatbots inteligentes y otras aplicaciones orientadas a los clientes.

  • Optimiza los procesos empresariales: Usa la búsqueda vectorial para optimizar los procesos internos, encontrar rápidamente información relevante, identificar patrones y tomar decisiones basadas en datos.

  • Acelera la innovación: Combina la Búsqueda de Vectores con otras funciones de Vertex AI, como la IA generativa, para desarrollar soluciones nuevas e innovadoras que impulsen el crecimiento de tu empresa.

Cómo usar la Búsqueda de vectores de Vertex AI

La coincidencia semántica con la Búsqueda de vectores se puede simplificar en los siguientes pasos:

  1. Generar representaciones de embedding de tus datos empresariales.
  2. Subir las embeddings a un bucket de Cloud Storage.
  3. Crear un índice vectorial y asociarlo al bucket de Cloud Storage que contiene las embeddings. Puedes crear dos tipos de índices, según cómo planees actualizarlos con los datos más recientes:

    • Índice por lotes: Un índice por lotes sirve cuando quieres actualizar tu índice en un lote, con datos que se almacenaron durante un período determinado, como los datos que se procesan semanal o mensualmente.
    • Índice de transmisión: Un índice de transmisión es para cuando quieres que los datos del índice se actualicen a medida que se agregan datos nuevos a tu almacén de datos.
  4. Crea un extremo de índice y, luego, implementa el índice de vectores en el extremo para ejecutar consultas y obtener recomendaciones o resultados. Un extremo de índice funciona como una instancia de servidor que acepta solicitudes de consulta para tu índice.

  5. Consulta el extremo de índice con un ID de entidad, una cadena de búsqueda o una incorporación.

El SDK de Vertex AI para ABAP abarca todos estos aspectos de la Búsqueda de vectores de Vertex AI para que compiles aplicaciones de Búsqueda de vectores potenciadas por Vertex AI en tu entorno de ABAP.

Crea y administra un índice vectorial

En esta sección, se explica cómo crear y administrar un índice de vectores con el SDK de Vertex AI para ABAP.

Antes de comenzar

Asegúrate de que tú o tus administradores hayan completado los siguientes requisitos previos:

Prepara tus incorporaciones

Debes tener listas tus embeddings. Si deseas obtener información para generar embeddings para tus datos empresariales con el SDK de Vertex AI para ABAP, consulta Genera embeddings.

Sube tus embeddings a Cloud Storage

Sube tus embeddings a un bucket de Cloud Storage para que puedas asociarlas con un índice de vectores. Incluso si generaste tus archivos de embedding fuera de Google Cloud, puedes subirlos a un bucket de Cloud Storage.

Para obtener información sobre cómo enviar los embeddings que se generan con el SDK de Vertex AI para ABAP a un bucket de Cloud Storage, consulta Almacena embeddings en Cloud Storage.

Crea una instancia de la clase para el índice vectorial

Para crear y administrar tu índice vectorial, puedes crear una instancia de la clase /GOOG/CL_VECTOR_INDEX. Para crear una instancia de la clase, debes pasar la clave de cliente configurada para la autenticación.

DATA(lo_vector_index) = NEW /goog/cl_vector_index( iv_key_name = 'CLIENT_KEY' ).

Reemplaza CLIENT_KEY por la clave de cliente configurada para la autenticación.

Crea un índice vectorial

Para crear un índice de vectores, puedes usar el método CREATE_TREE_AH_INDEX de la clase /GOOG/CL_VECTOR_INDEX. Crea un índice basado en el algoritmo de árbol-AH.

lo_vector_index->create_tree_ah_index( iv_display_name                = 'INDEX_NAME'
                                       iv_description                 = 'INDEX_DESCRIPTION'
                                       iv_location_id                 = 'LOCATION_ID'
                                       iv_gcs_content_uri             = 'CONTENT_URI'
                                       iv_dimensions                  = 'DIMENSIONS'
                                       iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
                                       iv_index_update_method         = 'INDEX_UPDATE_METHOD'
                                       iv_distance_measure_type       = 'DISTANCE_MEASURE_TYPE'
                                       iv_shard_size                  = 'SHARD_SIZE'
                                       iv_leaf_node_embedding_count   = 'LEAF_NODE_EMBEDDING_COUNT'
                                       iv_leaf_nodes_to_search        = 'LEAF_NODE_TO_SEARCH'
                                       iv_etag                        = 'ETAG'
                                       iv_cloud_kms_encryption_key     = 'KEY_FOR_ENCRYPTION' ).

Reemplaza lo siguiente:

  • INDEX_NAME: Es el nombre visible del índice.
  • INDEX_DESCRIPTION: Es la descripción del índice.
  • LOCATION_ID: Es la región de Google Cloud en la que deseas almacenar el índice. Para obtener información sobre las ubicaciones disponibles, consulta Ubicaciones de Vertex AI.
  • CONTENT_URI: Es el URI del bucket de Cloud Storage que contiene las embeddings, que se usa para compilar el índice.
  • DIMENSIONS: La cantidad de dimensiones de los vectores de entrada.
  • NEIGHBORS_COUNT: Es la cantidad de vecinos que se deben encontrar con la búsqueda aproximada antes de que se realice el reordenamiento.
  • INDEX_UPDATE_METHOD: Es el modo de actualización del índice: BATCH_UPDATE o STREAM_UPDATE.
  • DISTANCE_MEASURE_TYPE: Determina el algoritmo que se usa para calcular la distancia entre los puntos de datos y el vector de consulta. Para obtener más información, consulta Tipo de medida de distancia.
  • SHARD_SIZE: Es el tamaño de cada fragmento. Cuando un índice es grande, se fragmenta en función del tamaño de fragmento especificado. Durante la entrega, cada fragmento se entrega en un nodo separado y escala de forma independiente.
  • LEAF_NODE_EMBEDDING_COUNT: Cantidad de embeddings en cada nodo hoja. El valor predeterminado es 1000, si no se configura.
  • LEAF_NODE_TO_SEARCH: El porcentaje predeterminado de nodos de hoja que se pueden buscar en cualquier consulta. Debe estar entre 1 y 100, inclusive. El valor predeterminado es 10 (significa 10%) si no se configura.
  • ETAG: Es un valor de ETag para realizar actualizaciones de lectura, modificación y escritura coherentes.
  • KEY_FOR_ENCRYPTION: Es el identificador de recursos de Cloud KMS de la clave de encriptación administrada por el cliente.

Crea un extremo de índice vectorial

Para crear un extremo de índice de vectores, puedes usar el método CREATE_INDEX_ENDPOINT de la clase /GOOG/CL_VECTOR_INDEX.

lo_vector_index->create_index_endpoint( iv_display_name             = 'INDEX_ENDPOINT_NAME'
                                        iv_description              = 'INDEX_ENDPOINT_DESCRIPTION'
                                        iv_location_id              = 'LOCATION_ID'
                                        iv_public_endpoint_enabled  = 'ENABLE_PUBLIC_ENDPOINT'
                                        iv_etag                     = 'ETAG'
                                        iv_cloud_kms_encryption_key = 'KEY_FOR_ENCRYPTION' ).

Reemplaza lo siguiente:

  • INDEX_ENDPOINT_NAME: Nombre visible del extremo del índice.
  • INDEX_ENDPOINT_DESCRIPTION: Es la descripción del extremo del índice.
  • LOCATION_ID: Es la región de Google Cloud en la que deseas crear el extremo de índice. Para obtener información sobre las ubicaciones disponibles, consulta Ubicaciones de Vertex AI.
  • ENABLE_PUBLIC_ENDPOINT: Si se puede acceder al índice implementado a través de un extremo público, establece el valor del parámetro en ABAP_TRUE.
  • ETAG: Es un valor de ETag para realizar actualizaciones de lectura, modificación y escritura coherentes.
  • KEY_FOR_ENCRYPTION: Es el identificador de recursos de Cloud KMS de la clave de encriptación administrada por el cliente.

Implementa un índice vectorial en un extremo de índice

Para implementar un índice de vectores en un extremo de índice, puedes usar el método DEPLOY_INDEX de la clase /GOOG/CL_VECTOR_INDEX.

lo_vector_index->deploy_index( iv_deployed_index_id     = 'DEPLOYMENT_ID'
                               iv_location_id           = 'LOCATION_ID'
                               iv_index_id              = 'INDEX_ID'
                               iv_index_endpoint_id     = 'INDEX_ENDPOINT_ID>'
                               iv_min_replica_count     = 'MIN_REPLICA_COUNT'
                               iv_max_replica_count     = 'MAX_REPLICA_COUNT'
                               iv_enable_access_logging = 'ENABLE_ACCESS_LOGGING'
                               iv_deployment_group      = 'DEPLOYMENT_GROUP' ).

Reemplaza lo siguiente:

  • DEPLOYMENT_ID: Es el ID de la embedding del índice.
  • LOCATION_ID: Es la región de Google Cloud en la que deseas implementar el índice. Para obtener información sobre las ubicaciones disponibles, consulta Ubicaciones de Vertex AI.
  • INDEX_ID: Es el nombre del recurso del índice.
  • INDEX_ENDPOINT_ID: Es el nombre del recurso del extremo de índice al que se implementará.
  • MIN_REPLICA_COUNT: Es la cantidad mínima de réplicas de máquinas para el modelo implementado.
  • MAX_REPLICA_COUNT: Es la cantidad máxima de réplicas de máquinas para el modelo implementado.
  • ENABLE_ACCESS_LOGGING: Para enviar los registros de acceso del extremo privado a Cloud Logging, configura el valor del parámetro como ABAP_TRUE.
  • DEPLOYMENT_GROUP: Es el nombre del grupo de implementación, por ejemplo, test, prod.

Actualiza y vuelve a compilar un índice de vectores

Para obtener los resultados de la Búsqueda vectorial más precisos para una solución de IA empresarial, también debes mantener el índice actualizado con los datos más recientes de la empresa.

Actualiza un índice por lotes

Para actualizar un índice por lotes con información actualizada presente en un bucket de Cloud Storage, puedes usar el método PATCH_TREE_AH_INDEX de la clase /GOOG/CL_VECTOR_INDEX.

lo_vector_index->patch_tree_ah_index( iv_index_id              = 'INDEX_ID'
                                      iv_gcs_content_uri       = 'CONTENT_URI'
                                      iv_location_id           = 'LOCATION_ID'
                                      iv_is_complete_overwrite = 'IS_COMPLETE_OVERWRITE' ).

Reemplaza lo siguiente:

  • INDEX_ID: Es el nombre del recurso del índice.
  • CONTENT_URI: Es el URI del bucket de Cloud Storage que tiene las incorporaciones de los datos empresariales más recientes.
  • LOCATION_ID: Es la región de Google Cloud del índice.
  • IS_COMPLETE_OVERWRITE: Para reemplazar por completo el índice con datos en el bucket de Cloud Storage determinado, establece el valor del parámetro en ABAP_TRUE.

Puedes usar el siguiente flujo de arquitectura de ejemplo para actualizar un índice por lotes con tus datos de SAP:

  • Actualiza el bucket de Cloud Storage con incorporaciones de los datos más recientes con la clase /GOOG/CL_STORAGE_V1 a través de un trabajo en segundo plano de SAP. En el caso de los datos que no son de SAP, esto también se puede hacer a través de un proceso fuera de SAP.
  • Activa las actualizaciones de índices por lotes con el método PATCH_TREE_AH_INDEX de la clase /GOOG/CL_VECTOR_INDEX, a través de un trabajo en segundo plano en SAP, que se ejecuta con una frecuencia.

Actualiza un índice de transmisión

Para insertar o actualizar información de un dato de un índice de flujo, puedes usar el método UPSERT_DATAPOINTS de la clase /GOOG/CL_VECTOR_INDEX.

lo_vector_index->upsert_datapoints( iv_index_id     = 'INDEX_ID'
                                    iv_location_id  = 'LOCATION_ID'
                                    iv_datapoint_id = 'ENTITY_ID'
                                    it_embeddings   = 'EMBEDDINGS' ).

Reemplaza lo siguiente:

  • INDEX_ID: Es el nombre del recurso del índice.
  • LOCATION_ID: Es la región de Google Cloud del índice.
  • ENTITY_ID: Es el ID de la entidad a la que se insertará o actualizará.
  • EMBEDDINGS: Son embeddings para insertar o actualizar el dato.

Para quitar la información de un dato de un índice de transmisión, puedes usar el método REMOVE_DATAPOINTS de la clase /GOOG/CL_VECTOR_INDEX.

lo_vector_index->remove_datapoints( iv_index_id     = 'INDEX_ID'
                                    iv_location_id  = 'LOCATION_ID'
                                    iv_datapoint_id = 'ENTITY_ID' ).

Reemplaza lo siguiente:

  • INDEX_ID: Es el nombre del recurso del índice.
  • LOCATION_ID: Es la región de Google Cloud del índice.
  • ENTITY_ID: Es el ID de la entidad que se quitará.

Las operaciones de actualización o inserción y eliminación se realizan en tiempo real para el índice.

Puedes usar el siguiente ejemplo de flujo de arquitectura para actualizar un índice de transmisión con tus datos de SAP:

  • Identifica los marcadores de posición en tu solución empresarial de SAP, como los BADIs, las salidas, las mejoras y la lógica de SAP personalizada, que son puntos para el cambio de datos de SAP.
  • Activa la operación de inserción o actualización o de eliminación de datos de SAP del índice de flujo con los métodos UPSERT_DATAPOINTS y REMOVE_DATAPOINTS de la clase /GOOG/CL_VECTOR_INDEX, desde tu marcador de posición identificado.

Obtén el estado de las operaciones de índice vectorial

Google Cloud realiza lo siguiente como una operación de larga duración: creación de índices vectoriales y extremos de índice, implementación de índices en un extremo de índice o actualización de un índice por lotes vectorial.

Para determinar el ID de operación de larga duración, el ID de recurso de los artefactos de Vertex AI y los mensajes de error, el SDK proporciona la clase /GOOG/CL_VECTORINDEX_RESPONSE.

La respuesta que captura la clase /GOOG/CL_VECTORINDEX_RESPONSE se encadena a las solicitudes realizadas a través de los métodos de la clase /GOOG/CL_VECTOR_INDEX, de modo que puedas acceder directamente a la respuesta en una sola sentencia sin necesidad de variables para almacenar los resultados intermedios.

Obtén el ID de la operación de larga duración

Para obtener el ID de operación de larga duración de cada tarea de búsqueda de vectores, puedes usar el método GET_LRO de la clase /GOOG/CL_VECTORINDEX_RESPONSE. Después de ejecutar una tarea, puedes llamar al método GET_LRO con la misma instancia para obtener el ID de operación de larga duración correspondiente.

En la siguiente muestra de código, se explica cómo obtener el ID de operación de larga duración para una tarea de actualización de índice por lotes:

DATA(lv_patch_index_lro) = lo_vector_index->patch_tree_ah_index(
                                              iv_index_id              = 'INDEX_ID'
                                              iv_gcs_content_uri       = 'CONTENT_URI'
                                              iv_location_id           = 'LOCATION_ID'
                                              iv_is_complete_overwrite = 'IS_COMPLETE_OVERWRITE'
                                         )->get_lro( ).

Reemplaza lo siguiente:

  • INDEX_ID: Es el nombre del recurso del índice.
  • CONTENT_URI: Es el URI del bucket de Cloud Storage que tiene las incorporaciones de los datos empresariales más recientes.
  • LOCATION_ID: Es la región de Google Cloud del índice.
  • IS_COMPLETE_OVERWRITE: Para reemplazar por completo el índice con datos en el bucket de Cloud Storage determinado, establece el valor de este parámetro en ABAP_TRUE.

Obtén el estado de la operación de larga duración

Cada operación de larga duración tiene un estado asociado. Para validar si la tarea programada como operación de larga duración se realizó de forma correcta o no, puedes verificar el estado de la operación.

Para determinar o supervisar continuamente el estado de una operación de larga duración para cualquier tarea relacionada con Vertex AI, puedes usar el método GET_LRO_STATUS de la clase /GOOG/CL_VERTEX_AI_SDK_UTILITY.

/goog/cl_vertex_ai_sdk_utility=>get_lro_status(
    EXPORTING
        iv_key           = 'CLIENY_KEY'
        iv_operations_id = 'LONG_RUNNING_OPERATION_ID'
        iv_location_id   = 'LOCATION_ID'
    IMPORTING
        ev_is_done       = DATA(lv_is_done)          "Is the long-running operation complete
        ev_is_successful = DATA(lv_is_successful)    "Is the long-running operation successful
        ev_error_code    = DATA(lv_error_code)       "Error code in the long-running operation in case of errors
        ev_error_message = DATA(lv_error_message) ). "Error message in the long-running operation in case of errors

Reemplaza lo siguiente:

  • CLIENY_KEY: Clave del cliente para la autenticación.
  • LONG_RUNNING_OPERATION_ID: ID de operación de larga duración.
  • LOCATION_ID: Es la región de Google Cloud del índice.

Obtén el ID de recurso del artefacto de Vertex AI

Para determinar el ID de recurso del índice creado, el extremo de índice creado, el índice implementado y el ID de índice para el que se activa el parche, puedes usar el método GET_ID de la clase /GOOG/CL_VECTORINDEX_RESPONSE.

Después de ejecutar una tarea, puedes llamar al método GET_ID con la misma instancia para obtener el ID de recurso correspondiente.

En la siguiente muestra de código, se explica cómo obtener el ID del índice que se crea después de llamar al método CREATE_TREE_AH_INDEX de la clase /GOOG/CL_VECTOR_INDEX:

DATA(lv_id) = lo_vector_index->create_tree_ah_index(
                                 iv_display_name                = 'INDEX_NAME'
                                 iv_location_id                 = 'LOCATION_ID'
                                 iv_gcs_content_uri             = 'CONTENT_URI'
                                 iv_dimensions                  = 'DIMENSIONS'
                                 iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
                                 iv_leaf_node_embedding_count   = 'LEAF_NODE_EMBEDDING_COUNT'
                                 iv_leaf_nodes_to_search        = 'LEAF_NODE_TO_SEARCH'
                            )->get_id( ).

Reemplaza lo siguiente:

  • INDEX_NAME: Es el nombre visible del índice.
  • LOCATION_ID: Es la región de Google Cloud del índice.
  • CONTENT_URI: Es el URI del bucket de Cloud Storage que contiene las embeddings, que se usa para compilar el índice.
  • DIMENSIONS: La cantidad de dimensiones de los vectores de entrada.
  • NEIGHBORS_COUNT: Son los vecinos que se deben encontrar mediante la búsqueda aproximada antes de que se realice el reordenamiento.
  • LEAF_NODE_EMBEDDING_COUNT: Cantidad de embeddings en cada nodo hoja. El valor predeterminado es 1000, si no se configura.
  • LEAF_NODE_TO_SEARCH: El porcentaje predeterminado de nodos de hoja que se pueden buscar en cualquier consulta. Debe estar entre 1 y 100, inclusive. El valor predeterminado es 10 (significa 10%) si no se configura.

Obtén el código de error y el mensaje de error

Es posible que se produzcan errores durante el activado de tareas de índice de vectores a través del SDK de Vertex AI para ABAP.

Para obtener el código de error y el mensaje de error, respectivamente (si los hay), después del activador de una tarea, puedes usar los métodos GET_ERROR_CODE y GET_ERROR_MESSAGE de la clase "/GOOG/CL_VECTORINDEX_RESPONSE".

Después de ejecutar una tarea, puedes llamar a los métodos GET_ERROR_CODE y GET_ERROR_MESSAGE con la misma instancia para obtener el código de error o el mensaje de error correspondiente.

En la siguiente muestra de código, se muestra cómo mostrar el código de error y el mensaje de error si falla la creación de un índice:

DATA(lo_vectorindex_response) = lo_vector_index->create_tree_ah_index(
                                                   iv_display_name                = 'INDEX_NAME'
                                                   iv_location_id                 = 'LOCATION_ID'
                                                   iv_gcs_content_uri             = 'CONTENT_URI'
                                                   iv_dimensions                  = 'DIMENSIONS'
                                                   iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
                                                   iv_leaf_node_embedding_count   = 'LEAF_NODE_EMBEDDING_COUNT'
                                                   iv_leaf_nodes_to_search        = 'LEAF_NODE_TO_SEARCH' ).
IF lo_vectorindex_response->get_error_code( ) IS NOT INITIAL.
  cl_demo_output=>display( 'Error Code-' && lo_vectorindex_response->get_error_code( ) &&
                           'Error Message-' && lo_vectorindex_response->get_error_message( ) ).
ENDIF.

Reemplaza lo siguiente:

  • INDEX_NAME: Es el nombre visible del índice.
  • LOCATION_ID: Es la región de Google Cloud del índice.
  • CONTENT_URI: Es el URI del bucket de Cloud Storage que contiene las embeddings, que se usa para compilar el índice.
  • DIMENSIONS: La cantidad de dimensiones de los vectores de entrada.
  • NEIGHBORS_COUNT: Son los vecinos que se deben encontrar mediante la búsqueda aproximada antes de que se realice el reordenamiento.
  • LEAF_NODE_EMBEDDING_COUNT: Cantidad de embeddings en cada nodo hoja. El valor predeterminado es 1000, si no se configura.
  • LEAF_NODE_TO_SEARCH: El porcentaje predeterminado de nodos de hoja que se pueden buscar en cualquier consulta. Debe estar entre 1 y 100, inclusive. El valor predeterminado es 10 (significa 10%) si no se configura.

Busca vecinos más cercanos

En esta sección, se explica cómo buscar vecinos más cercanos con el SDK de Vertex AI para ABAP.

Antes de comenzar

Asegúrate de que tú o tus administradores hayan completado los siguientes requisitos previos:

Crea un destino de RFC

Debes crear un destino de RFC para el extremo de índice al que implementaste tu índice con tus datos empresariales en forma de archivos de incorporación.

  1. Recupera el nombre de host del extremo de índice:

    1. En la GUI de SAP, ejecuta el código de transacción /GOOG/SDK_IMG.

      Como alternativa, ejecuta el código de transacción SPRO y, luego, haz clic en IMG de referencia de SAP.

    2. Haz clic en SDK de ABAP para Google Cloud > Utilidades > SDK de Vertex AI: Obtén información de RFC para Feature Store y Vector Search.
    3. Selecciona Obtener detalles de la Búsqueda de vectores.
    4. Selecciona una de las siguientes opciones:

      • Tecla de búsqueda
      • ID del extremo del índice de vectores
    5. Si seleccionaste la opción Clave de búsqueda, ingresa la clave de búsqueda, que se configura en los parámetros de Búsqueda de vectores.

    6. Si seleccionaste la opción ID del extremo del índice de vectores, ingresa los siguientes parámetros:

      • Nombre de la clave de Google Cloud: Es la clave de cliente para la autenticación en Google Cloud.
      • Ubicación: Es la región en la que se encuentra el extremo de índice.
      • ID del extremo del índice: Es el nombre del extremo del índice.
    7. Haz clic en Ejecutar para ver los detalles. Anota el extremo junto a la etiqueta Host.

  2. Crea un destino de RFC para el extremo de índice:

    1. En la GUI de SAP, ejecuta el código de transacción SM59.

    2. Crea un nuevo destino de RFC. Para los destinos de RFC que creaste, asegúrate de que el Tipo de conexión esté configurado de la siguiente manera: G - HTTP connection to external server.

    3. Ve a la pestaña Configuración técnica y, luego, ingresa los siguientes detalles:

      • Host de destino: Proporciona el nombre de host del extremo de índice.

      • Número de servicio: Ingresa 443. Este número de puerto se usa para la comunicación segura.

    4. Ve al Inicio de sesión y seguridad y asegúrate de que el Certificado SSL se establece el campo con la opción Cliente SSL de CDAULT (estándar).

    5. Guarda los cambios.

  3. Configura la tabla de asignación de servicios para la API de Vertex AI:

    1. En la GUI de SAP, ejecuta el código de transacción /GOOG/SDK_IMG.

      Como alternativa, ejecuta el código de transacción SPRO y, luego, haz clic en IMG de referencia de SAP.

    2. Haz clic en SDK de ABAP para Google Cloud > Configuración básica > Configurar asignación de servicios.

    3. Haz clic en Entradas nuevas.

    4. Especifica el destino de RFC para la API de Vertex AI:

      Nombre Nombre del servicio Destino de RFC
      Clave de cliente para la autenticación. apiinvoker:v1 Es el nombre del destino de RFC.
    5. Guarda la entrada nueva.

Para invocar la Búsqueda de vectores, puedes crear una instancia de la clase /GOOG/CL_VECTOR_SEARCH. Para crear una instancia de la clase, debes pasar el valor de búsqueda, que se configura en los parámetros de la Búsqueda de vectores.

DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_name = 'SEARCH_KEY' ).

Reemplaza SEARCH_KEY por la clave de búsqueda, que se configura en los parámetros de Búsqueda de vectores.

Cómo buscar con un ID de entidad

Para consultar un índice vectorial en relación con un ID de entidad específico, puedes usar el método FIND_NEIGHBORS_BY_ENTITY_ID de la clase /GOOG/CL_VECTOR_SEARCH. Los IDs de entidad corresponden a los datos almacenados en tu índice vectorial.

lo_vector_search->find_neighbors_by_entity_id( iv_entity_id             = 'ENTITY_ID'
                                               iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                               iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).

Reemplaza lo siguiente:

  • ENTITY_ID: Es el ID de la entidad que se buscará.
  • NEIGHBOR_COUNT: Es la cantidad de vecinos más cercanos que se recuperarán para la consulta.
  • RETURN_FULL_DATAPOINT: Para mostrar las incorporaciones de vectores para los datos recuperados, establece el valor del parámetro en ABAP_TRUE.

Cómo buscar con una cadena de búsqueda

Para consultar un índice de vectores en relación con una cadena de búsqueda, puedes usar el método FIND_NEIGHBORS_BY_STRING de la clase /GOOG/CL_VECTOR_SEARCH.

Primero, el SDK convierte tu cadena de búsqueda en incorporaciones y, luego, recupera los vecinos más cercanos para la consulta.

DATA(lo_response) = lo_vector_search->find_neighbors_by_string(
                                        iv_search_string         = 'SEARCH_STRING'
                                        iv_embeddings_model_key  = 'MODEL_KEY'
                                        iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                        iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).

Reemplaza lo siguiente:

  • SEARCH_STRING: Cadena de búsqueda de entrada.
  • MODEL_KEY: Es la clave de modelo para generar embeddings, que se configura en los parámetros de generación del modelo.
  • NEIGHBOR_COUNT: Es la cantidad de vecinos más cercanos que se recuperarán para la consulta.
  • RETURN_FULL_DATAPOINT: Para mostrar las incorporaciones de vectores para los datos recuperados, establece el valor del parámetro en ABAP_TRUE.

Cómo buscar con una embedding

Para consultar un índice de vectores en relación con las embeddings, puedes usar el método FIND_NEIGHBORS_BY_EMBEDDING de la clase /GOOG/CL_VECTOR_SEARCH.

DATA(lo_response) = lo_vector_search->find_neighbors_by_embeddings(
                                        iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                        iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT'
                                        it_embeddings            = 'EMBEDDINGS' ).

Reemplaza lo siguiente:

  • NEIGHBOR_COUNT: Es la cantidad de vecinos más cercanos que se recuperarán para la consulta.
  • RETURN_FULL_DATAPOINT: Para mostrar las incorporaciones de vectores para los datos recuperados, establece el valor del parámetro en ABAP_TRUE.
  • EMBEDDINGS: Embeddings de entrada.

Obtén la respuesta de la búsqueda

Para recibir respuestas procesadas del modelo y presentarlas de una manera significativa, el SDK proporciona la clase ABAP /GOOG/CL_VECTORSEARCH_RESPONSE.

La respuesta que captura la clase /GOOG/CL_VECTORSEARCH_RESPONSE se encadena a las solicitudes realizadas a través de los métodos de la clase /GOOG/CL_VECTOR_SEARCH, de modo que puedas acceder directamente a la respuesta en una sola sentencia sin necesidad de variables para almacenar los resultados intermedios.

Obtén los vecinos más cercanos para la búsqueda

Para determinar los vecinos más cercanos que se encontraron para la búsqueda ejecutada con respecto a un dato, una cadena de búsqueda o incorporaciones, puedes usar los métodos GET_NEAREST_NEIGHBOR y GET_NEAREST_NEIGHBORS de la clase /GOOG/CL_VECTORSEARCH_RESPONSE.

Se puede llamar a estos métodos en una cadena después de ejecutar la consulta de búsqueda con los métodos FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING y FIND_NEIGHBORS_BY_ENTITY_ID de la clase /GOOG/CL_VECTOR_SEARCH.

  • Para obtener el vecino más cercano al punto de datos, la cadena o las embeddings que se buscaron, llama al método GET_NEAREST_NEIGHBOR. La respuesta de este método enumera el ID del punto de datos más cercano, su distancia de la búsqueda y el vector de atributos asociado con él en el índice.

    En la siguiente muestra de código, se muestra cómo obtener el vecino más cercano para una cadena de búsqueda:

    DATA(ls_nearest_neighbor) = lo_vector_search->find_neighbors_by_string(
                                                    iv_search_string         = 'SEARCH_STRING'
                                                    iv_embeddings_model_key  = 'MODEL_KEY'
                                                    iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                    iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT'
                                               )->get_nearest_neighbor( ).
    

    Reemplaza lo siguiente:

    • SEARCH_STRING: Cadena de búsqueda de entrada.
    • MODEL_KEY: Es la clave de modelo para generar embeddings, que se configura en los parámetros de generación del modelo.
    • NEIGHBOR_COUNT: Es la cantidad de vecinos más cercanos que se recuperarán para la consulta.
    • RETURN_FULL_DATAPOINT: Para mostrar las incorporaciones de vectores para los datos recuperados, establece el valor del parámetro en ABAP_TRUE.
  • Para obtener el conjunto de vecinos más cercanos al punto de datos, la cadena o las embeddings que se buscaron, llama al método GET_NEAREST_NEIGHBORS. La respuesta de este método es una tabla de puntos de datos más cercanos, en la que se enumeran los IDs de los puntos de datos, su distancia de la búsqueda y el vector de atributos asociado con ellos en el índice.

    En la siguiente muestra de código, se muestra cómo obtener los vecinos más cercanos para una cadena de búsqueda:

    DATA(lt_nearest_neighbors) = lo_vector_search->find_neighbors_by_string(
                                                     iv_search_string         = 'SEARCH_STRING'
                                                     iv_embeddings_model_key  = 'MODEL_KEY'
                                                     iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                     iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT'
                                                )->get_nearest_neighbors( ).
    

    Reemplaza lo siguiente:

    • SEARCH_STRING: Cadena de búsqueda de entrada.
    • MODEL_KEY: Es la clave de modelo para generar embeddings, que se configura en los parámetros de generación del modelo.
    • NEIGHBOR_COUNT: Es la cantidad de vecinos más cercanos que se recuperarán para la consulta.
    • RETURN_FULL_DATAPOINT: Para mostrar las incorporaciones de vectores para los datos recuperados, establece el valor del parámetro en ABAP_TRUE.

Obtén la distancia del vecino recuperado

Para determinar la distancia de una respuesta recuperada de la búsqueda, puedes usar el método GET_DATAPOINT_DISTANCE de la clase /GOOG/CL_VECTORSEARCH_RESPONSE.

La distancia en la respuesta de la búsqueda representa una medida de la disimilitud entre la búsqueda (cadena, incorporación o ID de entidad) y un vector de resultados recuperado. El significado específico de la distancia depende de la "Medición de distancia" que se usa cuando se crea un índice.

El valor de distancia te ayuda a comprender qué tan relevante es cada resultado de la búsqueda para tu consulta. Por lo general, los resultados con distancias más bajas se consideran más similares o relevantes, mientras que los que tienen distancias más altas son menos similares o relevantes.

En la siguiente muestra de código, se muestra cómo obtener la distancia del vecino más cercano para una cadena de búsqueda:

DATA(lo_vectorsearch_response) = lo_vector_search->find_neighbors_by_string(
                                                     iv_search_string         = 'SEARCH_STRING'
                                                     iv_embeddings_model_key  = 'MODEL_KEY'
                                                     iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                     iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
DATA(ls_nearest_neighbor) = lo_vectorsearch_response->get_nearest_neighbor( ).
DATA(lv_distance) = lo_vectorsearch_response->get_datapoint_distance( iv_datapoint_id = ls_nearest_neighbor-datapoint_id ).

Reemplaza lo siguiente:

  • SEARCH_STRING: Cadena de búsqueda de entrada.
  • MODEL_KEY: Es la clave de modelo para generar embeddings, que se configura en los parámetros de generación del modelo.
  • NEIGHBOR_COUNT: Es la cantidad de vecinos más cercanos que se recuperarán para la consulta.
  • RETURN_FULL_DATAPOINT: Para mostrar las incorporaciones de vectores para los datos recuperados, establece el valor del parámetro en ABAP_TRUE.

Obtén el vector de embeddings del vecino recuperado

Para determinar el vector de embeddings de la respuesta recuperada de la consulta que se buscó, puedes usar el método GET_DATAPOINT_FEATURE_VECTOR de la clase /GOOG/CL_VECTORSEARCH_RESPONSE.

Para obtener un vector de embeddings, el parámetro IV_RETURN_FULL_DATAPOINT de los métodos FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING y FIND_NEIGHBORS_BY_ENTITY_ID debe establecerse en ABAP_TRUE.

En la siguiente muestra de código, se ilustra cómo obtener el vector de características del vecino más cercano para una cadena de búsqueda:

DATA(lo_vectorsearch_response) = lo_vector_search->find_neighbors_by_string(
                                                     iv_search_string         = 'SEARCH_STRING'
                                                     iv_embeddings_model_key  = 'MODEL_KEY'
                                                     iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                     iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
DATA(ls_nearest_neighbor) = lo_vectorsearch_response->get_nearest_neighbor( ).
DATA(lt_feature_vector) = lo_vectorsearch_response->get_datapoint_feature_vector( iv_datapoint_id = ls_nearest_neighbor-datapoint_id ).

Reemplaza lo siguiente:

  • SEARCH_STRING: Cadena de búsqueda de entrada.
  • MODEL_KEY: Es la clave de modelo para generar embeddings, que se configura en los parámetros de generación del modelo.
  • NEIGHBOR_COUNT: Es la cantidad de vecinos más cercanos que se recuperarán para la consulta.
  • RETURN_FULL_DATAPOINT: Para mostrar las incorporaciones de vectores para los datos recuperados, establece el valor del parámetro en ABAP_TRUE.

¿Qué sigue?