Antworten mit weiterführenden Fragen erhalten

Auf dieser Seite wird die Suche mit Antwort und weiterführenden Fragen für Gemini Enterprise vorgestellt und gezeigt, wie Sie sie mit Methodenaufrufen implementieren.

Die Suche mit Antwort und weiterführenden Fragen basiert auf der Antwortmethode. Die Antwortmethode bietet auch einige wichtige Zusatzfunktionen wie die Verarbeitung komplexer Abfragen.

Funktionen der Antwortmethode

Die wichtigsten Merkmale der Antwortmethode sind:

  • Die Fähigkeit, Antworten auf komplexe Abfragen zu generieren. Die Antwortmethode kann beispielsweise zusammengesetzte Abfragen wie die folgende in mehrere kleinere Abfragen aufteilen, um bessere Ergebnisse und damit auch bessere Antworten zu liefern:

    • „Wie hoch ist der jeweilige Umsatz von Google Cloud und Google Ads im Jahr 2024?“
    • „Nach wie vielen Jahren seit der Gründung hat Google einen Umsatz von 1 Milliarde US-Dollar erreicht?“
  • Die Möglichkeit, Suche und Antwortgenerierung in einer Multi-Turn-Unterhaltung zu kombinieren, indem die Antwortmethode in jeder Runde aufgerufen wird.

  • Die Möglichkeit, die Antwortmethode mit der Suchmethode zu kombinieren, um die Suchlatenz zu verringern. Sie können die Suchmethode und die Antwortmethode separat aufrufen und die Suchergebnisse und Antworten in verschiedenen iFrames zu unterschiedlichen Zeiten rendern. Das bedeutet, dass Sie Ihren Nutzern Suchergebnisse (die 10 blauen Links) innerhalb von Millisekunden anzeigen können. Sie müssen vor der Anzeige von Suchergebnissen nicht warten, bis Antworten generiert wurden.

Die Funktionen für Antworten und weiterführende Fragen lassen sich in die drei Phasen Abfrage, Suche und Antwort unterteilen:

Wann sollte die Antwort- und wann die Suchmethode verwendet werden?

Gemini Enterprise bietet zwei Methoden zum Abfragen von Anwendungen. Sie haben unterschiedliche, aber sich überschneidende Funktionen.

Verwenden Sie die Antwortmethode in folgenden Fällen:

  • Sie möchten eine KI-generierte Antwort (oder Zusammenfassung) der Suchergebnisse erhalten.

  • Sie möchten die Multi-Turn-Suche nutzen, also eine Suche, bei der der Kontext beibehalten wird und so weiterführende Fragen möglich sind.

Verwenden Sie die Suchmethode in folgenden Fällen:

  • Sie benötigen nur Suchergebnisse, keine generierte Antwort.

  • Es sollen mehr als zehn Suchergebnisse („blaue Links“) zurückgegeben werden.

  • Sie haben eines der folgenden Elemente:

    • Eigene Einbettungen
    • Synonym- oder Weiterleitungssteuerelemente
    • Facetten
    • Ländercodes für Nutzer

Verwenden Sie die Antwort- und Suchmethode in folgenden Fällen zusammen:

  • Es sollen mehr als zehn Suchergebnisse und eine generierte Antwort zurückgegeben werden.

  • Sie haben Latenzprobleme und möchten Suchergebnisse schnell zurückgeben und aufrufen, bevor die generierte Antwort zurückgegeben wird.

Funktionen der Abfragephase

Die Funktion für Antworten und weiterführende Fragen unterstützt die Verarbeitung von Abfragen in natürlicher Sprache.

In diesem Abschnitt werden die verschiedenen Optionen für die Umformulierung und Klassifizierung von Abfragen beschrieben und veranschaulicht.

Abfrage umformulieren

Die Umformulierung von Abfragen ist standardmäßig aktiviert. Diese Funktion wählt automatisch die beste Möglichkeit zur Umformulierung von Abfragen aus, um die Suchergebnisse zu verbessern. Sie kann auch Abfragen bearbeiten, die nicht umformuliert werden müssen.

  • Komplexe Abfragen in mehrere Abfragen aufteilen und synchrone Unterabfragen ausführen.

    Beispiel: Eine komplexe Abfrage wird in vier kleinere, einfachere Abfragen unterteilt.

    Nutzereingabe Aus der komplexen Abfrage erstellte Unterabfragen
    Welche gemeinsamen Jobs und Hobbys haben Andie Ram und Arnaud Clément?
    • Andie Ram Beruf
    • Arnaud Clément Beruf
    • Andie Ram Hobby
    • Arnaud Clément Hobby
  • Multi-Turn-Abfragen synthetisieren, damit weiterführende Fragen kontextsensitiv und zustandsorientiert sind.

    Beispiel: Abfragen, die aus der Nutzereingabe in jeder Runde synthetisiert werden, könnten so aussehen:

    Nutzereingabe Synthetisierte Abfrage
    Runde 1: Laptops für die Schule Laptops für die Schule
    Runde 2: keine Macs Laptops für die Schule, keine Macs
    Runde 3: größerer Bildschirm und ich benötige außerdem eine kabellose Tastatur und Maus Laptops mit größerem Bildschirm für die Schule, keine Macs, mit kabelloser Tastatur und Maus
    Runde 4: und einen Rucksack dafür Laptops mit größerem Bildschirm für die Schule, keine Macs, mit kabelloser Tastatur und Maus und einem Rucksack dafür
  • Lange Abfragen vereinfachen, um den Abruf zu verbessern.

    Beispiel: Eine lange Abfrage wird zu einer einfachen Abfrage verkürzt.

    Nutzereingabe Vereinfachte Abfrage
    Ich möchte herausfinden, warum der Button „In den Einkaufswagen“ auf unserer Website nicht richtig funktioniert. Wenn ein Nutzer auf den Button klickt, wird der Artikel nicht in den Einkaufswagen gelegt und eine Fehlermeldung angezeigt. Ich habe den Code geprüft und er scheint korrekt zu sein. Daher bin ich mir nicht sicher, wo das Problem liegen könnte. Kannst du mir helfen, das Problem zu beheben? Der Button „In den Einkaufswagen“ funktioniert auf der Website nicht.
  • Mehrstufige Problemlösung ausführen

    Die mehrstufige Problemlösung basiert auf dem ReAct-Paradigma (Reason + Act), das es LLMs ermöglicht, komplexe Aufgaben mithilfe des Schlussfolgerns in natürlicher Sprache zu lösen. Standardmäßig sind maximal fünf Schritte möglich.

    Beispiel:

    Nutzereingabe Zwei Schritte zum Generieren der Antwort
    Nach wie vielen Jahren seit der Gründung hat Google einen Umsatz von 1 Milliarde US-Dollar erreicht? Schritt 1:
    [Gedanke]: Ich muss wissen, wann Google gegründet wurde, um dann den Umsatz seitdem abzufragen.
    [Aktion] Suche: Wann wurde Google gegründet? [Suchergebnisse beachten]: „1998“

    Schritt 2:
    [Gedanke]: Jetzt muss ich den Jahresumsatz von Google seit 1998 recherchieren und herausfinden, wann er zum ersten Mal die Milliardengrenze überschritten hat.
    [Aktion] Suche: Umsatz von Google seit 1998
    [Suchergebnisse beachten] Google-Umsatz 1998, Google-Umsatz 1999…
    [Antwort]: Google hat 2003 einen Umsatz von mehr als 1 Milliarde US-Dollar erzielt [1], fünf Jahre nach der Gründung im Jahr 1998 [2].

Abfrageklassifizierung

Mit Optionen zur Abfrageklassifizierung lassen sich schädliche Abfragen und Abfragen, die nicht auf eine Antwort abzielen, identifizieren. Optionen zur Abfrageklassifizierung sind standardmäßig deaktiviert.

Weitere Informationen zu schädlichen Abfragen und Abfragen, die nicht auf eine Antwort abzielen, finden Sie unter Schädliche Abfragen ignorieren und Abfragen ignorieren, die nicht auf eine Zusammenfassung abzielen.

Funktionen der Suchphase

Für die Suche bietet die Antwortmethode dieselben Optionen wie die Suchmethode. Beispiel:

Funktionen der Antwortphase

Während der Antwortphase, wenn Antworten aus den Suchergebnissen generiert werden, können Sie dieselben Funktionen wie bei der Suchmethode aktivieren. Beispiel:

Zusätzliche Funktionen der Antwortphase, die in der Suchmethode nicht verfügbar sind:

  • Fundierungsbewertung für jede Behauptung (jeden Satz in der generierten Antwort) abrufen. Die Fundierungsbewertung ist ein Gleitkommawert im Bereich [0,1], der angibt, wie gut die Behauptung durch die Daten im Datenspeicher gestützt wird. Weitere Informationen finden Sie unter Fundierungsbewertungen zurückgeben.

  • Aggregierte Fundierungsbewertung für die Antwort abrufen. Die Fundierungsbewertung gibt an, wie gut die Antwort durch die Daten im Datenspeicher gestützt wird. Weitere Informationen finden Sie unter Fundierungsbewertungen zurückgeben.

  • Nur gut fundierte Antworten zurückgeben. Sie können festlegen, dass nur Antworten zurückgegeben werden, die einen bestimmten Schwellenwert für die Fundierungsbewertung erreichen. Weitere Informationen finden Sie unter Nur gut fundierte Antworten anzeigen.

  • Personalisierungsinformationen in Abfragen aufnehmen, damit die Antworten für einzelne Nutzer angepasst werden können. Weitere Informationen finden Sie unter Antworten personalisieren.

Wenn Sie multimodale Antworten mit Diagrammen oder Bildern zusätzlich zum Text erhalten möchten, haben Sie folgende Möglichkeiten:

  • Antworten mit Diagrammen und Grafiken abrufen, in denen die in den Antworten enthaltenen Daten dargestellt werden. Weitere Informationen finden Sie unter Diagramme für Antworten generieren.

  • Bilder aus dem Datenspeicher abrufen. Wenn der Datenspeicher Bilder enthält, kann die Antwortmethode ein Bild in der Antwort zurückgeben. Bilder aus dem Datenspeicher können auch in Verweisen zurückgegeben werden, wenn Quellennachweise angefordert werden. Weitere Informationen finden Sie unter Vorhandene Bilder aus dem Datenspeicher abrufen.

Suchen und beantworten (einfach)

Der folgende Befehl zeigt, wie Sie die Antwortmethode aufrufen und eine generierte Antwort sowie eine Liste von Suchergebnissen mit Links zu den Quellen zurückgeben.

Dieser einfache Befehl zeigt nur die erforderliche Eingabe. Die Optionen bleiben auf ihren Standardeinstellungen.

REST

So führen Sie eine Suche aus und rufen Ergebnisse mit einer generierten Antwort ab:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"}
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Befehle für die Abfragephase

In diesem Abschnitt wird gezeigt, wie Sie Optionen für die Abfragephase des Antwortmethodenaufrufs angeben.

Suchen und antworten (Umformulierung deaktiviert)

Der folgende Befehl zeigt, wie Sie die Antwortmethode aufrufen und eine generierte Antwort sowie eine Liste von Suchergebnissen zurückgeben. Die Antwort kann sich von der vorherigen Antwort unterscheiden, da die Option zum Umformulieren deaktiviert ist.

REST

So führen Sie eine Suche aus und rufen Ergebnisse mit einer generierten Antwort ab, ohne dass die Abfrage umformuliert wird:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
               "queryRephraserSpec": {
                  "disable": true
            }
        }
          }'
    
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Suchen und antworten (maximale Anzahl von Schritten angeben)

Der folgende Befehl zeigt, wie Sie die Antwortmethode aufrufen und eine generierte Antwort sowie eine Liste von Suchergebnissen zurückgeben. Die Antwort unterscheidet sich von den vorherigen Antworten, da die Anzahl der Umformulierungsschritte erhöht wurde.

REST

So führen Sie eine Suche aus und rufen Ergebnisse mit einer generierten Antwort ab, die bis zu fünf Umformulierungsschritte erlaubt:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryRephraserSpec": {
                    "maxRephraseSteps": MAX_REPHRASE
                 }
             }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“
    • MAX_REPHRASE: die maximale Anzahl von Umformulierungsschritten. Der zulässige Höchstwert ist 5. Wenn der Wert nicht festgelegt oder auf einen Wert unter 1 gesetzt ist, wird der Standardwert 1 verwendet.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Suchen und antworten mit Abfrageklassifizierung

Der folgende Befehl zeigt, wie Sie die Antwortmethode aufrufen, um zu prüfen, ob eine Abfrage schädlich ist, nicht auf eine Antwort abzielt oder keines von beidem zutrifft.

Die Antwort enthält den Klassifizierungstyp für die Abfrage, die Antwort selbst wird jedoch nicht von der Klassifizierung beeinflusst. Wenn Sie das Antwortverhalten entsprechend dem Abfragetyp ändern möchten, können Sie dies in der Antwortphase tun. Weitere Informationen finden Sie unter Schädliche Abfragen ignorieren und Abfragen ignorieren, die nicht auf Zusammenfassung abzielen.

REST

So stellen Sie fest, ob eine Abfrage schädlich ist oder nicht auf eine Antwort abzielt:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryClassificationSpec": {
                    "types": ["QUERY_CLASSIFICATION_TYPE"]
                 }
             }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage. Beispiel: „Hallo“.
    • QUERY_CLASSIFICATION_TYPE: Die Abfragetypen, die Sie identifizieren möchten: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY oder beide.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Befehle für die Suchphase: Suchen und antworten mit Optionen für Suchergebnisse

In diesem Abschnitt wird gezeigt, wie Sie Optionen für die Suchphase des Antwortmethodenaufrufs angeben. Neben dem Festlegen der maximalen Anzahl zurückgegebener Dokumente, dem Boosting und dem Filtern gehört dazu auch eine Vorgehensweise, mit der eine Antwort anhand bereitgestellter eigener Suchergebnisse zurückgegeben wird.

Der folgende Befehl zeigt, wie Sie die Antwortmethode aufrufen und verschiedene Optionen für die Rückgabe des Suchergebnisses angeben. Die Suchergebnisse sind unabhängig von der Antwort.

REST

So legen Sie verschiedene Optionen fest, die steuern, welche Suchergebnisse zurückgegeben werden und wie dies geschieht:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
              "searchSpec": {
              "searchParams": {
                "maxReturnResults": MAX_RETURN_RESULTS,
                "filter": "FILTER",
                "boostSpec": BOOST_SPEC,
                "orderBy": "ORDER_BY",
                "searchResultMode": SEARCH_RESULT_MODE
               }
             }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“
    • MAX_RETURN_RESULTS: die Anzahl der zurückzugebenden Ergebnisse. Der Standardwert ist 10.
    • FILTER: der Filter, der angibt, welche Dokumente abgefragt werden. Wenn die Metadaten eines Dokuments der Filterspezifikation entsprechen, wird das Dokument abgefragt. Weitere Informationen, einschließlich der Filtersyntax, finden Sie unter Benutzerdefinierte Suche nach strukturierten oder unstrukturierten Daten filtern.
    • BOOST_SPEC: die Boost-Spezifikation, mit der Sie bestimmte Dokumente in den Suchergebnissen hochstufen können. Dies kann sich auf die Antwort auswirken. Weitere Informationen, einschließlich der Syntax für die Boost-Spezifikation, finden Sie unter Suchergebnisse optimieren.
    • ORDER_BY: die Reihenfolge, in der Dokumente zurückgegeben werden. Dokumente können nach einem Feld in einem Dokumentobjekt sortiert werden. Beim Ausdruck orderBy muss die Groß-/Kleinschreibung beachtet werden. Wenn das System dieses Feld nicht erkennt, wird ein INVALID_ARGUMENT zurückgegeben.
    • SEARCH_RESULT_MODE: gibt den Modus für Suchergebnisse an: DOCUMENTS oder CHUNKS. Weitere Informationen finden Sie unter Dokumente parsen und in Blöcke aufteilen und ContentSearchSpec. Dieses Feld ist nur in der v1alpha-Version der API verfügbar.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Befehle für die Antwortphase

In diesem Abschnitt wird gezeigt, wie Sie den answer-Methodenaufruf anpassen. Sie können die folgenden Optionen nach Bedarf kombinieren.

Schädliche Abfragen und Abfragen, die nicht auf eine Antwort abzielen, ignorieren

Der folgende Befehl zeigt, wie Sie beim Aufrufen der Antwortmethode eine Antwort auf schädliche Abfragen und Abfragen, die nicht auf eine Antwort abzielen, vermeiden.

REST

So überspringen Sie das Beantworten von schädlichen Abfragen oder Abfragen, die nicht auf eine Antwort abzielen:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreAdversarialQuery": true,
               "ignoreNonAnswerSeekingQuery": true
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Nur relevante Antworten anzeigen

Gemini Enterprise kann bewerten, wie relevant die Ergebnisse für eine Abfrage sind. Wenn keine Ergebnisse als ausreichend relevant eingestuft werden, können Sie anstelle einer Antwort aus nicht relevanten oder nur minimal relevanten Ergebnissen eine Fallback-Antwort zurückgeben: „We do not have a summary for your query.

Der folgende Befehl zeigt, wie Sie die Fallback-Antwort zurückgeben, wenn der Aufruf der Antwortmethode irrelevante Ergebnisse ergibt.

REST

So geben Sie eine Fallback-Antwort zurück, wenn keine relevanten Ergebnisse gefunden werden:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreLowRelevantContent": true
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Fundierungsbewertungen zurückgeben

Der folgende Befehl zeigt, wie Sie Fundierungsbewertungen für Antworten und Behauptungen zurückgeben.

REST

So geben Sie eine Fundierungsbewertung für jede Behauptung (jeden Satz in der Antwort) und eine aggregierte Fundierungsbewertung für die Antwort zurück:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "includeGroundingSupports": true,
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.

Nur gut fundierte Antworten anzeigen

Der folgende Befehl zeigt, wie Sie nur die Antworten zurückgeben, die im Korpus (den Informationen im Datenspeicher) als gut fundiert gelten. Schlecht fundierte Antworten werden herausgefiltert.

Sie wählen einen niedrigen oder hohen Schwellenwert für die Fundierungsbewertung aus. Die Antwort wird nur dann zurückgegeben, wenn sie diesen Wert erreicht oder überschreitet. Sie können mit den beiden Filterschwellenwerten und auch ohne Schwellenwert experimentieren, um herauszufinden, welche Filterstufe wahrscheinlich die besten Ergebnisse für Ihre Nutzer liefert.

REST

So geben Sie eine Antwort nur dann zurück, wenn sie einem Schwellenwert für die Fundierungsbewertung entspricht:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "filteringLevel": "FILTER_LEVEL"
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.
    • FILTER_LEVEL: eine Aufzählung zum Filtern von Antworten auf Basis der Fundierungsbewertung. Optionen sind FILTERING_LEVEL_LOW und FILTERING_LEVEL_HIGH. Wenn filteringLevel nicht enthalten ist, wird kein Fundierungsbewertungsfilter auf die Antwort angewendet.

Antwortmodell angeben

Der folgende Befehl zeigt, wie Sie die Modellversion ändern, die zum Generieren von Antworten verwendet wird.

Informationen zu den unterstützten Modellen finden Sie unter Modellversionen und Lebenszyklus für die Antwortgenerierung.

REST

So generieren Sie eine Antwort mit einem anderen Modell als dem Standardmodell:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "modelSpec": {
                  "modelVersion": "MODEL_VERSION",
               }
             }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.
    • MODEL_VERSION: die Modellversion, die Sie zum Generieren der Antwort verwenden möchten. Weitere Informationen finden Sie unter Modellversionen und Lebenszyklus für die Antwortgenerierung.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Benutzerdefinierte Präambel angeben

Der folgende Befehl zeigt, wie Sie eine Präambel für die generierte Antwort festlegen. Eine Präambel enthält Anweisungen in natürlicher Sprache zum Anpassen der Antwort. Sie können Anpassungen wie Länge, Detaillierungsgrad, Ausgabestil (z. B. „einfach“), Ausgabesprache, Schwerpunkt der Antwort und Format (z. B. Tabellen, Aufzählungszeichen und XML) anfordern. Ein Beispiel für eine Präambel ist „Erkläre es, als wärst du ein zehnjähriges Kind.“

Die Präambel kann sich erheblich auf die Qualität der generierten Antwort auswirken. Informationen darüber, was in Präambeln geschrieben werden sollte, sowie Beispiele für gute Präambeln finden Sie unter Benutzerdefinierte Präambeln.

REST

So generieren Sie eine Antwort mit einem anderen Modell als dem Standardmodell:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "promptSpec": {
                   "preamble": "PREAMBLE",
               }
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.
    • PREAMBLE: Eine Anweisung zum Anpassen der Antwort in natürlicher Sprache. Beispiel: show the answer format in an ordered list oder give a very detailed answer.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Quellennachweise einschließen

Der folgende Befehl zeigt, wie Sie Quellennachweise in der Antwort anfordern.

REST

So generieren Sie eine Antwort mit einem anderen Modell als dem Standardmodell:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "includeCitations": INCLUDE_CITATIONS
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.
    • INCLUDE_CITATIONS: gibt an, ob Metadaten für Quellennachweise in die Antwort aufgenommen werden sollen. Der Standardwert ist false.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Sprachcode für die Antwort festlegen

Der folgende Befehl zeigt, wie der Sprachcode für Antworten festgelegt wird.

REST

So generieren Sie eine Antwort mit einem anderen Modell als dem Standardmodell:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "answerLanguageCode": "ANSWER_LANGUAGE_CODE"
               }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.
    • ANSWER_LANGUAGE_CODE: ein Sprachcode für die Antwort. Verwenden Sie die in BCP47: Tags for Identifying Languages definierten Sprach-Tags.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Antworten personalisieren

Wenn bestimmte Informationen über den Nutzer verfügbar sind, z. B. Daten in einem Profil, können Sie diese Informationen im Objekt endUserMetadata angeben, damit die Suchergebnisse für den Nutzer personalisiert werden können.

Wenn ein Nutzer beispielsweise nach Informationen zum Upgrade eines Smartphones sucht, können Informationen aus seinem Profil wie das aktuelle Smartphone-Modell und der Mobilfunktarif verwendet werden, um die generierte Antwort zu personalisieren.

So fügen Sie personenbezogene Informationen über den Nutzer hinzu, der die Abfrage stellt, und generieren eine Antwort, die diese personenbezogenen Informationen berücksichtigt:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
    -d '{
        "query": { "text": "QUERY"},
        "endUserSpec": {
           "endUserMetadata": [
             {
               "chunkInfo": {
                  "content": "PERSONALIZED_INFO",
                  "documentMetadata":  { "title": "INFO_DESCRIPTION"}
               }
             }
           ]
        }
      }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.
    • PERSONALIZATION_INFO: ein String mit Informationen über den Nutzer, der die Abfrage stellt. Beispiel: This customer has a Pixel 6 Pro purchased over a period of 24-months starting 2023-01-15. This customer is on the Business Plus International plan. No payment is due at this time. Die maximale Länge für diesen String beträgt 8.000 Zeichen.
    • INFO_DESCRIPTION: ein String, der die Personalisierungsinformationen kurz beschreibt, z. B. Customer profile data, including model, plan, and billing status. Das Modell verwendet sowohl diese Beschreibung als auch die Personalisierungsinformationen, um eine angepasste Antwort auf die Abfrage zu generieren.

Diagramme für Antworten generieren

Mit der Antwortmethode können Diagramme generiert und als Teil der Antwort auf eine Abfrage zurückgegeben werden.

Sie können explizit anfordern, dass eine Antwort ein Diagramm enthält, z. B. „Stelle die jährliche Wachstumsrate der Zahlungen von Kleinunternehmen über die Jahre hinweg anhand der verfügbaren Daten dar.“ Wenn das System feststellt, dass genügend Daten vorhanden sind, wird ein Diagramm zurückgegeben. Normalerweise wird zusammen mit dem Diagramm auch ein Antworttext zurückgegeben.

Wenn genügend Daten zum Erstellen eines Diagramms vorhanden sind, kann die Antwortmethode auch dann ein Diagramm zurückgeben, wenn in der Abfrage nicht explizit ein Diagramm angefordert wurde. Beispiel: „Wie hat sich der HDI-Wert zwischen 2010 und 2020 durch den besseren Zugang zu sauberem Trinkwasser verbessert?“

Pro Antwort wird nur ein Diagramm generiert. Das Diagramm kann jedoch ein zusammengesetztes Diagramm sein, das andere kleinere Diagramme enthält. Beispiel für ein zusammengesetztes Diagramm:

Zusammengesetztes Diagramm mit vier kleineren Diagrammen

Beschränkung

Abfragen müssen auf Englisch sein.

Häufige Fehlerszenarien

Sie erhalten nicht immer ein Bild zusammen mit Ihrer Antwort. Wenn nicht genügend Daten vorhanden sind, kann keine Abbildung generiert werden.

Weitere Fehlerszenarien sind Fehler bei der Codeausführung und Zeitüberschreitungen. Wenn einer dieser Fälle eintritt, formulieren Sie Ihre Abfrage um und versuchen Sie es noch einmal.

Vorbereitung

Gehen Sie vor dem Ausführen einer Abfrage, die generierte Diagramme anfordert, so vor:

  • Achten Sie darauf, dass Sie ein Gemini-Modell der Version 2.0 oder höher verwenden. Informationen zu den Modellen finden Sie unter Modellversionen und Lebenszyklus für die Antwortgenerierung.

  • Wenn Ihr Datenspeicher unstrukturiert ist und Dokumente mit vielen Tabellen und Bildern enthält, aktivieren Sie den Layoutparser. Obwohl dies nicht unbedingt notwendig ist, liefert es qualitativ bessere Ergebnisse.

Vorgehensweise

REST

Rufen Sie die Antwortmethode wie unten gezeigt auf, um eine Antwort zurückzugeben, die ein auf Basis der Daten im Datenspeicher generiertes Diagramm enthalten kann:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
             },
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: ein Freitextstring auf Englisch mit der Frage oder Suchanfrage.
    • MODEL_VERSION: Modellversion gemini-2.0-flash-001/answer_gen/v1 oder höher. Weitere Informationen finden Sie unter Modellversionen und Lebenszyklus für die Antwortgenerierung.
    • IMAGE_SOURCE: eine Aufzählung, mit der angefordert wird, dass die Antwort ein generiertes Diagramm enthalten soll (FIGURE_GENERATION_ONLY) oder dass die Antwort ein generiertes Diagramm oder ein vorhandenes Bild aus den Datenspeichern enthalten kann (ALL_AVAILABLE_SOURCES).

Vorhandene Bilder aus dem Datenspeicher abrufen

Sie können festlegen, dass Bilder aus dem Datenspeicher mit der Antwort und in Quellennachweisen zurückgegeben werden. Der Datenspeicher muss ein unstrukturierter Datenspeicher sein, in dem der Layoutparser aktiviert ist.

Wenn imageSource auf CORPUS_IMAGE_ONLY oder ALL_AVAILABLE_SOURCES festgelegt ist, können mit der Antwortmethode Bilder aus dem Datenspeicher entsprechend abgerufen werden. Wenn Sie diese Option aktivieren, werden jedoch nicht immer Bilder zurückgegeben.

Sie erhalten maximal ein Bild pro Antwort. Quellennachweise können mehrere Bilder enthalten.

Beschränkungen

  • Die verwendete Anwendung muss mit einem unstrukturierten Datenspeicher verbunden sein. Bilder können weder aus Websites noch aus strukturierten Datenspeichern zurückgegeben werden.

  • Abfragen müssen auf Englisch sein.

  • Die Bildannotation durch den Layoutparser muss auf den Datenspeicher angewendet sein. Informationen zum Layoutparser finden Sie unter Dokumente parsen und in Blöcke aufteilen.

Vorgehensweise

REST

Rufen Sie die Antwortmethode wie unten gezeigt auf, um eine Antwort zurückzugeben, die ein Bild aus dem Datenspeicher enthalten kann:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
              },
              includeCitations: true,
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung, die Sie abfragen möchten.
    • QUERY: ein Freitextstring auf Englisch mit der Frage oder Suchanfrage.
    • MODEL_VERSION: Modellversion gemini-2.0-flash-001/answer_gen/v1 oder höher. Weitere Informationen finden Sie unter Modellversionen und Lebenszyklus für die Antwortgenerierung.
    • IMAGE_SOURCE: eine Aufzählung, mit der angefordert wird, dass die Antwort ein Bild aus dem Datenspeicher enthalten soll (CORPUS_IMAGE_ONLY) oder dass die Antwort entweder ein Bild aus dem Datenspeicher oder ein generiertes Diagramm enthalten kann (ALL_AVAILABLE_SOURCES).

Befehle für weiterführende Fragen

Weiterführende Fragen sind Multi-Turn-Abfragen. Nach der ersten Abfrage in einer Sitzung mit weiterführenden Fragen werden frühere Interaktionen in nachfolgenden „Runden“ berücksichtigt. Bei weiterführenden Fragen kann die Antwortmethode auch ähnliche Fragen vorschlagen, die Ihre Nutzer auswählen können, anstatt eigene weiterführende Fragen einzugeben.

Alle in den vorherigen Abschnitten beschriebenen Funktionen für Antworten und weiterführende Fragen wie Quellennachweise, Filter, SafeSearch, das Ignorieren bestimmter Arten von Abfragen und die Verwendung einer Präambel zum Anpassen von Antworten können zusammen mit weiterführenden Fragen angewendet werden.

Beispiel für eine Sitzung mit weiterführenden Fragen

Im Folgenden finden Sie ein Beispiel für eine Sitzung mit weiterführenden Fragen. Angenommen, Sie möchten sich über Urlaub in Mexiko informieren:

  • Runde 1:

    • Sie: Wann ist die beste Reisezeit für Mexiko?

    • Antwort mit weiterführenden Fragen: Die beste Reisezeit für Mexiko ist die Trockenzeit von November bis April.

  • Runde 2:

    • Sie: Wie hoch ist der Wechselkurs?

    • Antwort mit weiterführenden Fragen: 1 EURO entspricht ungefähr 21,22 mexikanischen Pesos.

  • Runde 3:

    • Sie: Wie hoch ist die Durchschnittstemperatur im Dezember?

    • Antwort mit weiterführenden Fragen: Die Durchschnittstemperatur schwankt zwischen 21 und 26 °C. Die Durchschnittstemperatur in Cancún beträgt etwa 25 °C.

Ohne weiterführende Fragen wäre die Frage „Wie hoch ist der Wechselkurs?“ nicht beantwortbar, da bei einer regulären Suche nicht klar wäre, dass Sie den Wechselkurs für mexikanische Pesos wissen möchten. Ohne weiterführende Fragen gäbe es auch nicht den Kontext, der für die Rückgabe der Temperaturen speziell für Mexiko erforderlich ist.

Wenn Sie die Frage „Wann ist die beste Reisezeit für Mexiko?“ stellen, kann die Funktion für Antworten mit weiterführenden Fragen nicht nur Ihre Frage beantworten, sondern auch andere mögliche Fragen wie „Welcher Monat ist der günstigste für eine Reise nach Mexiko?“ und „Wann ist die Hauptsaison in Mexiko?“ vorschlagen.

Nachdem die Funktion für ähnliche Fragen aktiviert wurde, werden Fragen als Strings in der Antwort zurückgegeben.

Informationen zu Sitzungen

Um die Funktionsweise von weiterführenden Fragen in Gemini Enterprise zu verstehen, müssen Sie sich mit dem Konzept von Sitzungen vertraut machen.

Eine Sitzung besteht aus Textabfragen, die von einem Nutzer gestellt werden, und Antworten, die von Gemini Enterprise bereitgestellt werden.

Diese Abfrage-Antwort-Paare werden manchmal als Runden bezeichnet. Im vorherigen Beispiel besteht die zweite Runde aus „Wie hoch ist der Wechselkurs?“ und „1 EURO entspricht ungefähr 21,22 mexikanischen Pesos.“

Sitzungen werden mit der Anwendung gespeichert. In der Anwendung wird eine Sitzung durch die Sitzungsressource dargestellt.

In der Sitzungsressource ist neben den Abfrage- und Antwortnachrichten Folgendes enthalten:

  • Ein eindeutiger Name (die Sitzungs-ID).

  • Ein Status („In Bearbeitung“ oder „Abgeschlossen“).

  • Eine Pseudo-ID für den Nutzer, also eine Besucher-ID, mit der der Nutzer nachverfolgt wird. Sie kann programmatisch zugewiesen werden.

  • Eine Start- und eine Endzeit.

  • Eine Runde, die ein Abfrage-Antwort-Paar ist.

Sitzungsinformationen speichern und Antworten abrufen

Sie können über die Befehlszeile Suchergebnisse und Antworten generieren und zusammen mit jeder Abfrage in einer Sitzung speichern.

REST

So erstellen Sie eine Sitzung über die Befehlszeile und generieren Antworten auf Basis der Eingabe des Nutzers:

  1. Geben Sie die Anwendung an, in der Sie die Sitzung speichern möchten:

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions" \
      -d '{
            "userPseudoId": "USER_PSEUDO_ID"
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.

    • APP_ID: die ID der Anwendung.

    • USER_PSEUDO_ID: eine eindeutige Kennung zum Tracken eines Besuchers, der die Suche nutzt. Dies kann beispielsweise mit einem HTTP-Cookie implementiert werden, das einen Besucher auf einem einzelnen Gerät eindeutig identifiziert.

    Beispielbefehl und -ergebnis

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/sessions"
    -d '{
    "userPseudoId": "test_user"
    }'
    
    { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }
  2. Notieren Sie sich die Sitzungs-ID, also die Ziffern am Ende des Felds name: in der JSON-Antwort. Im Beispielergebnis lautet die ID 5386462384953257772. Sie benötigen diese ID im nächsten Schritt.

  3. Generieren Sie eine Antwort und fügen Sie sie einer Sitzung in Ihrer Anwendung hinzu:

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "session": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
              "searchSpec":{ "searchParams": {"filter": "FILTER"} }
    }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.
    • QUERY: Ein Freitextstring mit der Frage oder Suchanfrage.
    • SESSION_ID: die ID der Sitzung, die Sie in Schritt 1 erstellt haben. Das sind die Ziffern am Ende des Felds name:, die Sie in Schritt 2 notiert haben. Verwenden Sie für eine Sitzung in jeder Runde dieselbe Sitzungs-ID.
    • FILTER: ein Textfeld zum Filtern der Suche mit einem Filterausdruck. Der Standardwert ist ein leerer String. Wie Sie Ihren Filter erstellen, hängt davon ab, ob Sie unstrukturierte Daten mit Metadaten, strukturierte Daten oder Websitedaten haben. Weitere Informationen finden Sie unter Benutzerdefinierte Suche nach strukturierten oder unstrukturierten Daten filtern.

    Beispielbefehl und -ergebnis

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:answer"
    -d '{
    "query": { "text": "Compare bigquery with spanner database?"},
    "session":  "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943",
    }'
        
    { "answer": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072", "state": "SUCCEEDED", "answerText": "BigQuery and Spanner are both powerful tools that can be used together to handle transactional and analytical workloads. Spanner is a fully managed relational database optimized for transactional workloads, while BigQuery is a serverless data warehouse designed for business agility. Spanner provides seamless replication across regions in Google Cloud and processes over 1 billion requests per second at peak. BigQuery analyzes over 110 terabytes of data per second. Users can leverage federated queries to read data from Spanner and write to a native BigQuery table. \n", "steps": [ { "state": "SUCCEEDED", "description": "Rephrase the query and search.", "actions": [ { "searchAction": { "query": "Compare bigquery with spanner database?" }, "observation": { "searchResults": [ { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/ecc0e7547253f4ca3ff3328ce89995af", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/how-spanner-and-bigquery-work-together-handle-transactional-and-analytical-workloads", "title": "How Spanner and BigQuery work together to handle transactional and analytical workloads | Google Cloud Blog", "snippetInfo": [ { "snippet": "Using Cloud \u003cb\u003eSpanner\u003c/b\u003e and \u003cb\u003eBigQuery\u003c/b\u003e also allows customers to build their \u003cb\u003edata\u003c/b\u003e clouds using Google Cloud, a unified, open approach to \u003cb\u003edata\u003c/b\u003e-driven transformation ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/d7e238f73608a860e00b752ef80e2941", "uri": "https://cloud.google.com/blog/products/databases/cloud-spanner-gets-stronger-with-bigquery-federated-queries", "title": "Cloud Spanner gets stronger with BigQuery-federated queries | Google Cloud Blog", "snippetInfo": [ { "snippet": "As enterprises compete for market share, their need for real-time insights has given rise to increased demand for transactional \u003cb\u003edatabases\u003c/b\u003e to support \u003cb\u003edata\u003c/b\u003e ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/e10a5a3c267dc61579e7c00fefe656eb", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/replicating-cloud-spanner-bigquery-scale", "title": "Replicating from Cloud Spanner to BigQuery at scale | Google Cloud Blog", "snippetInfo": [ { "snippet": "... \u003cb\u003eSpanner data\u003c/b\u003e into \u003cb\u003eBigQuery\u003c/b\u003e for analytics. In this post, you will learn how to efficiently use this feature to replicate large tables with high throughput ...", "snippetStatus": "SUCCESS" } ] }, ... { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/8100ad36e1cac149eb9fc180a41d8f25", "uri": "https://cloud.google.com/blog/products/gcp/from-nosql-to-new-sql-how-spanner-became-a-global-mission-critical-database", "title": "How Spanner became a global, mission-critical database | Google Cloud Blog", "snippetInfo": [ { "snippet": "... SQL \u003cb\u003evs\u003c/b\u003e. NoSQL dichotomy may no longer be relevant." The \u003cb\u003eSpanner\u003c/b\u003e SQL query processor, while recognizable as a standard implementation, has unique ...", "snippetStatus": "SUCCESS" } ] } ] } } ] } ] }, "session": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "turns": [ { "query": { "queryId": "projects/123456/locations/global/questions/741830", "text": "Compare bigquery with spanner database?" }, "answer": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072" } ], "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }, "answerQueryToken": "NMwKDAjFkpK3BhDU24uZAhIkNjZlNDIyZWYtMDAwMC0yMjVmLWIxMmQtZjQwMzA0M2FkYmNj" }
  4. Wiederholen Sie Schritt 3 für jede neue Abfrage in der Sitzung.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import discoveryengine_v1 as discoveryengine


def create_session(
    project_id: str,
    location: str,
    engine_id: str,
    user_pseudo_id: str,
) -> discoveryengine.Session:
    """Creates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        user_pseudo_id: A unique identifier for tracking visitors. For example, this
          could be implemented with an HTTP cookie, which should be able to
          uniquely identify a visitor on a single device.
    Returns:
        discoveryengine.Session: The newly created Session.
    """

    client = discoveryengine.SessionServiceClient()

    session = client.create_session(
        # The full resource name of the engine
        parent=f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}",
        session=discoveryengine.Session(user_pseudo_id=user_pseudo_id),
    )

    # Send Session name in `answer_query()`
    print(f"Session: {session.name}")
    return session

Sitzung aus dem Datenspeicher abrufen

Der folgende Befehl zeigt, wie Sie die Methode get aufrufen und eine Sitzung aus dem Datenspeicher abrufen.

REST

So rufen Sie eine Sitzung aus einem Datenspeicher ab:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID"
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.
    • SESSION_ID: die ID der Sitzung, die Sie abrufen möchten.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import discoveryengine_v1 as discoveryengine


def get_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Retrieves a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = client.get_session(name=name)

    print(f"Session details: {session}")
    return session

Sitzung aus der Anwendung löschen

Der folgende Befehl zeigt, wie Sie die Methode delete aufrufen und eine Sitzung aus dem Datenspeicher löschen.

Standardmäßig werden Sitzungen, die älter als 60 Tage sind, automatisch gelöscht. Wenn Sie jedoch eine bestimmte Sitzung löschen möchten, z. B. weil sie sensible Inhalte enthält, verwenden Sie diesen API-Aufruf.

REST

So löschen Sie eine Sitzung aus einer Anwendung:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID"
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.
    • SESSION_ID: die ID der Sitzung, die Sie löschen möchten.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import discoveryengine_v1 as discoveryengine


def delete_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> None:
    """Deletes a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    client.delete_session(name=name)

    print(f"Session {name} deleted.")

Sitzung aktualisieren

Zum Aktualisieren einer Sitzung kann es verschiedene Gründe geben. Hier einige Beispiele:

  • Sitzung als abgeschlossen markieren
  • Nachrichten aus einer Sitzung in eine andere zusammenführen
  • Pseudo-ID eines Nutzers ändern

Der folgende Befehl zeigt, wie Sie die Methode patch aufrufen und eine Sitzung im Datenspeicher aktualisieren.

REST

So aktualisieren Sie eine Sitzung aus einer Anwendung:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID?updateMask=state" \
      -d '{
            "state": "NEW_STATE"
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.
    • SESSION_ID: die ID der Sitzung, die Sie aktualisieren möchten.
    • NEW_STATE: der neue Wert für den Status, z. B. IN_PROGRESS.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import discoveryengine_v1 as discoveryengine
from google.protobuf import field_mask_pb2


def update_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Updates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    Returns:
        discoveryengine.Session: The updated Session.
    """
    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = discoveryengine.Session(
        name=name,
        state=discoveryengine.Session.State.IN_PROGRESS,  # Options: IN_PROGRESS, STATE_UNSPECIFIED
    )

    # Fields to Update
    update_mask = field_mask_pb2.FieldMask(paths=["state"])

    session = client.update_session(session=session, update_mask=update_mask)
    print(f"Updated session: {session.name}")
    return session

Alle Sitzungen auflisten

Der folgende Befehl zeigt, wie Sie die Methode list aufrufen und die Sitzungen im Datenspeicher auflisten.

REST

So listen Sie die Sitzungen für eine Anwendung auf:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions"
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Sitzungen für einen Nutzer auflisten

Der folgende Befehl zeigt, wie Sie die Methode list aufrufen, um die mit einem Nutzer oder Besucher verknüpften Sitzungen aufzulisten.

REST

So listen Sie Sitzungen auf, die mit einem Nutzer oder Besucher verknüpft sind:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions?filter=userPseudoId=USER_PSEUDO_ID"
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.
    • USER_PSEUDO_ID: die Pseudo-ID des Nutzers, dessen Sitzungen Sie auflisten möchten.

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Sitzungen für einen Nutzer und Status auflisten

Der folgende Befehl zeigt, wie Sie die Methode list aufrufen, um Sitzungen in einem bestimmten Status für einen bestimmten Nutzer aufzulisten.

REST

So listen Sie die Sitzungen auf, die offen oder geschlossen und mit einem bestimmten Nutzer oder Besucher verknüpft sind:

  1. Führen Sie den folgenden curl-Befehl aus:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions?filter=userPseudoId=USER_PSEUDO_ID%20AND%20state=STATE"
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • APP_ID: die ID der Anwendung.
    • USER_PSEUDO_ID: die Pseudo-ID des Nutzers, dessen Sitzungen Sie auflisten möchten.
    • STATE: der Status der Sitzung: STATE_UNSPECIFIED (geschlossen oder unbekannt) oder IN_PROGRESS (offen).

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Gemini Enterprise-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Gemini Enterprise Python API.

Richten Sie zur Authentifizierung bei Gemini Enterprise Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.

from google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response