Clasifica y vuelve a clasificar documentos con RAG

Como parte de tu experiencia de generación aumentada de recuperación (RAG) en Vertex AI Agent Builder, puedes clasificar un conjunto de documentos en función de una búsqueda.

La API de clasificación toma una lista de documentos y vuelve a clasificarlos según su relevancia para una consulta. En comparación con las incorporaciones, que solo analizan la similitud semántica de un documento y una consulta, la API de clasificación puede brindarte puntuaciones precisas sobre qué tan bien un documento responde una consulta determinada. La API de clasificación se puede usar para mejorar la calidad de los resultados de la 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 debes pasar la consulta y los documentos. Esto hace que la API sea adecuada 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 de clasificación para clasificar un conjunto de documentos según una consulta.

Casos de uso

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

Sin embargo, la API de clasificación puede ser valiosa en cualquier situación en la que necesites encontrar el contenido más relevante para la búsqueda de un usuario. Por ejemplo, la API de clasificación puede ayudarte con lo siguiente:

  • Cómo encontrar el contenido adecuado para proporcionar a un LLM para la puesta a tierra

  • Mejora la relevancia de una experiencia de búsqueda existente

  • Identificar las secciones relevantes de un documento

En el siguiente flujo, se describe cómo puedes usar la API de clasificación para mejorar la calidad de los resultados de los documentos divididos en fragmentos:

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

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

  3. Carga las incorporaciones en la Búsqueda de Vectores o en 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 con la API de clasificación.

Datos de entrada

La API de clasificación requiere las siguientes entradas:

  • Es la consulta para la que clasificas los registros.

    Por ejemplo:

    "query": "Why is the sky blue?"
    
  • Es un conjunto de registros relevantes para la consulta. Los registros se proporcionan como un array de objetos. Cada registro puede incluir un ID único, un título y el contenido del documento. Para cada registro, incluye un título, contenido o ambos. Si la longitud del título y el contenido juntos superan los 512 tokens, el contenido adicional se trunca. Puedes incluir hasta 200 registros por solicitud.

    Por ejemplo, un array de registros se ve de la siguiente manera. En realidad, se incluirían muchos más registros en el array 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: Es la cantidad máxima de registros que deseas que muestre la API de clasificación. De forma predeterminada, se muestran todos los registros. Sin embargo, puedes usar el campotopN para mostrar menos registros. Todos los registros se clasifican independientemente del valor que se establezca.

    Por ejemplo, esto muestra los 10 registros mejor clasificados:

    "topN": 10,
    
  • Opcional: Es un parámetro de configuración que especifica si deseas solo el ID del registro que muestra la API o si también quieres que se muestren el título y el contenido del registro. De forma predeterminada, se muestra el registro completo. El motivo principal para configurar esto es si deseas reducir el tamaño de la carga útil de la respuesta.

    Por ejemplo, si se establece en true, solo se muestra el ID del registro, no el título ni el contenido:

    "ignoreRecordDetailsInResponse": true,
    
  • Opcional: El nombre del modelo. Esto especifica el modelo que se usará para clasificar los documentos. Si no se especifica ningún modelo, se usa semantic-ranker-512@latest, que apunta automáticamente al modelo más reciente disponible. Para apuntar a un modelo específico, especifica uno de los nombres de los modelos que se indican en Modelos compatibles, por ejemplo, semantic-ranker-512-002.

    En el siguiente ejemplo, model se establece en semantic-ranker-512@latest. Esto significa que la API de clasificación siempre usará el modelo más reciente disponible.

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

Datos de salida

La API de clasificación muestra una lista de registros clasificados con los siguientes resultados:

  • Puntuación: Es un valor de punto 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 vuelve a clasificar) un conjunto de registros según una consulta

Por lo general, le proporcionas a la API de clasificación una búsqueda y un conjunto de registros que son relevantes para esa búsqueda y que ya se clasificaron con algún otro método, como una búsqueda de palabras clave o una búsqueda vectorial. Luego, usa la API de clasificación para mejorar la calidad de la clasificación y determinar una puntuación que indique la relevancia de cada registro para la consulta.

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

    El modelo admite hasta 512 tokens por registro. Si la longitud combinada del título y el contenido es superior a 512 tokens, 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-512@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"
    }
]
}'

Reemplaza lo siguiente:

  • PROJECT_ID: El ID de tu proyecto de Google Cloud.
  • QUERY: Es la consulta en función de la cual se clasifican y puntúan los registros.
  • RECORD_ID_n: Es una cadena única que identifica el registro.
  • TITLE_n: Es 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 y respuesta de curl.

    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-512@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 de Python del compilador de agentes de Vertex AI.

Para autenticarte en Vertex AI Agent Builder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para 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-512@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 compatibles

Los siguientes modelos están disponibles.

Nombre del modelo Modelo más reciente (semantic-ranker-512@latest) Entrada Ventana de contexto Fecha de lanzamiento Fecha de descontinuación
semantic-ranker-512-003 Texto (25 idiomas) 512 10 de septiembre de 2024 Sin establecer
semantic-ranker-512-002 No Texto (solo en inglés) 512 3 de junio de 2024 Sin establecer

¿Qué sigue?

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