Usar a pesquisa de vetores da Vertex AI

Este documento descreve como usar a Vertex AI Vector Search para realizar pesquisas de similaridade vetorial usando o SDK da Vertex AI para ABAP. Com a Pesquisa Vetorial, é possível encontrar pontos de dados semanticamente semelhantes em grandes conjuntos de dados usando vetores de alta dimensão. Ela se destaca em tarefas como recuperação de imagens e texto, priorizando o significado em vez de correspondências exatas de palavras-chave.

Com a Pesquisa vetorial, você pode aproveitar o poder dos seus dados corporativos para melhorar a eficiência, a experiência do cliente e a vantagem competitiva. Ele pode trazer valor significativo ao seu ambiente SAP, oferecendo benefícios como os seguintes:

  • Melhorar os recursos de pesquisa: melhore a precisão e a relevância dos resultados da pesquisa em grandes quantidades de dados SAP, incluindo informações estruturadas e não estruturadas espalhadas por sistemas diferentes. Isso leva à recuperação de informações mais rápida e eficaz de dados corporativos relevantes.

  • Desbloquear insights de dados não estruturados: use a Pesquisa vetorial para extrair insights valiosos de dados não estruturados que ainda não foram aproveitados nos sistemas SAP, como dados de produtos, de clientes, avaliações de clientes, tickets de suporte ou documentos internos.

  • Melhorar a experiência do cliente: ofereça interações personalizadas e sensíveis ao contexto com os clientes usando a Pesquisa vetorial para recomendações de produtos, chatbots inteligentes e outros aplicativos voltados ao cliente.

  • Simplificar processos de negócios: otimize os processos internos usando a pesquisa vetorial para encontrar rapidamente informações relevantes, identificar padrões e tomar decisões com base em dados.

  • Acelere a inovação: combine a pesquisa vetorial com outros recursos da Vertex AI, como a IA generativa, para desenvolver soluções novas e inovadoras que impulsionam o crescimento da empresa.

Como usar a pesquisa de vetor da Vertex AI

A correspondência semântica usando a Pesquisa vetorial pode ser simplificada nas seguintes etapas:

  1. Gerar representações de incorporação dos dados da empresa.
  2. Faça upload dos embeddings para um bucket do Cloud Storage.
  3. Crie um índice de vetor e associe-o ao bucket do Cloud Storage que contém embeddings. É possível criar dois tipos de índices, dependendo de como você planeja atualizá-los com os dados mais recentes:

    • Índice em lote: um índice em lote é usado quando você quer atualizar seu índice em lote, com dados que foram armazenados por um determinado período, como dados processados semanalmente ou mensalmente.
    • Índice de streaming: um índice de streaming é usado quando você quer que os dados do índice sejam atualizados assim que novos dados forem adicionados ao repositório de dados.
  4. Crie um endpoint de índice e implante o índice vetorial no endpoint para executar consultas e receber recomendações ou resultados. Um endpoint de índice funciona como uma instância do servidor que aceita solicitações de consulta para o índice.

  5. Consulte o endpoint do índice usando um ID de entidade, uma string de pesquisa ou um embedding.

O SDK da Vertex AI para ABAP abrange todos esses aspectos da Pesquisa de vetor da Vertex AI para que você crie aplicativos de pesquisa de vetor com tecnologia da Vertex AI no seu ambiente ABAP.

Criar e gerenciar um índice vetorial

Esta seção explica como criar e gerenciar um índice de vetores usando o SDK da Vertex AI para ABAP.

Antes de começar

Verifique se você ou seus administradores concluíram os seguintes pré-requisitos:

Preparar seus embeddings

Você precisa ter os embeddings prontos. Para saber como gerar embeddings para seus dados corporativos usando o SDK da Vertex AI para ABAP, consulte Gerar embeddings.

Fazer upload de embeddings para o Cloud Storage

Faça upload dos embeddings para um bucket do Cloud Storage para associar os embeddings a um índice de vetores. Mesmo que você tenha gerado os arquivos de incorporação fora do Google Cloud, é possível fazer o upload deles para um bucket do Cloud Storage.

Para saber como enviar as representações geradas pelo uso do SDK da Vertex AI para ABAP a um bucket do Cloud Storage, consulte Armazenar representações no Cloud Storage.

Criar uma instância da classe para o índice vetorial

Para criar e gerenciar o índice de vetores, instancie a classe /GOOG/CL_VECTOR_INDEX. Você instancia a classe transmitindo a chave de cliente configurada para autenticação.

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

Substitua CLIENT_KEY pela chave do cliente configurada para autenticação.

Criar um índice vetorial

Para criar um índice de vetores, use o método CREATE_TREE_AH_INDEX da classe /GOOG/CL_VECTOR_INDEX. Ele cria um índice com base no algoritmo tree-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' ).

Substitua:

  • INDEX_NAME: nome de exibição do índice.
  • INDEX_DESCRIPTION: descrição do índice.
  • LOCATION_ID: a região do Google Cloud em que você quer armazenar o índice. Para informações sobre os locais disponíveis, consulte Locais da Vertex AI.
  • CONTENT_URI: URI do bucket do Cloud Storage que contém os embeddings, que são usados para criar o índice.
  • DIMENSIONS: número de dimensões dos vetores de entrada.
  • NEIGHBORS_COUNT: número de vizinhos que serão encontrados com a pesquisa de aproximação antes da reordenação.
  • INDEX_UPDATE_METHOD: modo de atualização do índice: BATCH_UPDATE ou STREAM_UPDATE.
  • DISTANCE_MEASURE_TYPE: determina o algoritmo usado para o cálculo da distância entre pontos de dados e o vetor de consulta. Para mais informações, consulte Tipo de medida de distância.
  • SHARD_SIZE: tamanho de cada fragmento. Quando um índice é grande, ele é fragmentado com base no tamanho do fragmento especificado. Durante a disponibilização, cada fragmento é exibido em um nó separado e é escalonado de maneira independente.
  • LEAF_NODE_EMBEDDING_COUNT: número de embeddings em cada nó de folha. Se não for definido, o valor padrão será 1000.
  • LEAF_NODE_TO_SEARCH: a porcentagem padrão de nós de folha em que qualquer consulta pode ser pesquisada. Precisa estar no intervalo 1-100, inclusive. Se não for definido, o valor padrão será 10 (significa 10%).
  • ETAG: um valor de ETag para executar atualizações consistentes de leitura-modificação-gravação.
  • KEY_FOR_ENCRYPTION: identificador de recurso do Cloud KMS da chave de criptografia gerenciada pelo cliente.

Criar um endpoint de índice vetorial

Para criar um endpoint de índice de vetores, use o método CREATE_INDEX_ENDPOINT da classe /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' ).

Substitua:

  • INDEX_ENDPOINT_NAME: nome de exibição do endpoint do índice.
  • INDEX_ENDPOINT_DESCRIPTION: descrição do endpoint do índice.
  • LOCATION_ID: a região do Google Cloud em que você quer criar o endpoint de índice. Para informações sobre os locais disponíveis, consulte Locais da Vertex AI.
  • ENABLE_PUBLIC_ENDPOINT: se o índice implantado for acessível por um endpoint público, defina o valor desse parâmetro como ABAP_TRUE.
  • ETAG: um valor de ETag para executar atualizações consistentes de leitura-modificação-gravação.
  • KEY_FOR_ENCRYPTION: identificador de recurso do Cloud KMS da chave de criptografia gerenciada pelo cliente.

Implantar um índice vetorial em um endpoint de índice

Para implantar um índice vetorial em um endpoint de índice, use o método DEPLOY_INDEX da classe /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' ).

Substitua:

  • DEPLOYMENT_ID: ID da implantação do índice.
  • LOCATION_ID: a região do Google Cloud em que você quer implantar o índice. Para informações sobre os locais disponíveis, consulte Locais da Vertex AI.
  • INDEX_ID: nome do recurso do índice.
  • INDEX_ENDPOINT_ID: nome do recurso do endpoint do índice para implantação.
  • MIN_REPLICA_COUNT: número mínimo de réplicas de máquina para o modelo implantado.
  • MAX_REPLICA_COUNT: número máximo de réplicas de máquina para o modelo implantado.
  • ENABLE_ACCESS_LOGGING: para enviar os registros de acesso do endpoint particular ao Cloud Logging, defina o valor desse parâmetro como ABAP_TRUE.
  • DEPLOYMENT_GROUP: nome do grupo de implantação, por exemplo, test, prod.

Atualizar e recriar um índice de vetor

Para receber os resultados mais precisos da Pesquisa vetorial para uma solução de IA empresarial, também é necessário manter o índice atualizado com os dados mais recentes da empresa.

Atualizar um índice de lote

Para atualizar um índice de lote com informações atualizadas presentes em um bucket do Cloud Storage, use o método PATCH_TREE_AH_INDEX da classe /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' ).

Substitua:

  • INDEX_ID: nome do recurso do índice.
  • CONTENT_URI: URI do bucket do Cloud Storage com os embeddings dos dados empresariais mais recentes.
  • LOCATION_ID: região do Google Cloud do índice.
  • IS_COMPLETE_OVERWRITE: para substituir completamente o índice com dados no bucket do Cloud Storage, defina o valor do parâmetro como ABAP_TRUE.

Use o exemplo de fluxo de arquitetura a seguir para atualizar um índice de lote com seus dados SAP:

  • Atualize o bucket do Cloud Storage com incorporações dos dados mais recentes usando a classe /GOOG/CL_STORAGE_V1, em um job em segundo plano do SAP. Para dados que não são da SAP, isso também pode ser feito por um processo fora da SAP.
  • Acione atualizações de índice em lote usando o método PATCH_TREE_AH_INDEX da classe /GOOG/CL_VECTOR_INDEX, em um job em segundo plano no SAP, executado em uma frequência.

Atualizar um índice de stream

Para inserir informações de um ponto de dados em um índice de fluxo, use o método UPSERT_DATAPOINTS da classe /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' ).

Substitua:

  • INDEX_ID: nome do recurso do índice.
  • LOCATION_ID: região do Google Cloud do índice.
  • ENTITY_ID: o ID da entidade para inserir ou atualizar.
  • EMBEDDINGS: incorporações para atualizar e inserir para o ponto de dados.

Para remover informações de um ponto de dados de um índice de fluxo, use o método REMOVE_DATAPOINTS da classe /GOOG/CL_VECTOR_INDEX.

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

Substitua:

  • INDEX_ID: nome do recurso do índice.
  • LOCATION_ID: região do Google Cloud do índice.
  • ENTITY_ID: ID da entidade a ser removida.

As operações de inserção e remoção são feitas em tempo real para o índice.

Use o exemplo de fluxo de arquitetura a seguir para atualizar um índice de fluxo com seus dados do SAP:

  • Identifique os marcadores de posição na solução empresarial do SAP, como BADIs, saídas, melhorias e lógica SAP personalizada, que são pontos de mudança de dados do SAP.
  • Acione a operação de inserção ou remoção de dados do SAP do índice de fluxo usando os métodos UPSERT_DATAPOINTS e REMOVE_DATAPOINTS da classe /GOOG/CL_VECTOR_INDEX, do marcador de posição identificado.

Conferir o status das operações de índice vetorial

O Google Cloud realiza as seguintes operações como uma operação de longa duração: criação de índice vetorial e endpoint de índice, implantação de índice em um endpoint de índice ou atualização de um índice de lote vetorial.

Para determinar o ID da operação de longa duração, o ID do recurso dos artefatos da Vertex AI e as mensagens de erro, o SDK fornece a classe /GOOG/CL_VECTORINDEX_RESPONSE.

A resposta capturada pela classe /GOOG/CL_VECTORINDEX_RESPONSE é encadeada às solicitações feitas pelos métodos da classe /GOOG/CL_VECTOR_INDEX, para que você possa acessar diretamente a resposta em uma única instrução sem requerer variáveis para armazenar os resultados intermediários.

Receber o ID da operação de longa duração

Para receber o ID da operação de longa duração de cada tarefa de pesquisa de vetor, use o método GET_LRO da classe /GOOG/CL_VECTORINDEX_RESPONSE. Depois de executar uma tarefa, é possível chamar o método GET_LRO com a mesma instância para receber o ID de operação de longa duração execução correspondente.

O exemplo de código abaixo ilustra como conseguir o ID da operação de longa duração para uma tarefa de atualização de índice em lote:

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( ).

Substitua:

  • INDEX_ID: nome do recurso do índice.
  • CONTENT_URI: URI do bucket do Cloud Storage com os embeddings dos dados empresariais mais recentes.
  • LOCATION_ID: região do Google Cloud do índice.
  • IS_COMPLETE_OVERWRITE: para substituir completamente o índice com dados no bucket do Cloud Storage, defina o valor desse parâmetro como ABAP_TRUE.

Conferir o status da operação de longa duração

Cada operação de longa duração tem um status associado a ela. Para validar se a tarefa programada como uma operação de longa duração foi bem-sucedida ou não, verifique o status da operação.

Para determinar ou monitorar continuamente o status de uma operação de longa duração para qualquer tarefa relacionada à Vertex AI, use o método GET_LRO_STATUS da classe /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

Substitua:

  • CLIENY_KEY: chave do cliente para autenticação.
  • LONG_RUNNING_OPERATION_ID: ID da operação de longa duração.
  • LOCATION_ID: região do Google Cloud do índice.

Conseguir o ID do recurso do artefato da Vertex AI

Para determinar o ID do recurso do índice criado, do endpoint de índice criado, do índice implantado e do ID do índice para o qual o patch é acionado, use o método GET_ID da classe /GOOG/CL_VECTORINDEX_RESPONSE.

Depois de executar uma tarefa, é possível chamar o método GET_ID com a mesma instância para receber o ID de recurso correspondente.

O exemplo de código abaixo ilustra como receber o ID do índice que está sendo criado depois de chamar o método CREATE_TREE_AH_INDEX da classe /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( ).

Substitua:

  • INDEX_NAME: nome de exibição do índice.
  • LOCATION_ID: região do Google Cloud do índice.
  • CONTENT_URI: URI do bucket do Cloud Storage que contém os embeddings, que são usados para criar o índice.
  • DIMENSIONS: número de dimensões dos vetores de entrada.
  • NEIGHBORS_COUNT: vizinhos que serão encontrados com a pesquisa de aproximação antes da reordenação ser realizada.
  • LEAF_NODE_EMBEDDING_COUNT: número de embeddings em cada nó de folha. Se não for definido, o valor padrão será 1000.
  • LEAF_NODE_TO_SEARCH: a porcentagem padrão de nós de folha em que qualquer consulta pode ser pesquisada. Precisa estar no intervalo 1-100, inclusive. Se não for definido, o valor padrão será 10 (significa 10%).

Receber o código e a mensagem de erro

Erros podem ocorrer durante o acionamento de tarefas de índice de vetor pelo SDK da Vertex AI para ABAP.

Para receber o código de erro e a mensagem de erro (se houver) após o gatilho de uma tarefa, use os métodos GET_ERROR_CODE e GET_ERROR_MESSAGE da classe /GOOG/CL_VECTORINDEX_RESPONSE.

Depois de executar uma tarefa, você pode chamar os métodos GET_ERROR_CODE e GET_ERROR_MESSAGE com a mesma instância para receber o código ou a mensagem de erro correspondente.

O exemplo de código abaixo ilustra como mostrar o código e a mensagem de erro se a criação de um índice falhar:

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.

Substitua:

  • INDEX_NAME: nome de exibição do índice.
  • LOCATION_ID: região do Google Cloud do índice.
  • CONTENT_URI: URI do bucket do Cloud Storage que contém os embeddings, que são usados para criar o índice.
  • DIMENSIONS: número de dimensões dos vetores de entrada.
  • NEIGHBORS_COUNT: vizinhos que serão encontrados com a pesquisa de aproximação antes da reordenação ser realizada.
  • LEAF_NODE_EMBEDDING_COUNT: número de embeddings em cada nó de folha. Se não for definido, o valor padrão será 1000.
  • LEAF_NODE_TO_SEARCH: a porcentagem padrão de nós de folha em que qualquer consulta pode ser pesquisada. Precisa estar no intervalo 1-100, inclusive. Se não for definido, o valor padrão será 10 (significa 10%).

Pesquisar vizinhos mais próximos

Esta seção explica como pesquisar vizinhos mais próximos usando o SDK da Vertex AI para ABAP.

Antes de começar

Verifique se você ou seus administradores concluíram os seguintes pré-requisitos:

Criar um destino de RFC

É necessário criar um destino RFC para o endpoint de índice em que você implantou o índice com seus dados corporativos na forma de arquivos de incorporação.

  1. Extraia o nome do host do endpoint do índice:

    1. Na GUI do SAP, execute o código de transação /GOOG/SDK_IMG.

      Como alternativa, execute o código da transação SPRO e clique em IMG de referência do SAP.

    2. Clique em SDK do ABAP para Google Cloud > Utilitários > SDK da Vertex AI: acessar informações de RFC para Feature Store e pesquisa de vetor.
    3. Selecione Conferir detalhes da pesquisa de vetor.
    4. Selecione uma das seguintes opções:

      • Tecla de pesquisa
      • ID do endpoint do índice de vetor
    5. Se você tiver selecionado a opção Chave de pesquisa, insira a chave de pesquisa, que é configurada nos parâmetros da pesquisa de vetor.

    6. Se você selecionou a opção ID do endpoint do índice de vetor, insira os seguintes parâmetros:

      • Nome da chave do Google Cloud: a chave de cliente para autenticação no Google Cloud.
      • Local: a região em que o endpoint do índice está localizado.
      • ID do endpoint do índice: o nome do endpoint do índice.
    7. Clique em Executar para ver os detalhes. Anote o endpoint em relação ao rótulo Host.

  2. Crie um destino RFC para o endpoint do índice:

    1. Na GUI do SAP, execute o código de transação SM59.

    2. Crie um novo destino de RFC. Para o destino RFC que você criou, verifique se o Tipo de conexão está definido da seguinte maneira: G - HTTP connection to external server.

    3. Acesse a guia Configurações técnicas e insira os seguintes detalhes:

      • Host de destino: informe o nome do host do endpoint do índice.

      • Número do serviço: Insira 443. Esse número de porta é usado para comunicação segura.

    4. Acesse a guia Logon único e segurança e verifique se o campo Certificado SSL está definido com a opção Cliente SSL PADRÃO (padrão).

    5. Salve as alterações.

  3. Configure a tabela de mapeamento de serviço para a API Vertex AI:

    1. Na GUI do SAP, execute o código de transação /GOOG/SDK_IMG.

      Como alternativa, execute o código da transação SPRO e clique em IMG de referência do SAP.

    2. Clique em ABAP SDK for Google Cloud > Configurações básicas > Configurar mapeamento de serviços.

    3. Clique em Novas entradas.

    4. Especifique o destino RFC para a API Vertex AI:

      Nome Nome do serviço Destino do RFC
      Chave de cliente para autenticação. apiinvoker:v1 Nome do destino RFC.
    5. Salve a nova entrada.

Para invocar a Pesquisa Vetorial, você pode instanciar a classe /GOOG/CL_VECTOR_SEARCH. Você instancia a classe transmitindo a chave de pesquisa, que é configurada nos parâmetros de pesquisa de vetor.

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

Substitua SEARCH_KEY pela chave de pesquisa, que é configurada nos parâmetros da pesquisa de vetor.

Pesquisar usando um ID de entidade

Para consultar um índice de vetor em relação a um ID de entidade específico, use o método FIND_NEIGHBORS_BY_ENTITY_ID da classe /GOOG/CL_VECTOR_SEARCH. Os IDs de entidade correspondem aos pontos de dados armazenados no índice vetorial.

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' ).

Substitua:

  • ENTITY_ID: ID da entidade a ser pesquisada.
  • NEIGHBOR_COUNT: número de vizinhos mais próximos a serem recuperados para a consulta.
  • RETURN_FULL_DATAPOINT: para retornar as embeddings de vetor dos pontos de dados recuperados, defina o valor desse parâmetro como ABAP_TRUE.

Pesquisar usando uma string de pesquisa

Para consultar um índice vetorial em relação a uma string de pesquisa, use o método FIND_NEIGHBORS_BY_STRING da classe /GOOG/CL_VECTOR_SEARCH.

O SDK primeiro converte sua string de pesquisa em embeddings e depois recupera os vizinhos mais próximos da 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' ).

Substitua:

  • SEARCH_STRING: string de pesquisa de entrada.
  • MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelos.
  • NEIGHBOR_COUNT: número de vizinhos mais próximos a serem recuperados para a consulta.
  • RETURN_FULL_DATAPOINT: para retornar as embeddings de vetor dos pontos de dados recuperados, defina o valor desse parâmetro como ABAP_TRUE.

Pesquisar usando um embedding

Para consultar um índice de vetor em relação a embeddings, use o método FIND_NEIGHBORS_BY_EMBEDDING da classe /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' ).

Substitua:

  • NEIGHBOR_COUNT: número de vizinhos mais próximos a serem recuperados para a consulta.
  • RETURN_FULL_DATAPOINT: para retornar as embeddings de vetor dos pontos de dados recuperados, defina o valor desse parâmetro como ABAP_TRUE.
  • EMBEDDINGS: embeddings de entrada.

Receber a resposta da pesquisa

Para receber respostas processadas do modelo e apresentá-las de uma maneira significativa, o SDK fornece a classe ABAP /GOOG/CL_VECTORSEARCH_RESPONSE.

A resposta capturada pela classe /GOOG/CL_VECTORSEARCH_RESPONSE é encadeada às solicitações feitas pelos métodos da classe /GOOG/CL_VECTOR_SEARCH, para que você possa acessar diretamente a resposta em uma única instrução sem precisar de variáveis para armazenar os resultados intermediários.

Encontrar os vizinhos mais próximos da consulta de pesquisa

Para determinar os vizinhos mais próximos encontrados para a consulta de pesquisa executada com relação a um ponto de dados, string de pesquisa ou incorporações, use os métodos GET_NEAREST_NEIGHBOR e GET_NEAREST_NEIGHBORS da classe /GOOG/CL_VECTORSEARCH_RESPONSE.

Esses métodos podem ser chamados em uma cadeia após a execução da consulta de pesquisa usando os métodos FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING e FIND_NEIGHBORS_BY_ENTITY_ID da classe /GOOG/CL_VECTOR_SEARCH.

  • Para encontrar o vizinho mais próximo do ponto de dados, da string ou dos embeddings pesquisados, chame o método GET_NEAREST_NEIGHBOR. A resposta desse método lista o ID do ponto de dados mais próximo, a distância dele da consulta de pesquisa e o vetor de características associado a ele no índice.

    O exemplo de código a seguir ilustra como encontrar o vizinho mais próximo de uma string de pesquisa:

    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( ).
    

    Substitua:

    • SEARCH_STRING: string de pesquisa de entrada.
    • MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelos.
    • NEIGHBOR_COUNT: número de vizinhos mais próximos a serem recuperados para a consulta.
    • RETURN_FULL_DATAPOINT: para retornar as embeddings de vetor dos pontos de dados recuperados, defina o valor desse parâmetro como ABAP_TRUE.
  • Para receber o conjunto de vizinhos mais próximos ao ponto de dados, string ou embeddings pesquisados, chame o método GET_NEAREST_NEIGHBORS. A resposta desse método é uma tabela dos pontos de dados mais próximos, que lista os IDs dos pontos de dados, a distância deles em relação à consulta de pesquisa e o vetor de recursos associado a eles no índice.

    O exemplo de código abaixo ilustra como receber os vizinhos mais próximos de uma string de pesquisa:

    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( ).
    

    Substitua:

    • SEARCH_STRING: string de pesquisa de entrada.
    • MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelos.
    • NEIGHBOR_COUNT: número de vizinhos mais próximos a serem recuperados para a consulta.
    • RETURN_FULL_DATAPOINT: para retornar as embeddings de vetor dos pontos de dados recuperados, defina o valor desse parâmetro como ABAP_TRUE.

Encontrar a distância do vizinho buscado

Para determinar a distância de uma resposta extraída da consulta pesquisada, use o método GET_DATAPOINT_DISTANCE da classe /GOOG/CL_VECTORSEARCH_RESPONSE.

A distância na resposta da pesquisa representa uma medida de dissimilaridade entre a consulta (string, embedding ou ID de entidade) e um vetor de resultados extraído. O significado específico da distância depende da "medida de distância" usada ao criar um índice.

O valor de distância ajuda a entender a relevância de cada resultado de pesquisa para a consulta. Os resultados com distâncias menores são geralmente considerados mais semelhantes ou relevantes, enquanto os com distâncias maiores são menos semelhantes ou relevantes.

O exemplo de código a seguir ilustra como receber a distância do vizinho mais próximo de uma string de pesquisa:

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

Substitua:

  • SEARCH_STRING: string de pesquisa de entrada.
  • MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelos.
  • NEIGHBOR_COUNT: número de vizinhos mais próximos a serem recuperados para a consulta.
  • RETURN_FULL_DATAPOINT: para retornar as embeddings de vetor dos pontos de dados recuperados, defina o valor desse parâmetro como ABAP_TRUE.

Conseguir o vetor de embeddings do vizinho buscado

Para determinar o vetor de embeddings da resposta extraída da consulta pesquisada, use o método GET_DATAPOINT_FEATURE_VECTOR da classe /GOOG/CL_VECTORSEARCH_RESPONSE.

Para receber um vetor de embeddings, o parâmetro IV_RETURN_FULL_DATAPOINT dos métodos FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING e FIND_NEIGHBORS_BY_ENTITY_ID precisa ser definido como ABAP_TRUE.

O exemplo de código abaixo ilustra como receber o vetor de recursos do vizinho mais próximo de uma string de pesquisa:

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

Substitua:

  • SEARCH_STRING: string de pesquisa de entrada.
  • MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelos.
  • NEIGHBOR_COUNT: número de vizinhos mais próximos a serem recuperados para a consulta.
  • RETURN_FULL_DATAPOINT: para retornar as embeddings de vetor dos pontos de dados recuperados, defina o valor desse parâmetro como ABAP_TRUE.

A seguir