Consulta cómo clasificar y reclasificar los resultados de búsqueda de aplicaciones con modelos de clasificación de Vertex AI, como semantic-ranker-default-003
.
Puedes usar la función ai.rank()
para puntuar documentos en función de su relevancia con respecto a una consulta y mejorar los resultados de búsqueda vectorial reordenándolos para que la consulta sea más precisa.
La API de clasificación de Vertex AI toma una lista de documentos y los clasifica en función de su relevancia para una consulta determinada (una cadena de búsqueda). Cuando usas la función ai.rank()
, devuelve puntuaciones sobre la calidad de las respuestas de un documento a una consulta determinada.
Para seguir las instrucciones de esta página, debes conocer AlloyDB para PostgreSQL y los conceptos de IA generativa.
AlloyDB reserva y crea el esquema ai
.
Antes de empezar
Antes de clasificar los resultados de búsqueda, haz lo siguiente:
- Comprueba que la extensión
google_ml_integration
esté instalada. - Verifica que la marca
google_ml_integration.enable_model_support
esté definida comoon
. - Integración con Vertex AI.
- Habilita la API Discovery Engine.
- Obtener los roles necesarios para usar modelos de clasificación
Habilita la API Discovery Engine
Consola
- Activar la API
- En el paso Confirmar proyecto, haz clic en Siguiente para confirmar el nombre del proyecto que vas a modificar.
- En el paso Habilitar APIs, haz clic en Habilitar para habilitar la API Discovery Engine. Si ya has habilitado esta API, no aparecerá en la lista.
gcloud
Para usar modelos de clasificación, debes habilitar la API Discovery Engine.
Sustituye PROJECT_ID
por el ID de tu
Google Cloud proyecto y PROJECT_NUMBER
por el número de proyecto correspondiente.
# 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"
No es necesario registrar los modelos de Vertex AI para la clasificación.
Puedes usar el nombre del modelo de Vertex AI como model_id
, tal como se muestra en el siguiente ejemplo.
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'])
Un caso de uso habitual del clasificador semántico es reclasificar los resultados devueltos por la búsqueda de vectores para mejorar el orden de las consultas. En el siguiente ejemplo se muestra cómo usar el modelo de ranking semántico en este caso práctico. En el ejemplo se obtiene un conjunto de resultados inicial para la consulta personal fitness
equipment
mediante la búsqueda vectorial. Después, estos resultados se vuelven a clasificar para devolver los cinco primeros.
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 una lista de los modelos y casos prácticos disponibles, consulta Modelos admitidos.
Integrar con Vertex AI e instalar la extensión
- Integración con Vertex AI.
- Asegúrate de que esté instalada la versión más reciente de
google_ml_integration
.Para comprobar la versión instalada, ejecuta el siguiente comando:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.3 (1 row)
Si la extensión no está instalada o la versión instalada es anterior a la 1.4.3, actualízala ejecutando los siguientes comandos:
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Si tienes problemas al ejecutar los comandos anteriores o si la extensión no se actualiza a la versión 1.4.3 después de ejecutar los comandos anteriores, ponte en contacto con el equipo de Asistencia de AlloyDB.
Una vez que te hayas asegurado de que la versión está actualizada, instala la función de vista previa ejecutando el procedimiento
upgrade_to_preview_version
:CALL google_ml.upgrade_to_preview_version(); SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.4 (1 row)
Roles obligatorios
Para obtener los permisos que necesitas para usar modelos de clasificación de Discovery Engine, pide a tu administrador que te conceda el rol de gestión de identidades y accesos (IAM) de lector de Discovery Engine (roles/discoveryengine.viewer
) en your project
. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Clasificar los resultados de búsqueda
La siguiente consulta SQL muestra cómo clasificar los resultados de búsqueda :
.SELECT
ai.rank(
model_id => 'MODEL_ID',
search_string => 'SEARCH_STRING',
documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);
Haz los cambios siguientes:
Parámetro | Descripción |
---|---|
MODEL_ID |
Un ID único que definas para el endpoint del modelo. |
SEARCH_STRING |
Cadena de búsqueda con la que se clasifican los registros. |
DOCUMENTS |
Cadena única que identifica el registro. |
Para ver una lista de los modelos de ranking de Vertex AI admitidos, consulta Modelos admitidos.
Ejemplos
Para clasificar los resultados de búsqueda con un modelo de clasificación de Vertex AI, ejecuta la siguiente 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.']);
La respuesta es una tabla que muestra cada documento y la puntuación basada en la relevancia de la consulta de búsqueda. A continuación se muestra la respuesta de ejemplo:
index | score
-------+------------
2 | 0.33
1 | 0.28
3 | 0.16
(3 rows)
Supongamos que tienes una base de datos de AlloyDB con una lista de descripciones de reseñas que se convierten en embeddings. El siguiente fragmento de código de ejemplo muestra cómo usar el modelo de clasificación para obtener el nombre de los productos mejor clasificados en función de la similitud semántica de sus descripciones de reseñas con una 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;