Generare risposte fondate con RAG

Nell'ambito dell'esperienza di Retrieval Augmented Generation (RAG) nelle applicazioni AI, puoi generare risposte fondate ai prompt in base alle seguenti fonti di fondatezza:

  • Ricerca Google: utilizza il grounding con la Ricerca Google se vuoi collegare il modello alle conoscenze del mondo, a un'ampia gamma di argomenti o a informazioni aggiornate su internet. Grounding con la Ricerca Google supporta il recupero dinamico, che ti offre la possibilità di generare risultati fondati con la Ricerca Google solo quando necessario. Pertanto, la configurazione del recupero dinamico valuta se un prompt richiede conoscenze su eventi recenti e attiva Grounding con la Ricerca Google. Per ulteriori informazioni, consulta Recupero dinamico.
  • Testo in linea: utilizza il grounding con il testo in linea per basare la risposta su parti di testo chiamate testo di fatti fornite nella richiesta. Un testo di fatti è un'affermazione fornita dall'utente che è considerata fattuale per una determinata richiesta. Il modello non verifica l'autenticità del testo del fatto.
  • Datastore Vertex AI Search: utilizza il grounding con Vertex AI Search se vuoi connettere il modello ai tuoi documenti aziendali dai datastore Vertex AI Search.

Questa pagina descrive come generare risposte basate su queste fonti di grounding utilizzando i seguenti approcci:

Inoltre, puoi scegliere di trasmettere in streaming le risposte del modello. La generazione di una risposta fondata tramite streaming è una funzionalità sperimentale.

Puoi utilizzare altri metodi per generare risposte fondate, adatte alla tua applicazione. Per saperne di più, consulta API Vertex AI per la creazione di esperienze di ricerca e RAG.

Terminologia

Prima di utilizzare il metodo di generazione di risposte fondate, è utile comprendere gli input e gli output, come strutturare la richiesta e la terminologia relativa alla RAG.

Termini RAG

La RAG è una metodologia che consente ai modelli linguistici di grandi dimensioni (LLM) di generare risposte basate sull'origine dati che preferisci. Esistono due fasi in RAG:

  1. Recupero: ottenere rapidamente i fatti più pertinenti può essere un problema comune di ricerca. Con RAG, puoi recuperare rapidamente i fatti importanti per generare una risposta.
  2. Generazione:i fatti recuperati vengono utilizzati dall'LLM per generare una risposta fondata.

Pertanto, il metodo di generazione di risposte fondate recupera i fatti dalla fonte di grounding e genera una risposta fondata.

Dati di input

Il metodo di generazione di risposte basate sui dati richiede i seguenti input nella richiesta:

  • Ruolo: il mittente di un determinato testo, che può essere un utente (user) o un modello (model).

  • Testo: quando il ruolo è user, il testo è un prompt e quando il ruolo è model, il testo è una risposta basata su dati reali. Il modo in cui specifichi il ruolo e il testo in una richiesta è determinato come segue:

    • Per la generazione di risposte in un solo turno, l'utente invia il testo del prompt nella richiesta e il modello invia il testo della risposta nella risposta.
    • Per la generazione di risposte in più turni, la richiesta contiene la coppia prompt-risposta per tutti i turni precedenti e il testo del prompt dell'utente per il turno corrente. Pertanto, in una richiesta di questo tipo, il ruolo è user per un testo del prompt ed è model per il testo della risposta.
  • Istruzione di sistema: un preambolo del prompt che regola il comportamento del modello e modifica l'output di conseguenza. Ad esempio, puoi aggiungere una persona alla risposta generata o chiedere al modello di formattare il testo di output in un determinato modo. Per la generazione di risposte multi-turn, devi fornire al sistema le istruzioni per ogni turno. Per ulteriori informazioni, vedi Utilizzare le istruzioni di sistema.

  • Origine di grounding: la fonte su cui si basa la risposta e che può essere una o più delle seguenti:

    • Ricerca Google: fonda le risposte sui risultati della Ricerca Google. Quando l'origine di grounding è la Ricerca Google, puoi specificare una configurazione di recupero dinamico con una soglia di recupero dinamico. Per ulteriori informazioni, consulta Recupero dinamico.

    • Testo incorporato: basa la risposta sul testo di dati di fatto fornito nella richiesta. Un testo di fatti è un'affermazione fornita dall'utente che è considerata fattuale per una determinata richiesta. Il modello non verifica l'autenticità del testo del fatto. Puoi fornire un massimo di 100 testi di fatti in ogni origine di testo incorporato. I testi dei fatti possono essere supportati utilizzando gli attributi meta, come titolo, autore e URI. Questi meta attributi vengono restituiti nella risposta quando vengono citati i chunk che supportano la risposta.

    • Datastore di Vertex AI Search: esegui il grounding della risposta nei documenti dei datastore di Vertex AI Search. Non puoi specificare un datastore di ricerca di un sito web come origine di base.

    In una determinata richiesta, puoi fornire sia un'origine di testo incorporata sia un'origine datastore Vertex AI Search. Non puoi combinare la Ricerca Google con una di queste origini. Pertanto, se vuoi basare le tue risposte sui risultati della Ricerca Google, devi inviare una richiesta separata specificando la Ricerca Google come unica fonte di base.

    Puoi fornire un massimo di 10 fonti di base in qualsiasi ordine. Ad esempio, supponiamo che tu fornisca le fonti di base con il seguente conteggio, nel seguente ordine per ottenere un totale di 10 fonti di base:

    • Tre fonti di testo in linea, ognuna delle quali può contenere un massimo di 100 testi di fatti
    • Sei datastore Vertex AI Search
    • Un'origine di testo in linea, contenente un massimo di 100 testi di fatti

    A ogni origine viene assegnato un indice nell'ordine in cui viene specificata nella richiesta. Ad esempio, se hai specificato una combinazione di origini nella tua richiesta, l'indice dell'origine viene assegnato come illustrato nella tabella seguente:

    Origine di grounding Indice
    Testo in linea 1 0
    Testo in linea n. 2 1
    Datastore di Vertex AI Search n. 1 2
    Testo in linea 3 3
    Datastore Vertex AI Search n. 2 4

    Questo indice è citato nella risposta ed è utile per tracciare la provenienza.

  • Specifiche di generazione: le specifiche per la configurazione del modello che consistono nelle seguenti informazioni:

    • ID modello: specifica il modello Vertex AI Gemini da utilizzare per la generazione di risposte. Per un elenco dei modelli che puoi utilizzare per generare risposte basate su dati reali, consulta Modelli supportati.

    • Parametri del modello: specifica i parametri che puoi impostare per il modello che scegli di utilizzare. Questi parametri sono: lingua, temperatura, top-P e top-K. Per informazioni dettagliate su questi parametri, vedi Parametri del modello Gemini.

  • Codice lingua: la lingua della risposta generata è generalmente impostata in modo che corrisponda alla lingua del prompt. Se nel prompt non è presente una singola lingua (ad esempio, se il prompt è molto breve e può essere valido in più lingue), il campo del codice lingua determina la lingua della risposta.

    Per un elenco dei codici lingua, consulta Lingue.

  • Latitudine e longitudine: specifica la latitudine e la longitudine dell'utente. Se la query contiene domande specifiche per la località, ad esempio "Trova un bar vicino a me", questi campi vengono utilizzati. Se non è possibile determinare la lingua della query e il codice lingua non è impostato, vengono utilizzate la latitudine e la longitudine per determinare la lingua della risposta.

Dati di output

La risposta generata dal modello è chiamata candidato e contiene i seguenti dati. Non tutti i campi potrebbero essere presenti nell'output.

  • Ruolo: il mittente della risposta basata su dati reali. La risposta contiene sempre il testo della risposta basata su dati reali. Pertanto, il ruolo in una risposta è sempre un modello.

  • Testo: una risposta basata su fonti.

  • Punteggio di fondatezza: un valore float compreso nell'intervallo [0, 1] che indica il grado di fondatezza di una risposta nelle fonti fornite.

  • Metadati di grounding: metadati sull'origine del grounding. I metadati di base contengono le seguenti informazioni:

    • Brani di supporto: un elenco di brani che supportano la risposta. A ogni blocco di supporto viene assegnato un indice che è utile per tracciare la provenienza. Ogni blocco di supporto contiene quanto segue:

      • Testo del blocco: una parte di testo citata letteralmente dalla fonte da cui viene estratta la risposta o una parte della risposta (chiamata testo dell'affermazione). Potrebbe non essere sempre presente nella risposta.
      • Origine: un indice assegnato all'origine nella richiesta.
      • Metadati dell'origine: metadati relativi al blocco. A seconda dell'origine, i metadati dell'origine possono essere uno dei seguenti:

        • Per una fonte incorporata, i metadati possono essere i dettagli aggiuntivi specificati nella richiesta, ad esempio titolo, autore o URI.
        • Per il datastore Vertex AI Search, i metadati possono essere l'ID documento, il titolo del documento, l'URI (posizione Cloud Storage) o il numero di pagina.
        • Per il Grounding con la Ricerca Google, quando viene generato un risultato basato su grounding, i metadati contengono un URI che reindirizza al publisher dei contenuti utilizzati per generare il risultato basato su grounding. I metadati contengono anche il dominio dell'editore. Gli URI forniti rimangono accessibili fino a 30 giorni dopo la generazione del risultato basato su dati reali.
    • Supporto per la verifica: informazioni di verifica per un'affermazione nella risposta. Il supporto per la messa a terra contiene le seguenti informazioni:

      • Testo dell'affermazione: la risposta o una parte della risposta che è supportata dal testo del blocco di supporto.
      • Indice del blocco di supporto: un indice assegnato al blocco di supporto nell'ordine in cui il blocco viene visualizzato nell'elenco dei blocchi di supporto.
      • Query di ricerca sul web: le query di ricerca suggerite per i suggerimenti di Ricerca Google.
      • Suggerimenti di ricerca: se ricevi suggerimenti di Ricerca Google con una risposta, questa è un "Risultato fondato" soggetto ai termini di servizio per il grounding con la Ricerca Google. Per ulteriori informazioni, consulta i Termini di servizio. Il campo renderedContent all'interno del campo searchEntryPoint è il codice fornito per l'implementazione dei suggerimenti della Ricerca Google. Per utilizzare i suggerimenti della Ricerca Google, consulta Utilizzare i suggerimenti della Ricerca Google.

Generare una risposta basata su fonti attendibili in un solo turno

Questa sezione descrive come generare risposte basate sulle seguenti fonti:

Basare la risposta sul testo incorporato e sul datastore di Vertex AI Search

L'esempio seguente mostra come inviare il testo del prompt specificando un testo incorporato e un datastore di ricerca Vertex AI come origine di grounding. Non puoi specificare un datastore di ricerca su sito web come origine di base. Questo esempio utilizza il metodo generateGroundedContent.

REST

  1. Invia il prompt nella seguente richiesta curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_1",
               "attributes": {
                 "title": "TITLE_1",
                 "uri": "URI_1",
                 "author": "AUTHOR_1"
               }
             }
           ]
         }
       },
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_2",
               "attributes": {
                 "title": "TITLE_2",
                 "uri": "URI_2"
               }
             },
             {
               "factText": "FACT_TEXT_3",
               "attributes": {
                 "title": "TITLE_3",
                 "uri": "URI_3"
               }
             }
           ]
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_1/servingConfigs/default_search"
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_2/servingConfigs/default_search"
         }
       }
      ]
    },
    "generationSpec": {
      "modelId": "MODEL_ID",
      "temperature": TEMPERATURE,
      "topP": TOP_P,
      "topK": TOP_K
    },
    "user_context": {
      "languageCode: "LANGUAGE_CODE",
      "latLng": {
        "latitude": LATITUDE,
        "longitude": LONGITUDE
     },
    }
    }'
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud .
    • PROMPT_TEXT: il prompt dell'utente.
    • SYSTEM_INSTRUCTION: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo.
    • FACT_TEXT_N: il testo in linea per basare la risposta. Puoi fornire un massimo di 100 testi fattuali.
    • TITLE_N: un campo facoltativo per impostare l'attributo meta title per il testo incorporato.
    • URI_N: un campo facoltativo per impostare l'attributo meta URI per il testo incorporato.
    • AUTHOR_N: un campo facoltativo per impostare l'attributo meta autore per il testo incorporato.
    • APP_ID_N: l'ID dell'app Vertex AI Search.
    • MODEL_ID: un campo facoltativo per impostare l'ID modello del modello Gemini che vuoi utilizzare per generare la risposta basata su dati reali. Per un elenco degli ID modello disponibili, consulta Modelli supportati.
    • TEMPERATURE: un campo facoltativo per impostare la temperatura utilizzata per il campionamento. Google consiglia una temperatura di 0.0. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore top-P per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • LANGUAGE_CODE: un campo facoltativo che può essere utilizzato per impostare la lingua per la risposta generata e per il testo del blocco restituito. Se la lingua non può essere determinata dalla query, viene utilizzato questo campo. Il valore predefinito è en. Per un elenco dei codici lingua, vedi Lingue.
    • LATITUDE: un campo facoltativo per impostare la latitudine. Inserisci il valore in gradi decimali, ad esempio -25.34.
    • LONGITUDE: un campo facoltativo per impostare la longitudine. Inserisci il valore in gradi decimali, ad esempio 131.04.

Esempio di generazione di risposte in un solo turno basate su testo incorporato e Vertex AI Search

Nell'esempio seguente, la richiesta specifica le seguenti origini di grounding: un fatto di testo incorporato e un datastore Vertex AI Search. Questo esempio utilizza il metodo generateGroundedContent. Questo esempio utilizza anche un'istruzione di sistema per terminare la risposta con un'emoji sorridente.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "How did Google do in 2020? Where can I find BigQuery docs?"
        }
      ]
    }
  ],
  "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
  },
  "groundingSpec": {
    "groundingSources": [
      {
        "inline_source": {
          "grounding_facts": [
            {
              "fact_text": "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction",
              "attributes": {
                "title": "BigQuery Overview",
                "uri": "https://cloud.google.com/bigquery/docs/introduction"
              }
            }
          ]
        }
      },
      {
        "searchSource": {
          "servingConfig": "projects/123456/locations/global/collections/default_collection/engines/app_id_example/servingConfigs/default_search"
        }
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  },
  "user_context": {
    "languageCode: "en",
    "latLng": {
       "latitude": 37.422131,
       "longitude": -122.084801
    }
  }
}'

Generare una risposta basata sulla Ricerca Google

Puoi basare le risposte generate su dati web disponibili pubblicamente.

Recupero dinamico

Puoi utilizzare il recupero dinamico nella tua richiesta per scegliere quando disattivare il grounding con la Ricerca Google. Questa opzione è utile quando il prompt non richiede una risposta basata sulla Ricerca Google e i modelli supportati possono fornire una risposta basata sulle loro conoscenze senza grounding. In questo modo puoi gestire latenza, qualità e costi in modo più efficace.

Punteggio e soglia di previsione del recupero dinamico

Quando invii una richiesta per generare una risposta basata su dati reali, AI Applications assegna un punteggio di previsione al prompt. Il punteggio di previsione è un valore di rappresentazione in virgola mobile compreso nell'intervallo [0,1]. Il suo valore dipende dal fatto che il prompt possa trarre vantaggio dal basare la risposta sulle informazioni più aggiornate della Ricerca Google. Pertanto, un prompt che richiede una risposta basata sui fatti più recenti sul web ha un punteggio di previsione più alto, mentre un prompt per il quale è sufficiente una risposta generata dal modello ha un punteggio di previsione più basso.

Ecco alcuni esempi di prompt e i relativi punteggi di previsione.

Prompt Punteggio di previsione Commento
"Scrivi una poesia sulle peonie" 0,13 Il modello può fare affidamento sulle sue conoscenze e la risposta non deve essere fondata
"Suggest a toy for a 2yo child" (suggerisci un giocattolo per un bambino di 2 anni) 0,36 Il modello può fare affidamento sulle sue conoscenze e la risposta non deve essere fondata
"Puoi darmi la ricetta di una guacamole di ispirazione asiatica?" 0,55 La Ricerca Google può fornire una risposta fondata, ma il grounding non è strettamente necessario; la conoscenza del modello potrebbe essere sufficiente
"Che cos'è AI Applications? Come viene fatturata la fondatezza nelle applicazioni AI?" 0,72 Richiede la Ricerca Google per generare una risposta ben documentata
"Chi ha vinto l'ultimo Gran Premio di Formula 1?" 0,97 Richiede la Ricerca Google per generare una risposta ben documentata

Nella richiesta di generazione di risposte basate su dati reali, puoi specificare una configurazione di recupero dinamico con una soglia. La soglia è un valore di rappresentazione in virgola mobile compreso nell'intervallo [0,1] e il valore predefinito è 0,7. Se il valore di soglia è zero, la risposta è sempre basata sulla Ricerca Google. Per tutti gli altri valori di soglia, si applica quanto segue:

  • Se il punteggio di previsione è maggiore o uguale alla soglia, la risposta si basa sulla Ricerca Google. Una soglia inferiore implica che un maggior numero di prompt ha risposte generate utilizzando Grounding con la Ricerca Google.
  • Se il punteggio di previsione è inferiore alla soglia, il modello potrebbe comunque generare la risposta, ma non è basata sulla Ricerca Google.

Per trovare una soglia adatta alle esigenze della tua attività, puoi creare un insieme rappresentativo di query che prevedi di incontrare. Poi puoi ordinare le query in base al punteggio di previsione nella risposta e selezionare una soglia adatta al tuo caso d'uso.

Basare la risposta sulla Ricerca Google

L'esempio seguente mostra come generare una risposta basata su un prompt specificando la Ricerca Google come fonte di base. Questo esempio utilizza il metodo generateGroundedContent.

REST

  1. Invia il prompt nella seguente richiesta curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
     {
         "googleSearchSource": {
              "dynamicRetrievalConfig": {
                  "predictor":{
                      "threshold": DYNAMIC_RETRIEVAL_THRESHOLD
                  }
              }
         }
     }
    ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud .
    • PROMPT_TEXT: il prompt dell'utente.
    • SYSTEM_INSTRUCTION: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo.
    • DYNAMIC_RETRIEVAL_THRESHOLD: un campo facoltativo per impostare la soglia per richiamare la configurazione di recupero dinamico. È un valore in virgola mobile compreso nell'intervallo [0,1]. Se aggiungi il campo dynamicRetrievalConfig, ma non imposti il campo predictor o threshold, il valore di soglia predefinito è 0,7. Se non imposti il campo dynamicRetrievalConfig, la risposta è sempre basata su dati reali.
    • MODEL_ID: un campo facoltativo per impostare l'ID modello del modello Gemini che vuoi utilizzare per generare la risposta basata su dati reali. Per un elenco degli ID modello disponibili, consulta Modelli supportati.
    • TEMPERATURE: un campo facoltativo per impostare la temperatura utilizzata per il campionamento. Google consiglia una temperatura di 0.0. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore top-P per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • LANGUAGE_CODE: un campo facoltativo che può essere utilizzato per impostare la lingua per la risposta generata e per il testo del blocco restituito. Se la lingua non può essere determinata dalla query, viene utilizzato questo campo. Il valore predefinito è en. Per un elenco dei codici lingua, vedi Lingue.
    • LATITUDE: un campo facoltativo per impostare la latitudine. Inserisci il valore in gradi decimali, ad esempio -25.34.
    • LONGITUDE: un campo facoltativo per impostare la longitudine. Inserisci il valore in gradi decimali, ad esempio 131.04.

Nell'esempio seguente, la richiesta specifica la Ricerca Google come origine di base. Questo esempio utilizza il metodo generateGroundedContent. Questo esempio utilizza anche un'istruzione di sistema per terminare la risposta con un'emoji sorridente.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
"contents": [{
  "role": "user",
  "parts": [{
    "text": "What is ai applications?"
}]
}],
"systemInstruction": {
   "parts": {
      "text": "Add a smiley emoji after the answer."
   }
},
"groundingSpec": {
  "groundingSources": [
  {
      "googleSearchSource": {
        "dynamicRetrievalConfig": {
               "predictor":{
                   "threshold": 0.6
               }
           }
      }
  }
 ]
},
"generationSpec": {
  "modelId": "gemini-1.5-flash"
}
}
'

Generare una risposta fondata in più turni

Nella generazione di risposte a più turni, in ogni richiesta devi inviare tutto il testo scambiato tra l'utente e il modello in tutti i turni precedenti. In questo modo viene garantita la continuità e viene mantenuto il contesto per generare la risposta all'ultimo prompt.

Per ottenere una risposta fondata tramite la generazione di risposte in più turni:

REST

Gli esempi riportati di seguito mostrano come inviare un testo di prompt di follow-up in più turni. Questi esempi utilizzano il metodo generateGroundedContent e basano le risposte sulla Ricerca Google. Puoi utilizzare passaggi simili per generare risposte fondate utilizzando altre fonti di grounding.

  1. Invia il primo prompt nella seguente richiesta curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_1"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud .
    • PROMPT_TEXT_TURN_1: il testo del prompt dell'utente nel primo turno.
    • SYSTEM_INSTRUCTION_TURN_1: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo. Per la generazione di risposte in più turni, devi fornire le istruzioni di sistema per ogni turno.
    • MODEL_ID: un campo facoltativo per impostare l'ID modello del modello Gemini che vuoi utilizzare per generare la risposta basata su dati reali. Per un elenco degli ID modello disponibili, consulta Modelli supportati.
    • TEMPERATURE: un campo facoltativo per impostare la temperatura utilizzata per il campionamento. Google consiglia una temperatura di 0.0. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore top-P per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • LANGUAGE_CODE: un campo facoltativo che può essere utilizzato per impostare la lingua per la risposta generata e per il testo del blocco restituito. Se la lingua non può essere determinata dalla query, viene utilizzato questo campo. Il valore predefinito è en. Per un elenco dei codici lingua, vedi Lingue.
    • LATITUDE: un campo facoltativo per impostare la latitudine. Inserisci il valore in gradi decimali, ad esempio -25.34.
    • LONGITUDE: un campo facoltativo per impostare la longitudine. Inserisci il valore in gradi decimali, ad esempio 131.04.
  2. Invia il secondo prompt come follow-up. Aggiungi il primo prompt dell'utente seguito dalla risposta corrispondente del modello per il contesto.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "ANSWER_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_2"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_2"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud .
    • PROMPT_TEXT_TURN_1: il testo del prompt dell'utente nel primo turno.
    • ANSWER_TEXT_TURN_1: il testo della risposta del modello nel primo turno.
    • PROMPT_TEXT_TURN_2: il testo del prompt dell'utente nel secondo turno.
    • SYSTEM_INSTRUCTION_TURN_2: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo. Per la generazione di risposte in più turni, devi fornire le istruzioni di sistema per ogni turno.
    • MODEL_ID: un campo facoltativo per impostare l'ID modello del modello Gemini che vuoi utilizzare per generare la risposta basata su dati reali. Per un elenco degli ID modello disponibili, consulta Modelli supportati.
    • TEMPERATURE: un campo facoltativo per impostare la temperatura utilizzata per il campionamento. Google consiglia una temperatura di 0.0. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore top-P per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • LANGUAGE_CODE: un campo facoltativo che può essere utilizzato per impostare la lingua per la risposta generata e per il testo del blocco restituito. Se la lingua non può essere determinata dalla query, viene utilizzato questo campo. Il valore predefinito è en. Per un elenco dei codici lingua, vedi Lingue.
    • LATITUDE: un campo facoltativo per impostare la latitudine. Inserisci il valore in gradi decimali, ad esempio -25.34.
    • LONGITUDE: un campo facoltativo per impostare la longitudine. Inserisci il valore in gradi decimali, ad esempio 131.04.
  3. Ripeti questa procedura per ottenere ulteriori risposte di follow-up. In ogni turno, aggiungi tutti i prompt precedenti dell'utente seguiti dalle risposte corrispondenti del modello.

Esempio di generazione di risposte in più turni

Nel seguente esempio, la richiesta specifica tre testi di fatti incorporati come fonte di base per generare risposte in due turni. Questo esempio utilizza il metodo generateGroundedContent. Questo esempio utilizza anche un'istruzione di sistema per terminare la risposta al primo turno con un'emoji sorridente.

REST

  1. Invia il primo prompt nella seguente richiesta curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     }
    ],
    "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
    },
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    
  2. Invia il secondo prompt come follow-up. Aggiungi il primo prompt dell'utente seguito dalla risposta corrispondente del modello per il contesto.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "In 2023, the global average surface temperature increased, the world population surpassed 8 billion, and global e-commerce sales reached an estimated $5.7 trillion.  😊 \n"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "Rephrase the answer in an abstracted list."
         }
       ]
     }
    ],
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    

Streaming delle risposte fondate

Puoi scegliere di riprodurre in streaming le risposte del modello. Ciò è utile nei casi d'uso in cui la risposta è particolarmente lunga e l'invio dell'intera risposta in una sola volta causa un ritardo significativo. Lo streaming della risposta suddivide la risposta in un array di diversi candidati che contengono parti sequenziali del testo della risposta.

Per ottenere una risposta in streaming basata su dati reali:

REST

Il seguente esempio mostra come trasmettere in streaming una risposta basata su dati reali. Questo esempio utilizza il metodo streamGenerateGroundedContent e basa la risposta sulla Ricerca Google senza la configurazione del recupero dinamico. Puoi utilizzare passaggi simili per generare risposte fondate utilizzando altre fonti di grounding.

  1. Invia il prompt nella seguente richiesta curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global:streamGenerateGroundedContent" \
    -d '
    [
    {
     "contents": [
       {
         "role": "user",
         "parts": [
           {
             "text": "PROMPT_TEXT"
           }
         ]
       }
     ],
     "systemInstruction": {
         "parts": {
             "text": "SYSTEM_INSTRUCTION"
         }
     },
     "groundingSpec": {
       "groundingSources": [
         {
           "googleSearchSource": {}
         }
       ]
     },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }
    ]'
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud .
    • PROMPT_TEXT: il prompt dell'utente.
    • SYSTEM_INSTRUCTION: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo.
    • MODEL_ID: un campo facoltativo per impostare l'ID modello del modello Gemini che vuoi utilizzare per generare la risposta basata su dati reali. Per un elenco degli ID modello disponibili, consulta Modelli supportati.
    • TEMPERATURE: un campo facoltativo per impostare la temperatura utilizzata per il campionamento. Google consiglia una temperatura di 0.0. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore top-P per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per maggiori informazioni, consulta la pagina Parametri del modello Gemini.
    • LANGUAGE_CODE: un campo facoltativo che può essere utilizzato per impostare la lingua per la risposta generata e per il testo del blocco restituito. Se la lingua non può essere determinata dalla query, viene utilizzato questo campo. Il valore predefinito è en. Per un elenco dei codici lingua, vedi Lingue.
    • LATITUDE: un campo facoltativo per impostare la latitudine. Inserisci il valore in gradi decimali, ad esempio -25.34.
    • LONGITUDE: un campo facoltativo per impostare la longitudine. Inserisci il valore in gradi decimali, ad esempio 131.04.

Esempio per lo streaming di risposte fondate

Nell'esempio seguente, la richiesta specifica la Ricerca Google come fonte di base per lo streaming di una risposta senza la configurazione del recupero dinamico. La risposta in streaming viene distribuita su più candidati di risposta. Questo esempio utilizza il metodo streamGenerateGroundedContent.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/123456/locations/global:streamGenerateGroundedContent" \
-d '
[
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "Summarize How to delete a data store in AI Applications?"
        }
      ]
    }
  ],
  "groundingSpec": {
    "groundingSources": [
      {
        "googleSearchSource": {}
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}
]'

Modelli supportati

I seguenti modelli supportano la base:

  • Gemini 1.5 Pro con solo input di testo
  • Gemini 1.5 Flash con input di testo

Per scoprire di più su questi modelli Gemini, consulta Versioni e ciclo di vita del modello Gemini.

Quando chiami il metodo generateGroundedContent, puoi utilizzare i seguenti ID modello:

ID modello Aggiornato automaticamente
default
gemini-1.5-flash
gemini-1.5-flash-001 No
gemini-1.5-flash-002 No
gemini-1.5-pro
gemini-1.5-pro-001 No
gemini-1.5-pro-002 No

Passaggi successivi

Scopri come utilizzare il metodo di generazione con grounding con altre API RAG per generare risposte con grounding da dati non strutturati.