Mejorar la calidad de la búsqueda y de la generación aumentada por recuperación con la API Ranking

Como parte de tu experiencia de generación aumentada por recuperación (RAG) en aplicaciones de IA, puedes clasificar un conjunto de documentos en función de una consulta.

La API Ranking toma una lista de documentos y los vuelve a clasificar en función de su relevancia para una consulta. En comparación con las incrustaciones, que solo tienen en cuenta la similitud semántica de un documento y una consulta, la API de ranking puede proporcionarte puntuaciones precisas sobre la calidad con la que un documento responde a una consulta determinada. La API Ranking se puede usar para mejorar la calidad de los resultados de búsqueda después de recuperar un conjunto inicial de documentos candidatos.

La API de clasificación no tiene estado, por lo que no es necesario indexar documentos antes de llamar a la API. Solo tienes que enviar la consulta y los documentos. Por eso, la API es ideal para volver a clasificar documentos de la búsqueda vectorial y otras soluciones de búsqueda.

En esta página se describe cómo usar la API Ranking para clasificar un conjunto de documentos en función de una consulta.

Casos prácticos

El caso de uso principal de la API Ranking es mejorar la calidad de los resultados de búsqueda.

Sin embargo, la API Ranking puede ser útil en cualquier situación en la que necesites saber qué contenido es el más relevante para la consulta de un usuario. Por ejemplo, la API Ranking puede ayudarte en lo siguiente:

  • Encontrar el contenido adecuado para fundamentar un LLM

  • Mejorar la relevancia de una experiencia de búsqueda

  • Identificar las secciones relevantes de un documento

El siguiente flujo describe cómo puedes usar la API de ranking para mejorar la calidad de los resultados de los documentos divididos en fragmentos:

  1. Usa la API Layout Parser de Document AI para dividir un conjunto de documentos en fragmentos.

  2. Usa una API de inserciones para crear inserciones de cada uno de los fragmentos.

  3. Carga las inserciones en Vector Search u otra solución de búsqueda.

  4. Consulta tu índice de búsqueda y recupera los fragmentos más relevantes.

  5. Vuelve a clasificar los fragmentos relevantes mediante la API Ranking.

Datos de entrada

La API Ranking requiere las siguientes entradas:

  • La consulta para la que estás clasificando los registros.

    Por ejemplo:

    "query": "Why is the sky blue?"
    
  • Conjunto de registros relevantes para la consulta. Los registros se proporcionan como una matriz de objetos. Cada registro puede incluir un ID único, un título y el contenido del documento. En cada registro, incluye un título, contenido o ambos. El número máximo de tokens admitidos por registro depende de la versión del modelo que se esté usando. Por ejemplo, los modelos hasta la versión 003 admiten 512 tokens, mientras que la versión 004 admite 1024 tokens. Si la longitud combinada del título y el contenido supera el límite de tokens del modelo, el contenido adicional se trunca. Puede incluir hasta 200 registros por solicitud.

    Por ejemplo, un array de registros tiene un aspecto similar al siguiente. En realidad, se incluirían muchos más registros en la matriz y el contenido sería mucho más largo:

    "records": [
       {
           "id": "1",
           "title": "The Color of the Sky: A Poem",
           "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
       },
       {
           "id": "2",
           "title": "The Science of a Blue Sky",
           "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
       }
    ]
    
  • Opcional: número máximo de registros que quieres que devuelva la API Ranking. De forma predeterminada, se devuelven todos los registros. Sin embargo, puedes usar el campo topN para devolver menos registros. Todos los registros se clasifican independientemente del valor que se haya definido.

    Por ejemplo, esta consulta devuelve los 10 registros mejor clasificados:

    "topN": 10,
    
  • Opcional: un ajuste que especifica si quieres que la API devuelva solo el ID del registro o si también quieres que devuelva el título y el contenido del registro. De forma predeterminada, se devuelve el registro completo. El motivo principal para definir este valor es si quieres reducir el tamaño de la carga útil de la respuesta.

    Por ejemplo, si se define como true, solo se devuelve el ID del registro, no el título ni el contenido:

    "ignoreRecordDetailsInResponse": true,
    
  • Opcional: el nombre del modelo. Especifica el modelo que se usará para clasificar los documentos. Si no se especifica ningún modelo, se usa semantic-ranker-default@latest, que apunta automáticamente al modelo disponible más reciente. Para hacer referencia a un modelo específico, indica uno de los nombres de modelo que aparecen en Modelos admitidos, como semantic-ranker-512-003.

    En el siguiente ejemplo, model se ha definido como semantic-ranker-default@latest. Esto significa que la API Ranking siempre usará el modelo más reciente disponible.

    "model": "semantic-ranker-default@latest"
    

Datos de salida

La API Ranking devuelve una lista ordenada de registros con los siguientes resultados:

  • Puntuación: valor flotante entre 0 y 1 que indica la relevancia del registro.

  • ID: el ID único del registro.

  • Si se solicita, el objeto completo: el ID, el título y el contenido.

    Por ejemplo:

{
    "records": [
        {
            "id": "2",
            "score": 0.98,
            "title": "The Science of a Blue Sky",
            "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
        },
        {
            "id": "1",
            "score": 0.64,
            "title": "The Color of the Sky: A Poem",
            "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
        }
    ]
}

Clasifica (o reclasifica) un conjunto de registros según una consulta.

Normalmente, proporcionará a la API de ranking una consulta y un conjunto de registros que sean relevantes para esa consulta y que ya se hayan clasificado por algún otro método, como una búsqueda por palabras clave o una búsqueda vectorial. Después, usa la API Ranking para mejorar la calidad de la clasificación y determinar una puntuación que indique la relevancia de cada registro en relación con la consulta.

  1. Obtiene la consulta y los registros resultantes. Asegúrate de que cada registro tenga un ID y un título, contenido o ambos.

    El número máximo de tokens admitidos por registro depende de la versión del modelo. Los modelos hasta la versión 003, como semantic-ranker-512-003, admiten 512 tokens por registro. A partir de la versión 004, este límite se amplía a 1024 tokens. Si la longitud combinada del título y el contenido supera el límite de tokens del modelo, el contenido adicional se trunca.

  2. Llama al método rankingConfigs.rank con el siguiente código:

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
"https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/rankingConfigs/default_ranking_config:rank" \
-d '{
"model": "semantic-ranker-default@latest",
"query": "QUERY",
"records": [
    {
        "id": "RECORD_ID_1",
        "title": "TITLE_1",
        "content": "CONTENT_1"
    },
    {
        "id": "RECORD_ID_2",
        "title": "TITLE_2",
        "content": "CONTENT_2"
    },
    {
        "id": "RECORD_ID_3",
        "title": "TITLE_3",
        "content": "CONTENT_3"
    }
]
}'

Haz los cambios siguientes:

  • PROJECT_ID: el ID de tu Google Cloud proyecto.
  • QUERY: la consulta con la que se clasifican y puntúan los registros.
  • RECORD_ID_n: cadena única que identifica el registro.
  • TITLE_n: el título del registro.
  • CONTENT_n: el contenido del registro.

Para obtener información general sobre este método, consulta rankingConfigs.rank.

Haz clic para ver un ejemplo de comando curl y de respuesta.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: my-project-123" \
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/rankingConfigs/default_ranking_config:rank" \
    -d '{
        "model": "semantic-ranker-default@latest",
        "query": "what is Google gemini?",
        "records": [
            {
                "id": "1",
                "title": "Gemini",
                "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side."
            },
            {
                "id": "2",
                "title": "Gemini",
                "content": "Gemini is a cutting edge large language model created by Google."
            },
            {
                "id": "3",
                "title": "Gemini Constellation",
                "content": "Gemini is a constellation that can be seen in the night sky."
            }
        ]
    }'
    
{
    "records": [
        {
            "id": "2",
            "title": "Gemini",
            "content": "Gemini is a cutting edge large language model created by Google.",
            "score": 0.97
        },
        {
            "id": "3",
            "title": "Gemini Constellation",
            "content": "Gemini is a constellation that can be seen in the night sky.",
            "score": 0.18
        },
        {
            "id": "1",
            "title": "Gemini",
            "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side.",
            "score": 0.05
        }
    ]
}

Python

Para obtener más información, consulta la documentación de referencia de la API AI Applications Python.

Para autenticarte en las aplicaciones de IA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"

client = discoveryengine.RankServiceClient()

# The full resource name of the ranking config.
# Format: projects/{project_id}/locations/{location}/rankingConfigs/default_ranking_config
ranking_config = client.ranking_config_path(
    project=project_id,
    location="global",
    ranking_config="default_ranking_config",
)
request = discoveryengine.RankRequest(
    ranking_config=ranking_config,
    model="semantic-ranker-default@latest",
    top_n=10,
    query="What is Google Gemini?",
    records=[
        discoveryengine.RankingRecord(
            id="1",
            title="Gemini",
            content="The Gemini zodiac symbol often depicts two figures standing side-by-side.",
        ),
        discoveryengine.RankingRecord(
            id="2",
            title="Gemini",
            content="Gemini is a cutting edge large language model created by Google.",
        ),
        discoveryengine.RankingRecord(
            id="3",
            title="Gemini Constellation",
            content="Gemini is a constellation that can be seen in the night sky.",
        ),
    ],
)

response = client.rank(request=request)

# Handle the response
print(response)

Modelos admitidos

Están disponibles los siguientes modelos.

Nombre del modelo Modelo más reciente (semantic-ranker-default@latest) Entrada Ventana de contexto Fecha de lanzamiento Fecha de retirada
semantic-ranker-default-004 Texto (25 idiomas) 1024 9 de abril del 2025 Por determinar
semantic-ranker-fast-004 No Texto (25 idiomas) 1024 9 de abril del 2025 Por determinar
semantic-ranker-default-003 No Texto (25 idiomas) 512 10 de septiembre del 2024 Por determinar
semantic-ranker-default-002 No Texto (solo en inglés) 512 3 de junio del 2024 Por determinar

Siguientes pasos

Descubre cómo usar el método de clasificación con otras APIs de RAG para generar respuestas fundamentadas a partir de datos no estructurados.