Saiba como classificar e reclassificar os resultados da pesquisa para aplicações
usando modelos de classificação da Vertex AI, como semantic-ranker-default-003.
Pode usar a função ai.rank() para classificar documentos com base na relevância para uma consulta e melhorar os resultados da pesquisa vetorial reclassificando-os para uma melhor ordenação de consultas.
A API Vertex AI Ranking recebe uma lista de documentos e classifica-os com base na relevância dos documentos para uma determinada consulta (uma string de pesquisa). Quando usa a função ai.rank(), esta devolve pontuações que indicam o quão bem um documento responde a uma determinada consulta.
Para usar as instruções nesta página, tem de compreender o AlloyDB for PostgreSQL e estar familiarizado com os conceitos de IA generativa.
O AlloyDB reserva e cria o esquema ai.
Antes de começar
Antes de classificar os resultados da pesquisa, faça o seguinte:
- Verifique se a extensão
google_ml_integrationestá instalada. - Verifique se a flag
google_ml_integration.enable_model_supportestá definida comoon. - Integre com o Vertex AI.
- Ative a API Discovery Engine.
- Obtenha as funções necessárias para usar modelos de classificação.
Ative a API Discovery Engine
Consola
- Ative a API
- No passo Confirmar projeto, clique em Seguinte para confirmar o nome do projeto ao qual vai fazer alterações.
- No passo Ativar APIs, clique em Ativar para ativar a API Discovery Engine. Se já tiver ativado esta API, não a vê listada aqui.
gcloud
Para usar modelos de classificação, tem de ativar a API Discovery Engine.
Substitua PROJECT_ID pelo seu
Google Cloud ID do projeto e PROJECT_NUMBER
pelo número do projeto correspondente.
# Enable Discovery Engine API gcloud services enable discoveryengine.googleapis.com --project=PROJECT_ID gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com" \ --role="roles/discoveryengine.viewer"
O registo de modelos para classificação não é obrigatório para modelos da Vertex AI.
Pode usar o nome do modelo da Vertex AI como o
model_id, que é apresentado no exemplo seguinte.
SELECT index, score FROM ai.rank( model_id => 'semantic-ranker-default-003', search_string => 'Affordable family-friendly vacation spots in Southeast Asia?', documents => ARRAY[ 'Luxury resorts in South Korea', 'Family vacation packages for Vietnam: Ha Long Bay and Hoi An', 'Budget-friendly beaches in Thailand perfect for families', 'A backpacker guide to solo travel in India'])
Um exemplo de utilização comum do classificador semântico é reclassificar os resultados devolvidos pela pesquisa vetorial para uma melhor ordenação das consultas. O exemplo seguinte mostra como
usar o modelo de classificação semântica para este exemplo de utilização. O exemplo obtém um
conjunto de resultados inicial para a consulta personal fitness
equipment através da pesquisa vetorial. Em seguida, estes resultados são reclassificados para
devolver os cinco principais resultados.
WITH initial_ranking AS ( SELECT id, description, ROW_NUMBER() OVER () AS ref_number FROM product ORDER BY embedding <=> google_ml.embedding( 'gemini-embedding-001', 'personal fitness equipment')::vector LIMIT 10 ), reranked_results AS ( SELECT index, score FROM ai.rank( model_id => 'semantic-ranker-default-003', search_string => 'personal fitness equipment', documents => (SELECT ARRAY_AGG(description ORDER BY ref_number) FROM initial_ranking), top_n => 5) ) SELECT id, description FROM initial_ranking, reranked_results WHERE initial_ranking.ref_number = reranked_results.index ORDER BY reranked_results.score DESC;
Para ver uma lista dos modelos e exemplos de utilização disponíveis, consulte o artigo Modelos suportados.
Faça a integração com o Vertex AI e instale a extensão
- Configure o acesso dos utilizadores aos modelos do Vertex AI.
- Verifique se tem a versão mais recente do
google_ml_integrationinstalada.Para verificar a versão instalada, execute o seguinte comando:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
Se a extensão não estiver instalada ou se a versão instalada for anterior à 1.5.2, atualize a extensão.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Se tiver problemas quando executar os comandos anteriores ou se a extensão não for atualizada para a versão 1.5.2 depois de executar os comandos anteriores, contacte o Google Cloud apoio técnico.
Para usar a funcionalidade do motor de consultas de IA do AlloyDB, defina a flag
google_ml_integration.enable_ai_query_enginecomotrue.SQL
- Ative o motor de consultas de IA para a sessão atual.
SET google_ml_integration.enable_ai_query_engine = true;
- Ative funcionalidades para uma base de dados específica em várias sessões.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
- Ative o motor de consultas de IA para um utilizador específico em sessões e bases de dados.
ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
Consola
Para modificar o valor da flag
google_ml_integration.enable_ai_query_engine, siga os passos descritos em Configure as flags da base de dados de uma instância.gcloud
Para usar a CLI gcloud, pode instalar e inicializar a CLI Google Cloud ou usar a Cloud Shell.
Pode modificar o valor da flag
google_ml_integration.enable_ai_query_engine. Para mais informações, consulte o artigo Configure as flags da base de dados de uma instância.gcloud alloydb instances update INSTANCE_ID \ --database-flags google_ml_integration.enable_ai_query_engine=on \ --region=REGION_ID \ --cluster=CLUSTER_ID \ --project=PROJECT_ID
- Ative o motor de consultas de IA para a sessão atual.
Funções necessárias
Para obter as autorizações necessárias para usar modelos de classificação do Discovery Engine, peça ao seu administrador para lhe conceder a função de gestão de identidade e acesso (IAM) de visualizador do Discovery Engine (roles/discoveryengine.viewer) em your project. Para mais informações sobre a atribuição de funções, consulte o artigo
Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Classifique os resultados da pesquisa
A seguinte consulta SQL mostra como classificar os resultados da pesquisa :
SELECT
ai.rank(
model_id => 'MODEL_ID',
search_string => 'SEARCH_STRING',
documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);
Substitua o seguinte:
| Parâmetro | Descrição |
|---|---|
MODEL_ID |
Um ID exclusivo para o ponto final do modelo que definir. |
SEARCH_STRING |
Uma string de pesquisa com base na qual os registos são classificados. |
DOCUMENTS |
Uma string exclusiva que identifica o registo. |
Para ver uma lista dos modelos de classificação da Vertex AI suportados, consulte o artigo Modelos suportados.
Exemplos
Para classificar os resultados da pesquisa através de um modelo de classificação da Vertex AI, execute a seguinte consulta:
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-default-003',
search_string => 'AlloyDB is a PostgreSQL compatible AI database that is ready for production.',
documents =>
ARRAY[
'Alloys are made from combination of metals',
'The best enterprise-ready PostgreSQL database.',
'You can feel the heat in Alloy apartments.']);
A resposta é uma tabela que mostra cada documento e a pontuação com base na relevância para a consulta de pesquisa. Segue-se a resposta de exemplo:
index | score
-------+------------
2 | 0.33
1 | 0.28
3 | 0.16
(3 rows)
Considere uma base de dados do AlloyDB de exemplo com uma lista de descrições de críticas que são convertidas em incorporações. O seguinte fragmento de código de exemplo mostra como usar o modelo de classificação para obter o nome dos produtos com melhor classificação com base na similaridade semântica das respetivas descrições de críticas em relação a uma consulta.
WITH initial_ranking AS (
SELECT product_id, name, review, review_id, ROW_NUMBER() OVER () AS ref_number
FROM user_reviews
ORDER BY
review_desc_embedding <=> google_ml.embedding(
'gemini-embedding-001', 'good desserts')::vector
LIMIT 10
), reranked_results AS (
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-512',
search_string => 'good desserts',
documents => (SELECT ARRAY_AGG(review ORDER BY ref_number) FROM initial_ranking),
top_n => 5)
)
SELECT product_id, name
FROM initial_ranking, reranked_results
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC;