Migliorare la qualità della ricerca e della generazione di contenuti basata su RAG con l'API di ranking

Nell'ambito dell'esperienza di Retrieval Augmented Generation (RAG) nelle applicazioni di AI, puoi classificare un insieme di documenti in base a una query.

L'API di ranking prende un elenco di documenti e li riordina in base alla loro 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 su quanto 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 chiamarla. Devi solo passare la query e i documenti. Ciò rende l'API adatta al ranking dei documenti di Vector Search e di altre soluzioni di ricerca.

Questa pagina descrive come utilizzare l'API di ranking per classificare 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 Ranking può essere utile in qualsiasi scenario in cui devi trovare i contenuti più pertinenti per la query di un utente. Ad esempio, l'API di ranking può aiutarti nelle seguenti attività:

  • Trovare i contenuti giusti da fornire a un LLM per il grounding

  • Migliorare la pertinenza di un'esperienza di ricerca esistente

  • Identificare le sezioni pertinenti di un documento

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

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

  2. Utilizza un'API per gli incorporamenti per creare incorporamenti per ciascun blocco.

  3. Carica gli incorporamenti 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 cui stai classificando i 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 il contenuto del documento. Per ogni record includi un titolo, un contenuto o entrambi. Il numero massimo di token supportati per record dipende dalla versione del modello in uso. Ad esempio, i modelli fino alla versione 003 supportano 512 token, mentre la versione 004 supporta 1024 token. Se la lunghezza combinata del titolo e dei contenuti supera il limite di token del modello, 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 sarebbero inclusi molti più 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. Tuttavia, puoi utilizzare il campotopN per restituire meno record. Tutti i record vengono classificati indipendentemente dal valore impostato.

    Ad esempio, questo restituisce i primi 10 record classificati:

    "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 impostare questo valore è se vuoi ridurre le dimensioni del payload della risposta.

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

    "ignoreRecordDetailsInResponse": true,
    
  • (Facoltativo) Il nome del modello. Specifica il modello da utilizzare per classificare i documenti. Se non viene specificato alcun modello, viene utilizzato semantic-ranker-default@latest, che punta automaticamente al modello più recente disponibile. Per fare riferimento a un modello specifico, specifica uno dei nomi dei modelli elencati in Modelli supportati, ad esempio semantic-ranker-512-003.

    Nel seguente esempio, model è impostato su semantic-ranker-default@latest. Ciò significa che l'API di ranking utilizzerà sempre l'ultimo modello disponibile.

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

Dati di output

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

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

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

Classificare (o riclassificare) 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 quella query e già classificati con un altro metodo, ad esempio una ricerca di parole chiave o una ricerca vettoriale. Poi, utilizzi 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, contenuti o entrambi.

    Il numero massimo di token supportati per record dipende dalla versione del modello. I modelli fino alla versione 003, come semantic-ranker-512-003, supportano 512 token per record. A partire dalla versione 004, questo limite aumenta a 1024 token. Se la lunghezza combinata del titolo e dei contenuti supera il limite di token del modello, i contenuti aggiuntivi 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-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"
    }
]
}'

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud .
  • QUERY: la query rispetto alla quale i record vengono classificati e valutati.
  • RECORD_ID_n: una stringa univoca che identifica il record.
  • TITLE_n: il titolo del record.
  • CONTENT_n: il contenuto del record.

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

Fai clic per visualizzare un comando curl e una risposta di esempio.

    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

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura 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-default@latest) Input Finestra di contesto Data di uscita Data di interruzione
semantic-ranker-default-004 Testo (25 lingue) 1024 9 aprile 2025 Da stabilire
semantic-ranker-default-003 No Testo (25 lingue) 512 10 settembre 2024 Da stabilire
semantic-ranker-default-002 No Text (en only) 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.