Clasifica y vuelve a clasificar documentos con el formato RAG

Como parte de tu Generación aumentada de recuperación (RAG) en Vertex AI Agent Builder, puedes clasificar un conjunto de documentos según una consulta.

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. El de clasificación se puede usar para mejorar la calidad de los resultados de la búsqueda después 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 la búsqueda resultados.

Sin embargo, la API de clasificación puede ser valiosa para cualquier situación en la que necesites encontrar qué fragmentos de contenido son más relevantes para la consulta de un usuario. Por ejemplo, el Ranking API puede ayudarte a hacer 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 Vector Search 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:

  • La consulta para la cual 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 caracteres 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, muchas más registros se incluirían en el array y el contenido sería mucho por más tiempo:

    "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 devuelve el ID de registro, no el título ni contenido:

    "ignoreRecordDetailsInResponse": true,
    
  • El nombre del modelo (opcional) Esto especifica el modelo que se usará para clasificar la 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 último modelo 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."
        }
    ]
}

Clasificar (o volver a clasificar) un conjunto de registros de acuerdo con una consulta

Normalmente, proporcionarás a la API de clasificación una consulta y un conjunto de registros que son relevantes para esa consulta y que ya se clasificaron con algún otro método, como como una búsqueda por palabra clave o una búsqueda vectorial. Luego, usarás 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 a 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 de el título y el contenido superan los 512 tokens, el contenido extra se truncada.

  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: Es el ID de tu proyecto de Google Cloud.
  • QUERY: Es la consulta en la que se usan los registros. se clasifican y califican.
  • 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 API de Python de Vertex AI Agent Builder documentación de referencia.

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

Están disponibles los siguientes modelos:

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 lo siguiente: generar respuestas fundamentadas a partir de datos no estructurados.