Classifique e reclassifique documentos com o RAG

Como parte da sua experiência de Geração Aumentada de Recuperação (RAG, na sigla em inglês) no Vertex AI Agent Builder, é possível classificar um conjunto de documentos com base em uma consulta.

A API de classificação pega uma lista de documentos e reclassifica esses documentos com base sobre a relevância dos documentos para uma consulta. Em comparação com os embeddings, que consideram apenas a semelhança semântica de um documento e uma consulta, a API de classificação pode fornecer pontuações precisas sobre a capacidade de um documento responder a uma determinada consulta. O API de classificação pode ser usada para melhorar a qualidade dos resultados da pesquisa após recuperando um conjunto inicial de documentos candidatos.

A API de classificação não tem estado, então não é necessário indexar documentos antes de chamar a API. Basta transmitir a consulta e os documentos. Isso torna a API adequada para reclassificar documentos da pesquisa vetorial e de outras soluções de pesquisa.

Esta página descreve como usar a API de classificação para classificar um conjunto de documentos com base em uma consulta.

Casos de uso

O principal caso de uso da API de classificação é melhorar a qualidade da pesquisa resultados.

No entanto, a API de classificação pode ser útil em qualquer cenário em que você precise quais partes do conteúdo são mais relevantes para a consulta do usuário. Por exemplo, a API de classificação pode ajudar você a:

  • Como encontrar o conteúdo certo para dar a um LLM para fundamentação

  • Melhorar a relevância de uma experiência de pesquisa atual

  • Identificar seções relevantes de um documento

O fluxo a seguir descreve como usar a API de classificação para melhorar a qualidade dos resultados de documentos fragmentados:

  1. Use a API Document AI Layout Parser para dividir um conjunto de documentos em blocos.

  2. Usar uma API de embeddings para criar embeddings para cada um dos blocos.

  3. Carregue os embeddings na Pesquisa de vetor ou em outra solução de pesquisa.

  4. Consultar seu índice de pesquisa e recuperar os blocos mais relevantes.

  5. Reclassifique os blocos relevantes usando a API de classificação.

Dados de entrada

A API de classificação requer as seguintes entradas:

  • A consulta para a qual você está classificando os registros.

    Exemplo:

    "query": "Why is the sky blue?"
    
  • Um conjunto de registros relevantes para a consulta. Os registros são fornecidos uma matriz de objetos. Cada registro pode incluir um ID exclusivo, um título e o conteúdo do documento. Para cada registro, inclua um título, conteúdo ou ambos. Se o comprimento do título e do conteúdo juntos excederem 512 tokens, o conteúdo adicional será truncado. É possível incluir até 200 de registros por solicitação.

    Por exemplo, uma matriz de registros é mais ou menos assim. Na realidade, muitos mais registros seriam incluídos na matriz e o conteúdo seria muito mais longos:

    "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: o número máximo de registros que você quer que a API de classificação voltar. Por padrão, todos os registros são retornados. No entanto, você pode usar o campo topN para retornar menos registros. Todos os registros são classificados é definido.

    Por exemplo, isso retorna os 10 registros mais bem classificados:

    "topN": 10,
    
  • Opcional: uma configuração que especifica se você quer apenas o ID do registro retornado pela API ou se quiser que o título e o conteúdo do registro sejam retornados como muito bem. Por padrão, o registro completo é retornado. O principal motivo para definir isso é se quiser reduzir o tamanho do payload da resposta.

    Por exemplo, definir como true retorna apenas o ID do registro, não o título ou o conteúdo:

    "ignoreRecordDetailsInResponse": true,
    
  • Opcional: o nome do modelo. Isso especifica o modelo a ser usado para classificar documentos. Se nenhum modelo for especificado, semantic-ranker-512@latest será usado, o que aponta automaticamente para o modelo mais recente disponível. Para apontar para um modelo específico, especifique um dos nomes de modelo listados em Modelos compatíveis, por exemplo, semantic-ranker-512-002.

    No exemplo abaixo, model é definido como semantic-ranker-512@latest. Isso significa que a API de classificação sempre vai usar o modelo mais recente disponível.

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

Dados de saída

A API de classificação retorna uma lista classificada de registros com as seguintes saídas:

  • Pontuação: um valor flutuante entre 0 e 1 que indica a relevância do registro.

  • ID: o ID exclusivo do registro.

  • Se solicitado, o objeto completo: o ID, título e conteúdo.

    Exemplo:

{
    "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."
        }
    ]
}

Classificar (ou reclassificar) um conjunto de registros de acordo com uma consulta

Normalmente, você fornece à API de classificação uma consulta e um conjunto de registros relevantes para essa consulta e que já foram classificados por algum outro método, como como uma pesquisa por palavra-chave ou por vetor. Em seguida, use a API de classificação para melhorar a qualidade da classificação e determinar uma pontuação que indique a relevância de cada registro para a consulta.

  1. Receba a consulta e os registros resultantes. Verifique se cada registro tem um ID um título, conteúdo ou ambos.

    O modelo aceita até 512 tokens por registro. Se o comprimento combinado o título e o conteúdo tiver mais de 512 tokens, o conteúdo extra será truncados.

  2. Chame o método rankingConfigs.rank usando este 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"
    }
]
}'

Substitua:

  • PROJECT_ID: o ID do seu projeto do Google Cloud.
  • QUERY: a consulta usada pelos registros. são classificados e pontuados.
  • RECORD_ID_n: uma string única que identifica o registro.
  • TITLE_n: o título do registro.
  • CONTENT_n: o conteúdo do registro.

Para informações gerais sobre esse método, consulte rankingConfigs.rank.

Clique para conferir um exemplo de comando curl e uma resposta.

    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 mais informações, consulte a API Vertex AI Agent Builder Python documentação de referência.

Para autenticar no Vertex AI Agent Builder, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import discoveryengine_v1alpha 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 compatíveis

Os seguintes modelos estão disponíveis.

Nome do modelo Modelo mais recente (semantic-ranker-512@latest) Entrada Janela de contexto Data de lançamento Data de desativação
semantic-ranker-512-003 Sim Texto (25 idiomas) 512 10 de setembro de 2024 A ser determinado
semantic-ranker-512-002 Não Texto (somente em inglês) 512 3 de junho de 2024 A ser determinado

A seguir

Aprenda a usar o método de classificação com outras APIs de RAG para gerar respostas com embasamento a partir de dados não estruturados.