Genera risposte fondate con RAG

Nell'ambito della tua esperienza di Retrieval Augmented Generation (RAG) in Vertex AI Agent Builder, puoi generare risposte basate su fatti ai prompt in base alle seguenti fonti di grounding:

  • 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. La funzionalità di grounding con la Ricerca Google supporta il recupero dinamico che ti consente di generare Risultati fondati con la Ricerca Google solo quando necessario. Perciò, il recupero dinamico valuta se un prompt richiede la conoscenza delle recenti eventi e abilita il grounding con la Ricerca Google. Per ulteriori informazioni, vedi Recupero dinamico.
  • Testo in linea: utilizza il grounding con il testo in linea per suddividere la risposta in più parti di testo chiamato fact text (testo dei fatti) che sono fornito nella richiesta. Un fact checking è una dichiarazione fornita dall'utente che considerate oggettive per una determinata richiesta. Il modello non controlla l'autenticità del testo dei fatti.
  • Datastore di Vertex AI Search: utilizzare le basi con Vertex AI Search per connettere il modello documenti aziendali dai datastore di Vertex AI Search.

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

Inoltre, puoi scegliere di riprodurre in streaming le risposte del modello. La generazione di una risposta basata su dati attendibili tramite streaming è una funzionalità sperimentale.

Puoi utilizzare altri metodi per generare risposte fondate, in base alle tue un'applicazione. Per ulteriori informazioni, vedi API Vertex AI per la creazione di esperienze di ricerca e RAG.

Terminologia

Prima di utilizzare il metodo di generazione di risposte basate su dati, è 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. Sono previste due fasi in RAG:

  1. Rievocazione: trovare rapidamente i fatti più pertinenti può essere un problema comune della ricerca. Con RAG, puoi recuperare rapidamente i dati è importante generare una risposta.
  2. Generazione: i fatti recuperati vengono utilizzati dall'LLM per generare una una risposta concreta.

Pertanto, il metodo di generazione di risposte con grounding recupera i fatti sorgente e genera una risposta con grounding.

Dati di input

Il metodo di generazione di risposte con grounding richiede i seguenti input nel richiesta:

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

  • Testo: se il ruolo è user, il testo è un prompt e quando ruolo è model, il testo è una risposta con grounding. La modalità di specifica del ruolo e del testo in una richiesta è determinata come segue:

    • Per la generazione di una risposta con 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 una risposta con 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 il testo di un prompt ed è model per il testo della risposta.
  • Istruzioni di sistema: un preambolo del prompt che regola il comportamento del il 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 in più passaggi, devi fornire il sistema istruzioni per ogni svolta. Per ulteriori informazioni, consulta 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: basa le risposte sui risultati della Ricerca Google. Quando l'origine di grounding è Ricerca Google, puoi specificare una configurazione di recupero dinamico con una soglia di recupero dinamica. Per ulteriori informazioni, consulta la sezione Ricerca dinamica.

    • Testo in linea: basa la risposta sul testo fattuale fornito nella richiesta. Un testo fattuale è 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 fact text in ogni testo in linea sorgente. I testi dei fatti possono essere supportati utilizzando attributi meta, come titolo, autore e URI. Questi meta attributi vengono restituiti nella risposta quando menzioni le parti a supporto della risposta.

    • Datastore di Vertex AI Search: fonda la risposta nei documenti dai datastore di Vertex AI Search.

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

    Puoi fornire un massimo di 10 origini di messa a terra in qualsiasi ordine. Ad esempio, supponi di fornire le sorgenti di messa a terra con il seguente conteggio, nell'ordine seguente per ottenere un totale di 10 sorgenti di messa a terra:

    • Tre origini di testo in linea, ciascuna delle quali può contenere un massimo di 100 testi informativi
    • Sei datastore Vertex AI Search
    • Quattro origini di testo in linea, ciascuna delle quali può contenere un massimo di 100 informazioni SMS

    A ciascuna origine viene assegnato un indice nell'ordine in cui è specificato nel richiesta. Ad esempio, se hai specificato una combinazione di sorgenti nei tuoi richiesta, l'indice di origine viene assegnato come illustrato di seguito tabella:

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

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

  • Specifiche di generazione: le specifiche per la configurazione del modello che costituite dalle 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, 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 maggiori dettagli su questi parametri, consulta Parametri del modello Gemini.

Dati di output

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

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

  • Testo: una risposta con fondamento.

  • Punteggio di grounding: un valore in virgola mobile nell'intervallo [0, 1] che indica l'efficacia di un di ricerca si basano sulle fonti.

  • Metadati di messa a terra: metadati relativi all'origine di messa a terra. Metadati di grounding contiene le seguenti informazioni:

    • Chunk di supporto: un elenco di chunk che supportano la risposta. Ciascuna al blocco di supporto viene assegnato un indice del blocco di supporto utile tracciando la provenienza. Ogni chunk di supporto contiene quanto segue:

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

        • Per un'origine in linea, i metadati possono essere i dettagli aggiuntivi specificati nella richiesta, come titolo, autore o URI.
        • Per l'archivio dati di Vertex AI Search, i metadati possono essere l'ID del documento, il titolo del documento, l'URI (posizione Cloud Storage) o il numero di pagina.
        • Per l'aggiornamento della Ricerca Google, quando viene generato un risultato basato su dati, i metadati contengono un URI che reindirizza al publisher dei contenuti utilizzati per generare il risultato basato su dati. I metadati contengono anche il dominio dell'editore. Gli URI forniti rimangono accessibili per un massimo di 30 giorni dopo la generazione del risultato basato su dati.
        di Gemini Advanced.
    • Supporto per l'approfondimento: informazioni di approfondimento per una rivendicazione nella risposta. Il supporto di messa a terra contiene le seguenti informazioni:

      • Testo della dichiarazione: la risposta o una parte della risposta che è confermata con il testo del blocco di supporto.
      • Indici dei chunk di supporto: un indice assegnato al chunk di supporto nell'ordine in cui il chunk viene visualizzato nell'elenco dei chunk di supporto.
      • Query di ricerca web: le query di ricerca suggerite per i suggerimenti della Ricerca Google.
      • Suggerimenti di ricerca: se ricevi i suggerimenti di ricerca di Google con una risposta, questa è un "risultato basato su fatti" soggetto ai termini di servizio per il grounding con la Ricerca Google. Per ulteriori informazioni, vedi Per ulteriori informazioni, vedi Termini di servizio Il campo renderedContent all'interno del campo searchEntryPoint è il codice fornito per l'implementazione dei suggerimenti della Ricerca Google. A utilizzare i suggerimenti di ricerca, consulta l'articolo Utilizzare la Ricerca Google Suggerimenti.

Genera una risposta con grounding in un unico turno

Questa sezione descrive come generare risposte basate sulle seguenti fonti:

Basa la risposta nel testo in linea e nel datastore di Vertex AI Search

L'esempio seguente mostra come inviare il testo del prompt specificando un testo in linea e un datastore di Vertex AI Search come origine del grounding. 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
    }
    }'
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud.
    • PROMPT_TEXT: la richiesta da parte dell'utente.
    • SYSTEM_INSTRUCTION: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo.
    • FACT_TEXT_N: il testo in linea per stabilire la risposta. Puoi fornire un massimo di 100 testi informativi.
    • TITLE_N: un campo facoltativo per impostare il meta attributo del titolo per il testo incorporato.
    • URI_N: un campo facoltativo per impostare il meta attributo URI per il testo incorporato.
    • AUTHOR_N: un campo facoltativo per impostare l'attributo meta dell'autore per il testo incorporato.
    • APP_ID_N: l'ID dell'app Vertex AI Search.
    • MODEL_ID: un campo facoltativo per impostare l'ID del modello Gemini che vuoi utilizzare per generare la risposta basata su dati. Per un elenco degli ID modello disponibili, vedi Modelli supportati.
    • TEMPERATURE: un campo facoltativo per impostare la temperatura utilizzata per il campionamento. Google consiglia una temperatura di 0,0. Per ulteriori informazioni, consulta i parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore P superiore per il modello. Per ulteriori informazioni, consulta i parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per maggiori informazioni, consulta il modello Gemini parametri.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"
# engine_id = "YOUR_ENGINE_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How did Google do in 2020? Where can I find BigQuery docs?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(
                text="Add a smiley emoji after the answer."
            )
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                inline_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.InlineSource(
                    grounding_facts=[
                        discoveryengine.GroundingFact(
                            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",
                            },
                        ),
                    ]
                ),
            ),
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.SearchSource(
                    # The full resource name of the serving config for a Vertex AI Search App
                    serving_config=f"projects/{project_number}/locations/global/collections/default_collection/engines/{engine_id}/servingConfigs/default_search",
                ),
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

Esempio di generazione di risposte a un solo turno basata sul testo in linea e su Vertex AI Search

Nell'esempio seguente, la richiesta specifica quanto segue: origini di grounding: un fatto testuale in linea e uno di Vertex AI Search un datastore. Questo esempio utilizza 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"
  }
}'

Generare una risposta basata su dati con la 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 in base alle loro conoscenze senza alcuna base. Questo ti aiuta a gestire la latenza, la qualità in modo più conveniente.

Punteggio e soglia di previsione del recupero dinamico

Quando invii una richiesta per generare una risposta basata su dati, Vertex AI Agent Builder assegna un punteggio di previsione al prompt. Il punteggio della previsione è un valore in virgola mobile nell'intervallo [0,1]. Il suo valore dipende dal fatto che il prompt possono trarre vantaggio dal basare la risposta con i dati informazioni dalla Ricerca Google. Di conseguenza, un prompt che richiede basata sui fatti più recenti sul web ha una previsione più alta di valutazione, mentre un prompt per cui è sufficiente una risposta generata dal modello ha un il punteggio della previsione.

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

Prompt Punteggio di previsione Commento
"Scrivi una poesia sulle peonie" 0,13 Il modello può basarsi sulle sue conoscenze e la risposta non richiede grounding
"Consigliami un giocattolo per un bambino di 2 anni" 0,36 Il modello può basarsi sulle sue conoscenze e la risposta non richiede grounding
"Puoi darmi la ricetta di un guacamole di ispirazione asiatica?" 0,55 La Ricerca Google può dare una risposta basata su dati, ma questa operazione non è strettamente necessaria; le conoscenze del modello potrebbero essere sufficienti
"Che cos'è Agent Builder? Come viene fatturato il grounding in Agent Builder?" 0,72 Richiede la Ricerca Google per generare una risposta corretta
"Chi ha vinto l'ultimo Gran Premio di Formula 1?" 0,97 Richiede che la Ricerca Google generi una risposta ben fondata

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

  • Se il punteggio della previsione è maggiore o uguale alla soglia, si basa sulla Ricerca Google. Una soglia più bassa implica che più prompt hanno risposte generate utilizzando la funzionalità di ancoraggio con la Ricerca Google.
  • Se il punteggio di previsione è inferiore alla soglia, il modello potrebbe comunque generare la risposta, ma non è basato sulla Ricerca Google.

Per trovare una soglia adatta alle tue esigenze aziendali, puoi creare una un insieme rappresentativo di query che prevedi di ricevere. Poi puoi ordinare le query in base al punteggio della previsione nella risposta e seleziona una buona soglia per il tuo caso d'uso.

Basarla sulla Ricerca Google

L'esempio seguente mostra come generare una risposta con grounding da un prompt che specifica 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
    }
    }'
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud.
    • PROMPT_TEXT: la richiesta da parte dell'utente.
    • SYSTEM_INSTRUCTION: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo.
    • MODEL_ID: un campo facoltativo per impostare l'ID del modello Gemini che vuoi utilizzare per generare la risposta basata su dati. 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 °C. Per maggiori informazioni, consulta il modello Gemini parametri.
    • TOP_P: un campo facoltativo per impostare il valore P superiore per il modello. Per ulteriori informazioni, consulta i parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per ulteriori informazioni, consulta i parametri del modello Gemini.
    • DYNAMIC_RETRIEVAL_THRESHOLD: un campo facoltativo per impostare la soglia per richiamare la configurazione di recupero dinamico. È una rappresentazione in virgola mobile compreso nell'intervallo [0,1]. Se aggiungi il campo dynamicRetrievalConfig, ma non imposti il campo predictor o threshold, il valore della soglia predefinito è 0,7. Se non imposti il campo dynamicRetrievalConfig, la risposta è sempre basata su dati.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How much is Google stock?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(text="Be comprehensive.")
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource(
                    # Optional: For Dynamic Retrieval
                    dynamic_retrieval_config=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration(
                        predictor=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration.DynamicRetrievalPredictor(
                            threshold=0.7
                        )
                    )
                )
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

Nell'esempio seguente, la richiesta specifica Ricerca Google come la fonte di grounding. Questo esempio utilizza 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 vertex ai agent builder?"
}]
}],
"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 con più turni, in ogni richiesta devi inviare tutto il testo scambiato tra l'utente e il modello in tutti i turni precedenti. Ciò garantisce la continuità e mantiene il contesto per generare la risposta per dell'ultimo prompt.

Per ottenere una risposta fondata mediante la generazione di risposte con più turni:

REST

Gli esempi riportati di seguito mostrano come inviare il testo del prompt di follow-up su più turni. Questi esempi utilizzano il metodo generateGroundedContent e hanno basato risposte con la Ricerca Google. Puoi utilizzare passaggi simili per generare risposte fondate utilizzando altre fonti di fondamento.

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

    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 con più turni, devi fornire le istruzioni di sistema per ogni turno.
    • MODEL_ID: un campo facoltativo per impostare l'ID del modello Gemini da utilizzare per generare risposta concreta. 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 °C. Per ulteriori informazioni, consulta i parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore P superiore per il modello. Per ulteriori informazioni, consulta i parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per ulteriori informazioni, consulta i parametri del modello Gemini.
  2. Invia il secondo prompt come follow-up. Aggiungi la prima richiesta dell'utente seguita dalla risposta corrispondente del modello per 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
    }
    }'
    

    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 dalla 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ù passaggi, devi fornire le istruzioni di sistema per ogni turno.
    • MODEL_ID: un campo facoltativo per impostare l'ID del modello Gemini da utilizzare per generare risposta concreta. Per un elenco degli ID modello disponibili, vedi 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 il modello Gemini parametri.
    • TOP_P: un campo facoltativo per impostare il valore P superiore per il modello. Per maggiori informazioni, consulta il modello Gemini parametri.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per ulteriori informazioni, consulta i parametri del modello Gemini.
  3. Ripeti questa procedura per ricevere ulteriori risposte. In ogni turno, aggiungi tutti i prompt precedenti dell'utente seguiti dalle relative risposte del modello.

Esempio per la generazione di risposte in più passaggi

Nell'esempio seguente, la richiesta specifica tre testi dei 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 nel primo turno con un'emoji smiley.

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 la prima richiesta dell'utente seguita dalla risposta corrispondente del modello per 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"
    }
    }'
    

Mostrare gradualmente le risposte fondate

Puoi scegliere di riprodurre in streaming le risposte del modello. Questa funzionalità è utile nei casi d'uso in cui la risposta è particolarmente lunga e l'invio dell'intera risposta contemporaneamente 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 basata su dati e in streaming:

REST

L'esempio seguente mostra come trasmettere in streaming una risposta basata su dati. 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 fondamento.

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

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud.
    • PROMPT_TEXT: la richiesta da parte dell'utente.
    • SYSTEM_INSTRUCTION: un campo facoltativo per fornire un preambolo o un contesto aggiuntivo.
    • MODEL_ID: un campo facoltativo per impostare l'ID del modello Gemini da utilizzare per generare risposta concreta. 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 ulteriori informazioni, consulta i parametri del modello Gemini.
    • TOP_P: un campo facoltativo per impostare il valore P superiore per il modello. Per ulteriori informazioni, consulta i parametri del modello Gemini.
    • TOP_K: un campo facoltativo per impostare il valore top-K per il modello. Per maggiori informazioni, consulta il modello Gemini parametri.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="Summarize how to delete a data store in Vertex AI Agent Builder?"
                )
            ],
        )
    ],
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource()
            ),
        ]
    ),
)
responses = client.stream_generate_grounded_content(iter([request]))

for response in responses:
    # Handle the response
    print(response)

Esempio di streaming di risposte con grounding

Nell'esempio seguente, la richiesta specifica la Ricerca Google come origine di riferimento per trasmettere una risposta senza la configurazione del recupero dinamico. La risposta in streaming viene distribuita su diversi candidati per la 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 Vertex AI Agent Builder?"
        }
      ]
    }
  ],
  "groundingSpec": {
    "groundingSources": [
      {
        "googleSearchSource": {}
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}
]'

Modelli supportati

I seguenti modelli supportano la messa a terra:

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

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

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

ID modello Aggiornamento automatico
default
gemini-1.0-pro
gemini-1.0-pro-001 No
gemini-1.0-pro-002 No
gemini-1.5-flash
gemini-1.5-flash-001 No
gemini-1.5-pro
gemini-1.5-pro-001 No

Passaggi successivi

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