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 Kontextualisierung 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 das dynamische Abrufen Konfiguration bewertet, ob für einen Prompt Kenntnisse über aktuelle und ermöglicht die Fundierung mit der Google Suche. Weitere Informationen finden Sie unter Dynamische Abfrage.
  • Inline-Text: Verwenden Sie die Fundierung mit Inline-Text, um die Antwort in Stücken zu gliedern. Faktentext genannt, die die in der Anfrage angegeben sind. Ein Faktentext ist eine vom Nutzer bereitgestellte Aussage, für einen bestimmten Antrag als faktisch erachtet werden. Das Modell prüft nicht die Authentizität des Faktentexts.
  • Vertex AI Search-Datenspeicher: Fundierung verwenden mit Vertex AI Search, wenn Sie das Modell mit Ihrem Unternehmensdokumente aus Vertex AI Search-Datenspeichern.

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, . 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, die auf der Datenquelle Ihrer Wahl basieren. Es gibt zwei Phasen in RAG:

  1. Abrufen: Häufig erhalten Sie schnell die relevantesten Fakten. Suchproblem. Mit RAG können Sie schnell die Fakten abrufen, eine Antwort zu geben.
  2. Generierung:Die abgerufenen Fakten werden vom LLM verwendet, um ein eine fundierte Antwort geben.

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:

  • Rolle: Der Absender eines bestimmten Textes, der entweder ein Nutzer (user) oder ein Modell ist (model)

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

    • Beim Generieren einer Antwort in einer Antwort sendet der Nutzer den Prompt-Text in der Anfrage und das Modell den Antworttext in der Antwort sendet.
    • 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 lautet die Rolle in einer solchen Anfrage user. für einen Prompt-Text und model für den Antworttext.
  • Systemanweisung: Eine Präambel Ihres Prompts, mit der das Verhalten Ihres und ändert die Ausgabe entsprechend. 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: Fundieren Sie die Antworten mit Google-Suchergebnissen. 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 Dynamisches Abrufen.

    • Inline-Text: Begründen Sie die Antwort mit Faktentext, der in der Anfrage enthalten ist. Ein Faktentext ist eine vom Nutzer bereitgestellte Aussage, für einen bestimmten Antrag als faktisch erachtet werden. Das Modell prüft nicht die Authentizität des Faktentexts. Du kannst pro Inline-Text maximal 100 Faktentexte angeben Quelle. Die Tatsache, dass Texte mithilfe von Meta-Attributen unterstützt werden können, z. B. Titel, Autor und URI. Diese Meta-Attribute werden in der Antwort zurückgegeben, wenn die Antwortblöcke zitiert werden.

    • Vertex AI Search-Datenspeicher: Antworten in Dokumenten stützen aus Vertex AI Search-Datenspeichern.

    In einer Anfrage können Sie sowohl eine Inline-Textquelle als auch eine Vertex AI Search-Datenspeicherquelle. Sie können nicht in der Google Suche mit einer dieser Quellen suchen. Wenn Sie also Ihre Antworten auf Google-Suchergebnisse zu stützen, müssen Sie eine separate Anfrage, in der die Google Suche als einzige Grundlage angegeben wird Quelle.

    Sie können maximal zehn Fundierungsquellen in beliebiger Reihenfolge angeben. Beispiel: Angenommen, Sie geben für die Fundierungsquellen die folgende Anzahl an: in der folgenden Reihenfolge, um insgesamt zehn Fundierungsquellen zu erhalten:

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

    Jeder Quelle wird ein Index in der Reihenfolge zugewiesen, in der sie im 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 Nr. 1 2
    Inline-Text Nr. 3 3
    Vertex AI Search-Datenspeicher Nr. 2 4

    Dieser Index wird in der Antwort zitiert und ist hilfreich bei der Nachverfolgung Herkunft.

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

    • Model ID (Modell-ID): Gibt das zu verwendende Gemini-Modell von Vertex AI an zum Generieren von Antworten. Eine Liste der Modelle, die Sie zum Generieren Informationen zu fundierten Antworten finden Sie unter Unterstützte Modelle.
    • Modellparameter: Geben Sie die Parameter an, die für das Modell festgelegt werden können. die Sie verwenden. Diese Parameter sind „language“, „temperature“, „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.

  • Rolle: Der Absender der fundierten Antwort. Die Antwort enthält immer den einen fundierten 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.

  • Funding-Metadaten: Metadaten zur Fundierungsquelle. Fundierungsmetadaten enthält die folgenden Informationen:

    • Support-Chunks: Eine Liste von Blöcken, die die Antwort unterstützen. Jedes Support-Chunk wird ein Support-Chunk-Index zugewiesen, der hilfreich ist, Nachverfolgen der Herkunft. 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 (Behauptungstext) 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 Block. Je nach Quelle Bei den Quellmetadaten kann es sich um einen der folgenden Datentypen handeln:

        • 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 bleiben zugänglich bis zu 30 Tage lang verfügbar, nachdem das fundierte Ergebnis generiert wurde.
    • Belege: Informationen zur Begründung einer Behauptung in der Antwort. Der Grounding-Support enthält die folgenden Informationen:

      • Anspruchstext: Die Antwort oder ein Teil der Antwort, die bestätigt wurde. durch den unterstützenden Textblock.
      • Support-Chunkindex: Ein Index, der dem Support-Chunk im Reihenfolge, in der der Chunk in der Liste der Support-Chunks angezeigt wird.
      • Websuchanfragen: die vorgeschlagenen Suchanfragen für die Google-Suchvorschläge.
      • Suchvorschläge: Wenn du Google-Suchvorschläge zusammen mit einer Antwort, die eine "fundierte Antwort" ist Ergebnis“ unterliegen den Nutzungsbedingungen für die Fundierung mit der Google Suche. 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. Bis Google-Suchvorschläge verwenden (siehe Google-Suche verwenden) Vorschläge:

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. In diesem Beispiel wird die Methode generateGroundedContent verwendet.

REST

  1. Senden Sie die Aufforderung 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: der Aufforderung des Nutzers.
    • SYSTEM_INSTRUCTION: ein optionales Feld für eine Präambel oder zusätzlichen Kontext.
    • FACT_TEXT_N: den Inline-Text, um die Antwort zu untermauern. Sie können maximal 100 Sachtexte angeben.
    • TITLE_N: Ein optionales Feld, um das Meta-Attribut „Titel“ für den Inline-Text festzulegen.
    • URI_N: Ein optionales Feld, um das URI-Metaattribut für den Inline-Text festzulegen.
    • 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: Ein optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren des fundierte Antwort geben. 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 Gemini-Modell Parameter.
    • TOP_P: ein optionales Feld zum Festlegen des Top-P-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_K: Ein 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 gibt die Anfrage Folgendes an: Fundierungsquellen: ein Inline-Text 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 Antworten mit der Google Suche generieren

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

Dynamische Abfrage

Sie können in Ihrer Anfrage dynamisches Abrufen verwenden, um festzulegen, wann die Erdung deaktiviert werden soll mit der Google Suche. Dies ist nützlich, wenn für die Aufforderung keine eine Antwort, die sich auf die Google Suche und die unterstützte Modelle können eine Antwort basierend auf ihren ohne Grundkenntnisse. So können Sie Latenz, Qualität und kosteneffizienter.

Wert und Grenzwert für die dynamische Abrufvorhersage

Wenn Sie eine Anfrage zum Generieren einer fundierten Antwort senden, weist Vertex AI Agent Builder eine Vorhersagewert zur Eingabeaufforderung. Der Vorhersagewert ist ein Gleitkommawert im Bereich [0,1]. Sein Wert hängt davon ab, ob die Aufforderung kann davon profitieren, die Antwort mit dem aktuellsten Informationen aus der Google Suche. Daher kann eine Aufforderung, die ein Antwort, die auf den neuesten Fakten im Web basiert, eine höhere Vorhersage Punktzahl, und eine Aufforderung, für die eine vom Modell generierte Antwort ausreicht, hat eine niedrigere Vorhersagewert.

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

Prompt Vorhersagewert Kommentar
„Schreib ein Gedicht über Pfingstrosen“ 0,13 Das Modell kann sich auf sein Wissen verlassen und die Antwort muss nicht begründet werden
„Empfiehl 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.
„Können Sie mir ein Rezept für eine asiatisch inspirierte Guacamole geben?“ 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 Fundierung in Agent Builder abgerechnet?“ 0.72 Erfordert die Google Suche, um eine fundierte Antwort zu generieren
„Wer hat den neuesten Grand Prix der Formel 1 gewonnen?“ 0.97 Erfordert die Google Suche, um eine fundierte Antwort zu generieren

In Ihrer Anfrage zum Generieren von fundierten Antworten können Sie einen dynamischen Abruf Konfiguration mit einem Schwellenwert. Der Grenzwert 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 Schwellenwerte gilt Folgendes:

  • Wenn der Vorhersagewert den Schwellenwert erreicht oder überschreitet, wird die Antwort auf der Google Suche basiert. Ein niedrigerer Grenzwert 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 Grenzwert für Ihre geschäftlichen Anforderungen 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.

Fundierte Antworten mit der Google Suche

Im folgenden Beispiel wird gezeigt, wie Sie anhand eines Prompts eine fundierte Antwort generieren, indem Sie Google Suche als Fundierungsquelle angeben. In diesem Beispiel wird die Methode generateGroundedContent-Methode.

REST

  1. Senden Sie die Aufforderung 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: der 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 Gemini-Modell Parameter.
    • TOP_P: ein optionales Feld zum Festlegen des Top-P-Werts für das Modell. Weitere Informationen finden Sie unter Gemini-Modell Parameter.
    • TOP_K: Optionales Feld zum Festlegen des Top-K-Werts für das Modell. Weitere Informationen finden Sie unter Gemini-Modell Parameter.
    • DYNAMIC_RETRIEVAL_THRESHOLD: ein optionales Feld zum Festlegen des Schwellenwerts um die Konfiguration für den dynamischen Abruf aufzurufen. Es ist ein Gleitkommawert Wert im Bereich [0,1]. Wenn du den dynamicRetrievalConfig hinzufügst Wenn Sie das Feld predictor oder threshold jedoch nicht festlegen, der Standardwert für den Grenzwert auf 0,7. Wenn Sie das dynamicRetrievalConfig ist die Antwort immer fundiert.

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 die als Fundament dient. In diesem Beispiel wird die Methode generateGroundedContent verwendet. In diesem Beispiel endet die Antwort mit einer Systemanweisung mit einem Smiley-Emoji

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 Antwort in mehreren Runden generieren

Beim Generieren von Antworten in mehreren Schritten müssen Sie in jeder Anfrage den gesamten Text zwischen Nutzer und Modell ausgetauscht. Dies sorgt für Kontinuität und stellt den Kontext bereit, um eine Antwort auf die Frage zu generieren. letzten Prompts.

So erhalten Sie eine fundierte Antwort durch das Generieren von Antworten in mehreren Schritten:

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 verwenden, um mithilfe anderer Quellen fundierte Antworten 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: der 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: Ein optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren des fundierte Antwort geben. Eine Liste der verfügbaren Modell-IDs finden Sie unter Unterstützte Modelle.
    • TEMPERATURE: Ein optionales Feld zum Einstellen der Temperatur, die für die Probenahme verwendet werden soll. Google empfiehlt eine Temperatur von 0,0. Weitere Informationen finden Sie unter Gemini-Modell Parameter.
    • TOP_P: Optionales Feld zum Festlegen des höchsten P-Werts für das Modell. Weitere Informationen finden Sie unter Gemini-Modell Parameter.
    • TOP_K: Ein 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 Folgefrage. Hinzufügen die erste Aufforderung des Nutzers, gefolgt von der entsprechenden Antwort um Kontext zu erhalten.

    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 für eine Präambel oder zusätzlichen Kontext. Für Antworten in mehreren Schritten erstellen, müssen Sie die Systemanweisungen für jede Abzweigung bereitstellen.
    • MODEL_ID: Ein optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren des fundierte Antwort geben. 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: Ein 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 die vorherigen Aufforderungen des Nutzers gefolgt von den entsprechenden Antworten aus dem Modell.

Beispiel für das Generieren 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. Dieses Im 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 die erste Aufforderung 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 Folgefrage. Hinzufügen die erste Aufforderung des Nutzers, gefolgt von der entsprechenden Antwort um Kontext zu erhalten.

    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. Dies ist nützlich in diesen Anwendungsfälle, bei denen die Antwort besonders lang ist und die gesamte Antwort gesendet wird zu einer erheblichen Verzögerung. 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 auf der Google Suche basiert. 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: der Aufforderung des Nutzers.
    • SYSTEM_INSTRUCTION: Ein optionales Feld, um eine Präambel oder zusätzlichen Kontext anzugeben.
    • MODEL_ID: Ein optionales Feld zum Festlegen der Modell-ID des Gemini-Modells, das Sie zum Generieren des fundierte Antwort geben. 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: ein optionales Feld zum Festlegen des Top-P-Werts für das Modell. Weitere Informationen finden Sie unter Parameter für das Gemini-Modell.
    • TOP_K: Ein optionales Feld zum Festlegen des Top-K-Werts für das Modell. Weitere Informationen finden Sie unter Gemini-Modell Parameter.

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 Streamen von fundierten 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 Antworten verteilt. zu bewerben. 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 Gemini-Modellversionen und -Lebenszyklus

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

Modell-ID Automatisch aktualisiert
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.