Fundierte Antworten mit RAG generieren

Im Rahmen der Retrieval Augmented Generation (RAG) in Vertex AI Agent Builder können Sie fundierte Antworten auf Prompts basierend auf den folgenden Quellen generieren:

  • Google Suche: Verwenden Sie die Funktion „Mit der Google Suche fundieren“, wenn Sie das Modell mit dem Wissen der ganzen Welt, einer Vielzahl von Themen oder aktuellen Informationen im Internet verknüpfen möchten. Die Fundierung mit der Google Suche unterstützt die dynamische Abfrage, mit der Sie fundierte Ergebnisse mit der Google Suche nur bei Bedarf generieren können. Daher wird in der Konfiguration für die dynamische Abfrage geprüft, ob für einen Prompt Wissen über aktuelle Ereignisse erforderlich ist, und die Funktion „Fundierung mit der Google Suche“ aktiviert. Weitere Informationen finden Sie unter Dynamische Abfrage.
  • Inline-Text: Verwenden Sie die Begründung mit Inline-Text, um die Antwort auf Textstücke zu stützen, die in der Anfrage als Faktentext angegeben sind. Ein Faktentext ist eine von Nutzern bereitgestellte Aussage, die für eine bestimmte Anfrage als sachlich betrachtet wird. Das Modell prüft nicht die Authentizität des Faktentexts.
  • Vertex AI Search-Datenspeicher: Verwenden Sie die Fundierung mit Vertex AI Search, wenn Sie das Modell mit Ihren Unternehmensdokumenten aus Vertex AI Search-Datenspeichern verknüpfen möchten.

Auf dieser Seite wird beschrieben, wie Sie anhand dieser Quellen fundierte Antworten generieren können. Dabei werden die folgenden Ansätze verwendet:

Außerdem können Sie die Antworten aus dem Modell streamen. Das Generieren einer fundierten Antwort durch Streaming ist eine experimentelle Funktion.

Sie können auch andere Methoden verwenden, um fundierte Antworten zu generieren, die zu Ihrer Anwendung passen. Weitere Informationen finden Sie unter Vertex AI APIs zum Erstellen von Such- und RAG-Umgebungen.

Terminologie

Bevor Sie die Methode zur Generierung fundierter Antworten verwenden, sollten Sie sich mit den Eingaben und Ausgaben, der Strukturierung Ihrer Anfrage und der RAG-bezogenen Terminologie vertraut machen.

RAG-Begriffe

RAG ist eine Methode, mit der Large Language Models (LLMs) Antworten generieren können, die auf Ihrer ausgewählten Datenquelle basieren. Es gibt zwei Phasen in RAG:

  1. Abruf: Es kann ein häufiges Problem bei der Suche sein, schnell die relevantesten Fakten zu erhalten. Mit RAG können Sie schnell die Fakten abrufen, die für die Beantwortung einer Frage wichtig sind.
  2. Generierung:Das LLM verwendet die abgerufenen Fakten, um eine fundierte Antwort zu generieren.

Daher ruft die Methode zum Generieren fundierter Antworten die Fakten aus der Fundierungsquelle ab und generiert eine fundierte Antwort.

Eingabedaten

Für die Methode zur Generierung fundierter Antworten sind die folgenden Eingaben in der Anfrage erforderlich:

  • Role: Der Absender eines bestimmten Textes, entweder ein Nutzer (user) oder ein Modell (model).

  • Text: Wenn die Rolle user ist, ist der Text ein Prompt. Wenn die Rolle model ist, ist der Text eine fundierte Antwort. So geben Sie die Rolle und den Text in einer Anfrage an:

    • Bei der Generierung einer Antwort mit nur einem Beitrag sendet der Nutzer den Prompttext in der Anfrage und das Modell sendet den Antworttext in der Antwort.
    • Bei der Generierung einer Antwort mit mehreren Gesprächsrunden enthält die Anfrage das Prompt-Antwort-Paar für alle vorherigen Gesprächsrunden und den Prompttext des Nutzers für die aktuelle Gesprächsrunde. Daher ist in einer solchen Anfrage die Rolle user für den Prompttext und model für den Antworttext.
  • Systemanweisung: Eine Präambel zu Ihrem Prompt, die das Verhalten des Modells steuert und die Ausgabe entsprechend anpasst. Sie können der generierten Antwort beispielsweise eine Persona hinzufügen oder das Modell anweisen, den Ausgabetext auf eine bestimmte Weise zu formatieren. Wenn Sie Antworten mit mehreren Antworten generieren möchten, müssen Sie dem System für jeden Zug Anweisungen geben. Weitere Informationen finden Sie unter Anleitung zum Verwenden des Systems.

  • Fundierungsquelle: Die Quelle, auf die die Antwort basiert. Dies kann eine oder mehrere der folgenden Quellen sein:

    • Google Suche: Antworten mit Google-Suchergebnissen fundieren. Wenn die Referenzquelle die Google Suche ist, können Sie eine Konfiguration für den dynamischen Abruf mit einem Grenzwert für den dynamischen Abruf angeben. Weitere Informationen finden Sie unter Dynamische Abfrage.

    • Inline-Text: Begründen Sie die Antwort mit Faktentext, der in der Anfrage enthalten ist. Ein Faktentext ist eine von Nutzern bereitgestellte Aussage, die für eine bestimmte Anfrage als sachlich betrachtet wird. Das Modell prüft nicht die Authentizität des Faktentexts. Sie können in jeder Inline-Textquelle maximal 100 Sachtexte angeben. Die Faktentexte können mit Meta-Attributen wie Titel, Autor und URI unterstützt werden. Diese Meta-Attribute werden in der Antwort zurückgegeben, wenn die Antwortblöcke zitiert werden.

    • Vertex AI Search-Datenspeicher: Die Antwort wird auf den Dokumenten aus Vertex AI Search-Datenspeichern begründet. Sie können keinen Websitesuchdatenspeicher als Referenzquelle angeben.

    In einer Anfrage können Sie sowohl eine Inline-Textquelle als auch eine Vertex AI Search-Datenspeicherquelle angeben. Die Google Suche kann nicht mit diesen Quellen kombiniert werden. Wenn Sie Ihre Antworten also mit Google-Suchergebnissen fundieren möchten, müssen Sie einen separaten Antrag senden, in dem die Google Suche als einzige Fundierungsquelle angegeben ist.

    Sie können maximal 10 Erdungsquellen in beliebiger Reihenfolge angeben. Angenommen, Sie geben die Erdungsquellen mit der folgenden Anzahl und in der folgenden Reihenfolge an, um insgesamt 10 Erdungsquellen zu erhalten:

    • Drei Inline-Textquellen, die jeweils maximal 100 Sachtexte enthalten können
    • Sechs Vertex AI Search-Datenspeicher
    • Vier Inline-Textquellen, die jeweils maximal 100 Sachtexte enthalten können

    Jede Quelle erhält einen Index in der Reihenfolge, in der sie in der Anfrage angegeben ist. Wenn Sie in Ihrer Anfrage beispielsweise eine Kombination von Quellen angegeben haben, wird der Quellindex wie in der folgenden Tabelle dargestellt zugewiesen:

    Fundierungsquelle Index
    Inline-Text 1 0
    Inline-Text 2 1
    Vertex AI Search-Datenspeicher 1 2
    Inline-Text 3 3
    Vertex AI Search-Datenspeicher 2 4

    Dieser Index wird in der Antwort zitiert und ist hilfreich, um die Herkunft zu ermitteln.

  • Generierungsspezifikationen: Die Spezifikationen für die Modellkonfiguration, die aus den folgenden Informationen bestehen:

    • Modell-ID: Gibt das Vertex AI Gemini-Modell an, das für die Antwortgenerierung verwendet werden soll. Eine Liste der Modelle, mit denen Sie fundierte Antworten generieren können, finden Sie unter Unterstützte Modelle.
    • Modellparameter: Hier können Sie die Parameter für das ausgewählte Modell festlegen. Das sind die Parameter „Sprache“, „Temperatur“, „Top-P“ und „Top-K“. Weitere Informationen zu diesen Parametern finden Sie unter Gemini-Modellparameter.

Ausgabedaten

Die vom Modell generierte Antwort wird als Kandidat bezeichnet und enthält die folgenden Daten. Möglicherweise sind nicht alle Felder in der Ausgabe enthalten.

  • Role: Der Absender der begründeten Antwort. Die Antwort enthält immer den begründeten Antworttext. Daher ist die Rolle in einer Antwort immer ein Modell.

  • Text: Eine fundierte Antwort.

  • Befundungsbewertung: Ein Gleitkommawert im Bereich [0, 1], der angibt, wie gut eine Antwort auf den angegebenen Quellen basiert.

  • Erdungsmetadaten: Metadaten zur Erdungsquelle. Die Metadaten für die Erdung enthalten die folgenden Informationen:

    • Unterstützende Snippets: Eine Liste von Snippets, die die Antwort unterstützen. Jedem Support-Chunk wird ein Support-Chunk-Index zugewiesen, der beim Zurückverfolgen der Provenienz hilfreich ist. Jeder Support-Chunk enthält Folgendes:

      • Textblock: Ein Textabschnitt, der wörtlich aus der Quelle zitiert wird, aus der die Antwort oder ein Teil der Antwort (Text des Anspruchs) extrahiert wird. Dieser Wert ist möglicherweise nicht immer in der Antwort enthalten.
      • Quelle: Ein Index, der der Quelle in der Anfrage zugewiesen ist.
      • Quellmetadaten: Metadaten zum Chunk. Je nach Quelle können die Quellmetadaten eine der folgenden Optionen sein:

        • Bei einer Inline-Quelle können die Metadaten die zusätzlichen Details sein, die in der Anfrage angegeben wurden, z. B. Titel, Autor oder URI.
        • Für den Vertex AI Search-Datenspeicher können die Metadaten die Dokument-ID, der Dokumenttitel, der URI (Cloud Storage-Speicherort) oder die Seitennummer sein.
        • Wenn bei der Fundierung mit der Google Suche ein fundiertes Ergebnis generiert wird, enthalten die Metadaten einen URI, der zum Verlag bzw. Webpublisher der Inhalte weiterleitet, die zum Generieren des fundierten Ergebnisses verwendet wurden. Die Metadaten enthalten auch die Domain des Publishers. Die angegebenen URIs sind bis zu 30 Tage lang nach der Generierung des gefundeten Ergebnisses zugänglich.
    • Belege: Informationen zur Begründung einer Behauptung in der Antwort. Der Grounding-Support enthält die folgenden Informationen:

      • Behauptungstext: Die Antwort oder ein Teil der Antwort, der durch den Text des Support-Chunks belegt wird.
      • Index des Unterstützungs-Chunks: Ein Index, der dem Unterstützungs-Chunk in der Reihenfolge zugewiesen wird, in der der Chunk in der Liste der Unterstützungs-Chunks erscheint.
      • Websuchanfragen: Die vorgeschlagenen Suchanfragen für die Google-Suchvorschläge.
      • Suchvorschläge: Wenn Sie Google-Suchvorschläge mit einer Antwort erhalten, ist diese Antwort ein „fundiertes Ergebnis“, das den Nutzungsbedingungen für die Fundierung mit der Google Suche unterliegt. Weitere Informationen finden Sie in den Nutzungsbedingungen für den Dienst . Das Feld renderedContent im Feld searchEntryPoint ist der bereitgestellte Code zur Implementierung von Google-Suchvorschlägen. Weitere Informationen finden Sie unter Google-Suchvorschläge verwenden.

Eine fundierte Antwort in einer einzigen Antwortrunde generieren

In diesem Abschnitt wird beschrieben, wie Antworten auf der Grundlage der folgenden Quellen generiert werden:

Antwort auf Inline-Text und Vertex AI Search-Datenspeicher fundieren

Im folgenden Beispiel wird gezeigt, wie Prompttext gesendet wird, indem ein Inlinetext und ein Vertex AI Search-Datenspeicher als Fundierungsquelle angegeben werden. Sie können keinen Website-Suchdatenspeicher als Referenzquelle angeben. In diesem Beispiel wird die Methode generateGroundedContent verwendet.

REST

  1. Senden Sie den Prompt in der folgenden curl-Anfrage.

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

    Ersetzen Sie Folgendes:

    • PROJECT_NUMBER: die Nummer Ihres Google Cloud-Projekts.
    • PROMPT_TEXT: die Aufforderung des Nutzers.
    • SYSTEM_INSTRUCTION: Ein optionales Feld, um eine Präambel oder zusätzlichen Kontext anzugeben.
    • FACT_TEXT_N: den Inline-Text, der die Antwort untermauert. Sie können maximal 100 Sachtexte angeben.
    • TITLE_N: Optionales Feld zum Festlegen des Titel-Metaattributs für den Inline-Text.
    • URI_N: Optionales Feld zum Festlegen des URI-Metaattributs für den Inline-Text.
    • AUTHOR_N: Ein optionales Feld, um das Metaattribut „Autor“ für den Inline-Text festzulegen.
    • APP_ID_N: die ID der Vertex AI Search-Anwendung.
    • MODEL_ID: Optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren der fundierten Antwort verwenden möchten. Eine Liste der verfügbaren Modell-IDs finden Sie unter Unterstützte Modelle.
    • TEMPERATURE: Optionales Feld zum Festlegen der Temperatur, die für die Stichprobenerhebung verwendet wird. Google empfiehlt eine Temperatur von 0,0. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_P: Optionales Feld zum Festlegen des höchsten P-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_K: Optionales Feld zum Festlegen des Top-K-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.

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)

Beispiel für die Generierung von Antworten mit nur einer Antwortrunde, die auf Inline-Text und Vertex AI Search basiert

Im folgenden Beispiel werden in der Anfrage die folgenden Datenquellen für die Wissensbasis angegeben: ein Inline-Textfakt und ein Vertex AI Search-Datenspeicher. In diesem Beispiel wird die Methode generateGroundedContent verwendet. In diesem Beispiel wird auch eine Systemanweisung verwendet, um die Antwort mit einem Smiley-Emoji zu beenden.

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

Fundierte Antwort mit der Google Suche generieren

Sie können die generierten Antworten mit öffentlich verfügbaren Webdaten fundieren.

Dynamische Abfrage

Mithilfe des dynamischen Abrufs in Ihrer Anfrage können Sie festlegen, wann die Funktion „Fundierung mit der Google Suche“ deaktiviert werden soll. Das ist nützlich, wenn für den Prompt keine Antwort erforderlich ist, die auf der Google Suche basiert, und die unterstützten Modelle eine Antwort auf der Grundlage ihres Wissens ohne Ground Truth liefern können. So lassen sich Latenz, Qualität und Kosten effizienter verwalten.

Wert und Grenzwert für die dynamische Abrufvorhersage

Wenn Sie eine Anfrage zum Generieren einer fundierten Antwort senden, weist Vertex AI Agent Builder dem Prompt einen Vorhersagewert zu. Der Vorhersagewert ist ein Gleitkommawert im Bereich [0,1]. Der Wert hängt davon ab, ob die Antwort auf den Prompt durch die aktuellsten Informationen aus der Google Suche fundiert werden kann. Daher hat eine Aufforderung, die eine Antwort erfordert, die auf den neuesten Fakten im Web basiert, eine höhere Vorhersagebewertung. Eine Aufforderung, für die eine vom Modell generierte Antwort ausreicht, hat eine niedrigere Vorhersagebewertung.

Hier sind einige Beispiele für Prompts und ihre Vorhersagewerte.

Prompt Vorhersagewert Kommentar
„Schreib ein Gedicht über Pfingstrosen“ 0,13 Das Modell kann auf sein Wissen zurückgreifen und die Antwort muss nicht fundiert werden.
„Empfehle mir ein Spielzeug für ein zweijähriges Kind“ 0,36 Das Modell kann auf sein Wissen zurückgreifen und die Antwort muss nicht fundiert werden.
„Kannst du mir ein Rezept für eine asiatisch inspirierte Guacamole nennen?“ 0,55 Die Google Suche kann eine fundierte Antwort geben, eine Fundierung ist jedoch nicht unbedingt erforderlich. Das Modellwissen ist möglicherweise ausreichend.
„Was ist Agent Builder? Wie wird die Fundierung in Agent Builder abgerechnet?“ 0,72 Erfordert die Google Suche, um eine fundierte Antwort zu generieren
„Wer hat den letzten Formel-1-Grand-Prix gewonnen?“ 0,97 Erfordert die Google Suche, um eine fundierte Antwort zu generieren

In Ihrer Anfrage zur Generierung fundierter Antworten können Sie eine dynamische Abrufkonfiguration mit einem Grenzwert angeben. Der Schwellenwert ist ein Gleitkommawert im Bereich [0,1] und hat den Standardwert 0,7. Wenn der Grenzwert null ist, basiert die Antwort immer auf der Google Suche. Für alle anderen Grenzwerte gilt Folgendes:

  • Wenn der Vorhersagewert den Schwellenwert erreicht oder überschreitet, wird die Antwort auf der Google Suche gestützt. Ein niedrigerer Schwellenwert bedeutet, dass für mehr Prompts Antworten mithilfe der Google Suche generiert werden.
  • Wenn der Vorhersagewert unter dem Grenzwert liegt, generiert das Modell die Antwort möglicherweise trotzdem, sie basiert aber nicht auf der Google Suche.

Um einen geeigneten Schwellenwert für Ihre Geschäftsanforderungen zu finden, können Sie eine repräsentative Reihe von Suchanfragen erstellen, die Sie voraussichtlich erhalten werden. Anschließend können Sie die Abfragen nach dem Vorhersagewert in der Antwort sortieren und einen geeigneten Grenzwert für Ihren Anwendungsfall auswählen.

Antwort mit der Google Suche fundieren

Im folgenden Beispiel wird gezeigt, wie eine fundierte Antwort aus einem Prompt generiert wird, indem die Google Suche als Grundlage angegeben wird. In diesem Beispiel wird die Methode generateGroundedContent verwendet.

REST

  1. Senden Sie den Prompt in der folgenden curl-Anfrage.

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

    Ersetzen Sie Folgendes:

    • PROJECT_NUMBER: die Nummer Ihres Google Cloud-Projekts.
    • PROMPT_TEXT: die Aufforderung des Nutzers.
    • SYSTEM_INSTRUCTION: Ein optionales Feld, um eine Präambel oder zusätzlichen Kontext anzugeben.
    • MODEL_ID: Optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren der fundierten Antwort verwenden möchten. Eine Liste der verfügbaren Modell-IDs finden Sie unter Unterstützte Modelle.
    • TEMPERATURE: Optionales Feld zum Festlegen der Temperatur, die für die Stichprobenerhebung verwendet wird. Google empfiehlt eine Temperatur von 0,0. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_P: Optionales Feld zum Festlegen des höchsten P-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_K: Optionales Feld zum Festlegen des Top-K-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • DYNAMIC_RETRIEVAL_THRESHOLD: Optionales Feld zum Festlegen des Schwellenwerts für die dynamische Abrufkonfiguration. Es ist ein Gleitkommawert im Bereich [0,1]. Wenn Sie das Feld dynamicRetrievalConfig hinzufügen, aber das Feld predictor oder threshold nicht festlegen, wird der Grenzwert standardmäßig auf 0,7 festgelegt. Wenn Sie das Feld dynamicRetrievalConfig nicht festlegen, ist die Antwort immer geerdet.

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)

Im folgenden Beispiel wird in der Anfrage die Google Suche als Referenzquelle angegeben. In diesem Beispiel wird die Methode generateGroundedContent verwendet. In diesem Beispiel wird auch eine Systemanweisung verwendet, um die Antwort mit einem Smiley-Emoji zu beenden.

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

Fundierte Antworten in mehreren Gesprächsrunden generieren

Bei der Generierung von Antworten mit mehreren Antworten müssen Sie in jeder Anfrage den gesamten Text senden, der in allen vorherigen Runden zwischen dem Nutzer und dem Modell ausgetauscht wurde. So wird für Kontinuität gesorgt und der Kontext für die Generierung der Antwort auf den letzten Prompt beibehalten.

So erhalten Sie eine fundierte Antwort durch die Generierung mehrerer Antworten:

REST

In den folgenden Beispielen wird gezeigt, wie Sie Prompttexte für den Anschluss an mehrere Gesprächsrunden senden. In diesen Beispielen wird die generateGroundedContent-Methode verwendet und die Antworten werden mit der Google Suche fundiert. Sie können ähnliche Schritte ausführen, um fundierte Antworten mit anderen Quellen zu generieren.

  1. Senden Sie den ersten Prompt in der folgenden curl-Anfrage.

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

    Ersetzen Sie Folgendes:

    • PROJECT_NUMBER: die Nummer Ihres Google Cloud-Projekts.
    • PROMPT_TEXT_TURN_1: den Prompt-Text des Nutzers in der ersten Runde.
    • SYSTEM_INSTRUCTION_TURN_1: Ein optionales Feld, um eine Präambel oder zusätzlichen Kontext anzugeben. Wenn Sie Antworten mit mehreren Antworten generieren möchten, müssen Sie für jede Antwort die Systemanweisungen angeben.
    • MODEL_ID: Optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren der fundierten Antwort verwenden möchten. Eine Liste der verfügbaren Modell-IDs finden Sie unter Unterstützte Modelle.
    • TEMPERATURE: Optionales Feld zum Festlegen der Temperatur, die für die Stichprobenerhebung verwendet wird. Google empfiehlt eine Temperatur von 0,0. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_P: Optionales Feld zum Festlegen des höchsten P-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_K: Optionales Feld zum Festlegen des Top-K-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
  2. Senden Sie den zweiten Prompt als Follow-up. Fügen Sie als Kontext den ersten Prompt des Nutzers und die entsprechende Antwort des Modells hinzu.

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

    Ersetzen Sie Folgendes:

    • PROJECT_NUMBER: die Nummer Ihres Google Cloud-Projekts.
    • PROMPT_TEXT_TURN_1: den Prompt-Text des Nutzers in der ersten Runde.
    • ANSWER_TEXT_TURN_1: Der Antworttext aus dem Modell in der ersten Runde.
    • PROMPT_TEXT_TURN_2: Der Prompt-Text des Nutzers in der zweiten Runde.
    • SYSTEM_INSTRUCTION_TURN_2: Ein optionales Feld, um eine Präambel oder zusätzlichen Kontext anzugeben. Wenn Sie Antworten mit mehreren Antworten generieren möchten, müssen Sie für jeden Zug die Systemanweisungen angeben.
    • MODEL_ID: Optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren der fundierten Antwort verwenden möchten. Eine Liste der verfügbaren Modell-IDs finden Sie unter Unterstützte Modelle.
    • TEMPERATURE: Optionales Feld zum Festlegen der Temperatur, die für die Stichprobenerhebung verwendet wird. Google empfiehlt eine Temperatur von 0,0. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_P: Optionales Feld zum Festlegen des höchsten P-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_K: Optionales Feld zum Festlegen des Top-K-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
  3. Wiederholen Sie diesen Vorgang, um weitere Antworten zu erhalten. Fügen Sie in jeder Runde alle vorherigen Prompts des Nutzers hinzu, gefolgt von den entsprechenden Antworten des Modells.

Beispiel für die Generierung von Antworten in mehreren Schritten

Im folgenden Beispiel werden in der Anfrage drei Inline-Faktentexte als Grundlage für die Generierung von Antworten über zwei Gesprächsrunden angegeben. In diesem Beispiel wird die Methode generateGroundedContent verwendet. In diesem Beispiel wird auch eine Systemanweisung verwendet, um die Antwort in der ersten Runde mit einem Smiley-Emoji zu beenden.

REST

  1. Senden Sie den ersten Prompt in der folgenden curl-Anfrage.

    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. Senden Sie den zweiten Prompt als Follow-up. Fügen Sie als Kontext den ersten Prompt des Nutzers und die entsprechende Antwort des Modells hinzu.

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

Antworten mit Faktenbasis streamen

Sie können die Antworten aus dem Modell streamen. Das ist in Fällen nützlich, in denen die Antwort besonders lang ist und das Senden der gesamten Antwort auf einmal zu einer erheblichen Verzögerung führt. Beim Streamen der Antwort wird die Antwort in ein Array mehrerer Kandidaten aufgeteilt, die aufeinanderfolgende Teile des Antworttexts enthalten.

So erhalten Sie eine gestreamte, fundierte Antwort:

REST

Im folgenden Beispiel wird gezeigt, wie eine fundierte Antwort gestreamt wird. In diesem Beispiel wird die Methode streamGenerateGroundedContent verwendet und die Antwort wird ohne die Konfiguration für die dynamische Abfrage aus der Google Suche abgerufen. Sie können ähnliche Schritte ausführen, um fundierte Antworten mit anderen Quellen zu generieren.

  1. Senden Sie den Prompt in der folgenden curl-Anfrage.

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

    Ersetzen Sie Folgendes:

    • PROJECT_NUMBER: die Nummer Ihres Google Cloud-Projekts.
    • PROMPT_TEXT: die Aufforderung des Nutzers.
    • SYSTEM_INSTRUCTION: Ein optionales Feld, um eine Präambel oder zusätzlichen Kontext anzugeben.
    • MODEL_ID: Optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren der fundierten Antwort verwenden möchten. Eine Liste der verfügbaren Modell-IDs finden Sie unter Unterstützte Modelle.
    • TEMPERATURE: Optionales Feld zum Festlegen der Temperatur, die für die Stichprobenerhebung verwendet wird. Google empfiehlt eine Temperatur von 0,0. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_P: Optionales Feld zum Festlegen des höchsten P-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_K: Optionales Feld zum Festlegen des Top-K-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.

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)

Beispiel für das Streaming fundierter Antworten

Im folgenden Beispiel wird in der Anfrage die Google Suche als Referenzquelle angegeben, um eine Antwort ohne die Konfiguration für die dynamische Abfrage zu streamen. Die gestreamte Antwort wird auf mehrere Antwortkandidaten verteilt. In diesem Beispiel wird die Methode streamGenerateGroundedContent verwendet.

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

Unterstützte Modelle

Die folgenden Modelle unterstützen Grounding:

  • Gemini 1.5 Pro nur mit Texteingabe
  • Gemini 1.5 Flash nur mit Texteingabe
  • Gemini 1.0 Pro nur mit Texteingabe

Weitere Informationen zu diesen Gemini-Modellen finden Sie unter Modellversionen und Lebenszyklus.

Wenn Sie die Methode generateGroundedContent aufrufen, können Sie die folgenden Modell-IDs verwenden:

Modell-ID Automatische Aktualisierung
default Ja
gemini-1.0-pro Ja
gemini-1.0-pro-001 Nein
gemini-1.0-pro-002 Nein
gemini-1.5-flash Ja
gemini-1.5-flash-001 Nein
gemini-1.5-pro Ja
gemini-1.5-pro-001 Nein

Nächste Schritte

Hier erfahren Sie, wie Sie die Methode zur fundierten Generierung mit anderen RAG-APIs verwenden, um fundierte Antworten aus unstrukturierten Daten zu generieren.