Classifica e riclassifica i documenti con RAG

Nell'ambito della tua esperienza di Retrieval Augmented Generation (RAG) in Vertex AI Agent Builder, puoi assegnare un ranking a un insieme di documenti in base a una query.

L'API di ranking prende un elenco di documenti e li riassegna in base al loro grado di pertinenza per una query. Rispetto agli embedding, che esaminano solo la somiglianza semantica di un documento e di una query, l'API di ranking può fornire punteggi precisi sull'efficacia con cui un documento risponde a una determinata query. L'API ranking può essere utilizzata per migliorare la qualità dei risultati di ricerca dopo aver recuperato un insieme iniziale di documenti candidati.

L'API di ranking è stateless, quindi non è necessario indicizzare i documenti prima di chiamare l'API. Devi solo passare la query e i documenti. Ciò rende l'API particolarmente adatta per il ricalcolo del ranking dei documenti di Vector Search e di altre soluzioni di ricerca.

Questa pagina descrive come utilizzare l'API di ranking per assegnare un ranking a un insieme di documenti in base a una query.

Casi d'uso

Il caso d'uso principale dell'API di ranking è migliorare la qualità dei risultati di ricerca.

Tuttavia, l'API di ranking può essere utile per qualsiasi scenario in cui devi trovare i contenuti più pertinenti alla query di un utente. Ad esempio, l'API ranking può aiutarti a:

  • Trovare i contenuti giusti da fornire a un LLM per l'impianto a terra

  • Migliorare la pertinenza di un'esperienza di ricerca esistente

  • Identificazione delle sezioni pertinenti di un documento

Il seguente flusso illustra come utilizzare l'API di ranking per migliorare la qualità dei risultati per i documenti suddivisi in blocchi:

  1. Utilizza l'API Document AI Layout Parser per suddividere un insieme di documenti in chunk.

  2. Utilizza un'API di embedding per creare embedding per ogni chunk.

  3. Carica gli embedding in Vector Search o in un'altra soluzione di ricerca.

  4. Esegui query sull'indice di ricerca e recupera i chunk più pertinenti.

  5. Riordina i chunk pertinenti utilizzando l'API di ranking.

Dati di input

L'API di ranking richiede i seguenti input:

  • La query per la quale stai assegnando il ranking ai record.

    Ad esempio:

    "query": "Why is the sky blue?"
    
  • Un insieme di record pertinenti alla query. I record vengono forniti come un array di oggetti. Ogni record può includere un ID univoco, un titolo e i contenuti del documento. Per ogni record, includi un titolo, i contenuti o entrambi. Se la lunghezza del titolo e dei contenuti supera i 512 token, i contenuti aggiuntivi vengono troncati. Puoi includere fino a 200 record per richiesta.

    Ad esempio, un array di record ha il seguente aspetto. In realtà, nell'array verrebbero inclusi molti altri record e i contenuti sarebbero molto più lunghi:

    "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."
       }
    ]
    
  • (Facoltativo) Il numero massimo di record che vuoi che l'API di ranking restituisca. Per impostazione predefinita, vengono restituiti tutti i record, ma puoi utilizzare il campotopN per restituirne meno. Tutti i record vengono classificati indipendentemente dal valore impostato.

    Ad esempio, restituisce i 10 record con il ranking più alto:

    "topN": 10,
    
  • (Facoltativo) Un'impostazione che specifica se vuoi solo l'ID del record restituito dall'API o se vuoi anche il titolo e i contenuti del record. Per impostazione predefinita, viene restituito il record completo. Il motivo principale per impostarlo è se vuoi ridurre le dimensioni del payload della risposta.

    Ad esempio, l'impostazione su true restituisce solo l'ID record, non il titolo o i contenuti:

    "ignoreRecordDetailsInResponse": true,
    
  • (Facoltativo) Il nome del modello. Questo specifica il modello da utilizzare per il ranking dei documenti. Se non viene specificato alcun modello, viene utilizzato semantic-ranker-512@latest, che rimanda automaticamente all'ultimo modello disponibile. Per fare riferimento a un modello specifico, specifica uno dei nomi di modello elencati in Modelli supportati, ad esempio semantic-ranker-512-002.

    Nell'esempio seguente, model è impostato su semantic-ranker-512@latest. Ciò significa che l'API di ranking utilizzerà sempre il modello più recente disponibile.

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

Dati di output

L'API ranking restituisce un elenco classificato di record con i seguenti output:

  • Punteggio: un valore float compreso tra 0 e 1 che indica la pertinenza della registrazione.

  • ID: l'ID univoco del record.

  • Se richiesto, l'oggetto completo: ID, titolo e contenuti.

    Ad esempio:

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

Assegnare un ranking (o un nuovo ranking) a un insieme di record in base a una query

In genere, fornisci all'API di ranking una query e un insieme di record pertinenti per la query e che sono già stati classificati con un altro metodo, ad esempio una ricerca per parole chiave o una ricerca di vettori. Poi, utilizza l'API di ranking per migliorare la qualità del ranking e determinare un punteggio che indichi la pertinenza di ogni record alla query.

  1. Ottieni la query e i record risultanti. Assicurati che ogni record abbia un ID e un titolo, dei contenuti o entrambi.

    Il modello supporta fino a 512 token per record. Se la lunghezza combinata del titolo e dei contenuti è superiore a 512 token, i contenuti extra vengono troncati.

  2. Chiama il metodo rankingConfigs.rank utilizzando il seguente codice:

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"
    }
]
}'

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud.
  • QUERY: la query in base alla quale vengono assegnati il ranking e il punteggio ai record.
  • RECORD_ID_n: una stringa univoca che identifica il record.
  • TITLE_n: il titolo della registrazione.
  • CONTENT_n: i contenuti del record.

Per informazioni generali su questo metodo, consulta rankingConfigs.rank.

Fai clic per un esempio di comando e risposta 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

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python Vertex AI Agent Builder.

Per autenticarti in Vertex AI Agent Builder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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)

Modelli supportati

Sono disponibili i seguenti modelli.

Nome modello Modello più recente (semantic-ranker-512@latest) Input Finestra di contesto Data di uscita Data di ritiro
semantic-ranker-512-003 Testo (25 lingue) 512 10 settembre 2024 Da stabilire
semantic-ranker-512-002 No Testo (solo in inglese) 512 3 giugno 2024 Da stabilire

Passaggi successivi

Scopri come utilizzare il metodo di ranking con altre API RAG per generare risposte basate su dati non strutturati.