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:
- Gerar representações de incorporação dos dados da empresa.
- Faça upload dos embeddings para um bucket do Cloud Storage.
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.
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.
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:
- Ativar a API Vertex AI no seu projeto do Google Cloud.
- Configure a autenticação para acessar a API Vertex AI.
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
ouSTREAM_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
(significa10%
).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 comoABAP_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 comoABAP_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 comoABAP_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
eREMOVE_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 comoABAP_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
(significa10%
).
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
(significa10%
).
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:
- Ativar a API Vertex AI no seu projeto do Google Cloud.
- Configure a autenticação para acessar a API Vertex AI.
- Configurou os parâmetros da pesquisa de vetor.
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.
Extraia o nome do host do endpoint do índice:
-
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. - 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.
- Selecione Conferir detalhes da pesquisa de vetor.
Selecione uma das seguintes opções:
- Tecla de pesquisa
- ID do endpoint do índice de vetor
Se você tiver selecionado a opção Chave de pesquisa, insira a chave de pesquisa, que é configurada nos parâmetros da pesquisa de vetor.
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.
Clique em Executar para ver os detalhes. Anote o endpoint em relação ao rótulo Host.
-
Na GUI do SAP, execute o código de transação
Crie um destino RFC para o endpoint do índice:
Na GUI do SAP, execute o código de transação
SM59
.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
.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.
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).
Salve as alterações.
Configure a tabela de mapeamento de serviço para a API Vertex AI:
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.Clique em ABAP SDK for Google Cloud > Configurações básicas > Configurar mapeamento de serviços.
Clique em Novas entradas.
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. Salve a nova entrada.
Criar uma instância da classe para a pesquisa de vetor
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 comoABAP_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 comoABAP_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 comoABAP_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 comoABAP_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 comoABAP_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 comoABAP_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 comoABAP_TRUE
.
A seguir
Saiba mais sobre a terminologia da pesquisa de vetor.
Saiba mais sobre o desenvolvimento de aplicativos com a edição local ou na nuvem do ABAP SDK for Google Cloud.
Faça suas perguntas e converse sobre o SDK da Vertex AI para ABAP com a comunidade nos Fóruns do Cloud.