Realizar uma pesquisa vetorial no BigQuery

O SDK de IA e ML do BigQuery para ABAP permite realizar a pesquisa vetorial nos seus dados corporativos vetorizados no BigQuery usando strings de pesquisa baseadas em linguagem natural e exibir os resultados dos agentes ou aplicativos baseados em ABAP.

Com a pesquisa vetorial do BigQuery, você pode usar o GoogleSQL para fazer pesquisas semânticas usando índices vetoriais para resultados aproximados. Com a pesquisa de vetor, é possível encontrar pontos de dados semanticamente semelhantes em grandes conjuntos de dados usando vetores ou embeddings de alta dimensão. É possível armazenar as inclusões de vetor no BigQuery, tornando-o seu banco de dados de vetores e aplicando a pesquisa de similaridade vetorial nele usando a função VECTOR_SEARCH do BigQuery.

Antes de começar

Antes de usar o SDK de IA e ML do BigQuery para ABAP com os modelos Gemini, verifique se você ou seus administradores concluíram os seguintes pré-requisitos:

Preços

O SDK de IA e ML do BigQuery para ABAP é oferecido sem custos financeiros. No entanto, você é responsável pelas cobranças da instrução CREATE VECTOR INDEX e da função VECTOR_SEARCH, que usam os preços de computação do BigQuery.

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.

Para mais informações sobre os preços do BigQuery, consulte a página Preços do BigQuery.

Realizar pesquisa vetorial no BigQuery

Esta seção explica como realizar a pesquisa semântica de vetor nos dados corporativos armazenados no BigQuery do seu aplicativo ABAP usando o SDK de IA e ML do BigQuery para ABAP.

Instancie a classe de invocação da pesquisa vetorial do BigQuery

Para realizar uma pesquisa vetorial usando uma string de pesquisa, instancie a classe /GOOG/CL_BQ_VECTOR_SEARCH.

TRY.
    DATA(lo_bq_vector_search) = NEW /goog/cl_bq_vector_search( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Substitua CLIENT_KEY pela chave do cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.

Encontrar itens semelhantes para uma string de pesquisa

Para executar consultas para fazer uma pesquisa vetorial com a função VECTOR_SEARCH do BigQuery, use o método FIND_NEAREST_NEIGHBORS da classe /GOOG/CL_BQ_VECTOR_SEARCH.

O objeto da classe /GOOG/CL_BQ_QUERY definido com a consulta é transmitido como uma entrada para o método.

lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query ).

LO_BQ_QUERY é a referência da classe /GOOG/CL_BQ_QUERY após definir a consulta. É possível transmitir a string de pesquisa do texto da consulta.

Modificar os parâmetros de pesquisa de vetor

É possível definir parâmetros de pesquisa vetorial (nas definições de função VECTOR_SEARCH) na consulta salva no BigQuery ou no texto de consulta transmitido. No entanto, se você precisar substituir os parâmetros da mesma consulta da lógica do aplicativo ABAP, use o método SET_SEARCH_PARAMETERS da classe /GOOG/CL_BQ_VECTOR_SEARCH para fazer isso. Os parâmetros de pesquisa na consulta inicial são substituídos completamente pelos parâmetros transmitidos por esse método.

lo_bq_vector_search->set_search_parameters( iv_top_k            = TOP_K
    iv_distance_type            = DISTANCE_TYPE
    iv_fraction_lists_to_search = 'FRACTION_LISTS_TO_SEARCH' ).

Substitua:

  • TOP_K: um valor INT64 que especifica o número de vizinhos mais próximos a serem retornados.
  • DISTANCE_TYPE: um valor de string que especifica o tipo de métrica a ser usado para calcular a distância entre dois vetores. Procure valores prováveis do argumento DISTANCE_TYPE nas definições da função VECTOR_SEARCH.
  • FRACTION_LISTS_TO_SEARCH: um valor de string que especifica a porcentagem de listas a serem pesquisadas. Procure valores prováveis do argumento FRACTION_LISTS_TO_SEARCH nas opções de definição da função VECTOR_SEARCH.

Receber a resposta da pesquisa vetorial

Para receber respostas processadas do BigQuery ML para consultas de pesquisa vetorial e apresentá-las de maneira significativa, use a classe /GOOG/CL_BQ_SEARCH_RESPONSE.

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

Conseguir vizinhos mais próximos para a string de pesquisa

Para encontrar os vizinhos mais próximos da string de pesquisa, use o método GET_NEAREST_NEIGHBORS. O número de vizinhos retornados depende do valor especificado ou definido no parâmetro TOP_K da função VECTOR_SEARCH na consulta invocada.

DATA(lt_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbors( ).

LT_SEARCH_RESPONSE também contém a distância do item da resposta da pesquisa da string de pesquisa para indicar o grau de similaridade.

Encontrar o vizinho mais próximo da string de pesquisa

Para encontrar o vizinho mais próximo da string de pesquisa, use o método GET_NEAREST_NEIGHBOR. Com isso, apenas o vizinho mais próximo é buscado em relação à string de pesquisa, independentemente do valor especificado ou definido no parâmetro TOP_K da função VECTOR_SEARCH na consulta invocada.

DATA(ls_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbor( ).

LS_SEARCH_RESPONSE também contém a distância da resposta da pesquisa em relação à string de pesquisa para indicar o grau de similaridade.