Antworten und Nachfragen erhalten

Auf dieser Seite wird die Suche mit Antwort und Follow-ups für Vertex AI Search vorgestellt. Außerdem wird gezeigt, wie Sie sie für benutzerdefinierte Suchanwendungen mithilfe von Methodenaufrufen implementieren.

Die Suche mit Antwort und Follow-ups basiert auf der Antwortmethode. Die Methode „answer“ ersetzt die Zusammenfassungsfunktionen der älteren Methode search und alle Funktionen der eingestellten Methode converse. Die Antwortmethode bietet auch einige wichtige zusätzliche Funktionen, z. B. die Möglichkeit, komplexe Anfragen zu verarbeiten.

Funktionen der Antwortmethode

Die wichtigsten Funktionen der Antwortmethode sind:

  • Die Möglichkeit, Antworten auf komplexe Anfragen zu generieren. Die Antwortmethode kann beispielsweise zusammengesetzte Anfragen wie die folgende in mehrere kleinere Anfragen aufteilen, um bessere Ergebnisse zu liefern, die für bessere Antworten verwendet werden:

    • „Wie hoch ist der 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, die Suche und die Antwortgenerierung in einer mehrstufigen Unterhaltung zu kombinieren, indem die Antwortmethode in jeder Runde aufgerufen wird.

  • Die Möglichkeit, die Suche 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 zu unterschiedlichen Zeiten in verschiedenen iFrames rendern. Das bedeutet, dass Sie Ihren Nutzern Suchergebnisse (die 10 blauen Links) innerhalb von Millisekunden präsentieren können. Sie müssen nicht warten, bis Antworten generiert wurden, bevor Sie Suchergebnisse anzeigen können.

Die Funktionen für Antworten und Follow-ups lassen sich in drei Phasen der Anfrage unterteilen: Suche und Antwort:

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

Vertex AI Search bietet zwei Methoden zum Abfragen von Apps. Sie haben unterschiedliche, aber sich überschneidende Funktionen.

Verwenden Sie die Methode answer, wenn:

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

  • Sie möchten die Suche in mehreren Schritten nutzen, bei der der Kontext beibehalten wird, sodass Sie weiterführende Fragen stellen können.

Verwenden Sie die Methode search in den folgenden Fällen:

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

  • Sie haben eines der folgenden:

    • Media- oder Gesundheitsdaten
    • Eigene Einbettungen
    • Synonym- oder Weiterleitungseinstellungen
    • Facetten
    • Ländercodes des Nutzers
  • Sie müssen die Daten in Ihrem generischen Datenspeicher durchsuchen.

Verwenden Sie die Antwort- und Suchmethoden zusammen, wenn:

  • Sie möchten mehr als zehn Suchergebnisse zurückgeben und eine generierte Antwort erhalten.

  • Sie haben Probleme mit der Latenz und möchten Suchergebnisse schnell zurückgeben und anzeigen, bevor die generierte Antwort zurückgegeben wird.

Funktionen der Abfragephase

Die Funktion „Antworten und Follow-ups“ unterstützt die Verarbeitung von Anfragen in natürlicher Sprache.

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

Abfrage umformulieren

Die Funktion ist standardmäßig aktiviert. Mit dieser Funktion wird automatisch die beste Formulierung für Anfragen ausgewählt, um die Suchergebnisse zu verbessern. Diese Funktion kann auch Anfragen 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 aufgeteilt.

    Nutzereingabe Aus der komplexen Abfrage erstellte Unterabfragen
    Welche Jobs und Hobbys haben Andie Ram und Arnaud Clément gemeinsam?
    • Andie Ram-Beruf
    • Arnaud Clément Beruf
    • Andie Ram hobby
    • Hobby von Arnaud Clément
  • Multi-Turn-Anfragen zusammenführen, damit Folgefragen kontextbezogen und zustandsbehaftet sind.

    Beispiel: Abfragen, die in jeder Runde aus Nutzereingaben generiert werden, könnten so aussehen:

    Nutzereingabe Abfrage synthetisiert
    Runde 1: Laptops für Bildungseinrichtungen laptops für die schule
    Turn 2: not mac Laptops für Schulen, nicht Mac
    Turn 3: bigger screen and i also need wireless keyboard and mouse Laptops mit größerem Display für die Schule, keine Macs, mit kabelloser Tastatur und Maus
    Runde 4: und ein 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 Anfragen vereinfachen, um die Abrufung zu verbessern (erfordert erweiterte LLM-Funktionen).

    Beispiel: Eine lange Anfrage wird zu einer typischen Anfrage verkürzt.

    Nutzereingabe Abfrage vereinfacht
    Ich möchte herausfinden, warum die Schaltfläche „In den Warenkorb“ auf unserer Website nicht richtig funktioniert. Wenn ein Nutzer auf die Schaltfläche klickt, wird der Artikel nicht in den Einkaufswagen gelegt und er erhält eine Fehlermeldung. Ich habe den Code überprüft und er scheint korrekt zu sein. Ich bin mir daher nicht sicher, woran das Problem liegen könnte. Kannst du mir helfen, das Problem zu beheben? Die Schaltfläche „In den Einkaufswagen“ funktioniert auf der Website nicht.
  • Mehrstufige Problemlösung

    Das logische Denken in mehreren Schritten basiert auf dem ReAct-Paradigma (reason + act), das es LLMs ermöglicht, komplexe Aufgaben mithilfe von Natural Language Reasoning zu lösen. Standardmäßig sind maximal fünf Schritte möglich.

    Beispiel:

    Nutzereingabe Antwort in zwei Schritten generieren
    Wie viele Jahre nach der Gründung erreichte Google einen Umsatz von 1 Milliarde US-Dollar? Schritt 1
    [Gedanke]: Ich muss wissen, wann Google gegründet wurde, um dann nach dem Umsatz seitdem zu fragen.
    [Act] Search: When was Google founded?[Observe Search Results]: "1998"

    Step 2:
    [Thought]: Now I need to Google's yearly revenue since 1998, and find out when it exceeded 1 billion for the first time.
    [Act] Search: Google revenue since 1998
    [Observe Search Results] Google revenue in 1998, Google revenue in 1999…..
    [Antwort]: Google hat 2003 einen Umsatz von mehr als 1 Mrd. $ erzielt[1], 5 Jahre nach der Gründung im Jahr 1998[2].

    Für die mehrstufige Problemlösung sind erweiterte LLM-Features erforderlich.

Abfrageklassifizierung

Mit den Optionen zur Klassifizierung von Anfragen lassen sich feindselige Anfragen und Anfragen, die keine Antwort suchen, erkennen. Die Optionen für die Abfrageklassifizierung sind standardmäßig deaktiviert.

Weitere Informationen zu feindseligen und nicht auf Antworten ausgerichteten Anfragen finden Sie unter Feindselige Anfragen ignorieren und Nicht auf Zusammenfassungen ausgerichtete Anfragen ignorieren.

Funktionen der Suchphase

Für die Suche hat 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 in der Suchmethode aktivieren. Beispiel:

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

  • Für jede Behauptung (Satz in der generierten Antwort) wird ein Support-Score ermittelt. Der Support-Score 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 Support-Scores für die Fundierung zurückgeben.

  • Eine zusammengefasste Support-Bewertung für die Antwort erhalten. Der Support-Score gibt an, wie gut die Antwort auf den Daten im Datenspeicher basiert. Weitere Informationen finden Sie unter Scores für die Unterstützung von Rückgabe-Grounding zurückgeben.

  • Gib nur fundierte Antworten zurück. Sie können festlegen, dass nur Antworten zurückgegeben werden, die einen bestimmten Support-Score-Grenzwert erreichen. Weitere Informationen

  • Wählen Sie aus, ob ähnliche Fragen zurückgegeben werden sollen. Ähnliche Fragen sind Vorschläge, die Ihre Nutzer auswählen können, anstatt eigene Fragen einzugeben.

  • Fügen Sie Abfragen Personalisierungsinformationen hinzu, 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 zu Text erhalten möchten, haben Sie folgende Möglichkeiten:

  • Antworten mit Diagrammen und Grafiken, 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 Referenzen zurückgegeben werden, wenn Zitationen angefordert werden. Weitere Informationen finden Sie unter Vorhandene Bilder aus dem Datenspeicher abrufen.

Hinweise

Je nach Art Ihrer App müssen Sie die folgenden Anforderungen erfüllen:

  • Wenn Sie eine App für die strukturierte, unstrukturierte oder Website-Suche haben, aktivieren Sie die folgenden Optionen:

    • Features der Enterprise-Version: Damit erhalten Sie Zugriff auf die wichtigsten Funktionen für generative Antworten. Dazu gehören alle Funktionen zur Antwortgenerierung mit Ausnahme von erweiterten Funktionen zur generativen Antwort, z. B. ähnliche Fragen, Vereinfachung von Anfragen, Anfragen mit mehreren Schritten und multimodale Antworten, die Bilder und Diagramme zurückgeben.
    • Erweiterte LLM-Funktionen: Damit erhalten Sie Zugriff auf die erweiterten Funktionen für generative Antworten, die mehrstufige Schlussfolgerungen, die Vereinfachung von Anfragen, Anfragen in mehreren Schritten, ähnliche Fragen und multimodale Antworten mit Bildern und Diagrammen erfordern.
  • Wenn Sie einen Datenspeicher für die Website-Suche haben, aktivieren Sie außerdem die erweiterte Websiteindexierung.

Suchen und antworten (einfach)

Der folgende Befehl zeigt, wie die Methode answer aufgerufen wird, um eine generierte Antwort und eine Liste von Suchergebnissen mit Links zu den Quellen zurückzugeben.

Mit diesem Befehl wird nur die erforderliche Eingabe angezeigt. Die Optionen werden mit den Standardwerten belassen.

REST

So suchen Sie und erhalten Ergebnisse mit einer generierten Antwort:

  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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

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

    # Handle the response
    print(response)

    return response

Befehle für die Abfragephase

In diesem Abschnitt wird beschrieben, wie Sie Optionen für die Abfragephase des answer-Methodenaufrufs angeben.

Suchen und antworten (Umformulierung deaktiviert)

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

REST

So suchen Sie und erhalten Ergebnisse mit einer generierten Antwort, ohne dass die Anfrage 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-Anwendung.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

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

    # Handle the response
    print(response)

    return response

Suchen und beantworten (maximale Anzahl von Schritten angeben)

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

REST

So suchen Sie und erhalten Ergebnisse mit einer generierten Antwort, die bis zu fünf Umformulierungen ermöglicht:

  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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“
    • MAX_REPHRASE: Die maximale Anzahl von Umformulierungs-Schritten. Der maximal zulässige Wert ist 5. Wenn der Wert nicht festgelegt oder auf einen Wert unter 1 gesetzt ist, wird der Standardwert 1 verwendet.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

    # 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 die Methode answer aufgerufen wird, um zu prüfen, ob eine Anfrage feindselig ist, nicht auf eine Antwort abzielt oder keines von beidem.

Die Antwort enthält den Klassifizierungstyp für die Anfrage, die Antwort selbst wird jedoch nicht durch die 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 Bösartige Anfragen ignorieren und Anfragen ignorieren, die nicht auf Zusammenfassungen abzielen.

REST

So stellen Sie fest, ob eine Anfrage feindselig 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält. Beispiel: „Hallo“.
    • QUERY_CLASSIFICATION_TYPE: Die Abfragetypen, die Sie identifizieren möchten: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY oder beide.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

    # 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 erfahren Sie, wie Sie Optionen für den Suchphasenteil des answer-Methodenaufrufs angeben, z. B. das Festlegen der maximalen Anzahl der zurückgegebenen Dokumente, das Verstärken und Filtern, und wie Sie eine Antwort erhalten, wenn Sie Ihre eigenen Suchergebnisse angeben.

Der folgende Befehl zeigt, wie die Methode answer aufgerufen und verschiedene Optionen für die Rückgabe des Suchergebnisses angegeben werden. Die Suchergebnisse sind unabhängig von der Antwort.

REST

So legen Sie verschiedene Optionen dafür fest, welche und wie Suchergebnisse zurückgegeben 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"},
              "searchSpec": {
              "searchParams": {
                "maxReturnResults": MAX_RETURN_RESULTS,
                "filter": "FILTER",
                "boostSpec": BOOST_SPEC,
                "orderBy": "ORDER_BY",
                "searchResultMode": SEARCH_RESULT_MODE
               }
             }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält. Beispiel: „Vergleiche die BigQuery- und Spanner-Datenbanken.“
    • MAX_RETURN_RESULTS: Die Anzahl der zurückzugebenden Suchergebnisse. Der Standardwert ist 10. Der Höchstwert ist 25.
    • FILTER: Der Filter gibt an, 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: Mit der Boost-Spezifikation können Sie bestimmte Dokumente in den Suchergebnissen hervorheben, was sich auf die Antwort auswirken kann. Weitere Informationen, einschließlich der Syntax für die Boost-Spezifikation, finden Sie unter Suchergebnisse hervorheben.
    • ORDER_BY: Die Reihenfolge, in der Dokumente zurückgegeben werden. Dokumente können nach einem Feld in einem Document-Objekt sortiert werden. Beim Ausdruck orderBy wird zwischen Groß- und Kleinschreibung unterschieden. Wenn dieses Feld nicht erkannt wird, wird INVALID_ARGUMENT zurückgegeben.
    • SEARCH_RESULT_MODE: Gibt den Suchergebnismodus an: DOCUMENTS oder CHUNKS. Weitere Informationen finden Sie unter Dokumente parsen und in Chunks aufteilen und ContentSearchSpec. Dieses Feld ist nur in der v1alpha-Version der API verfügbar.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

    # 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 Methodenaufruf answer anpassen. Sie können die folgenden Optionen nach Bedarf kombinieren.

Feindselige und nicht auf Antworten ausgerichtete Anfragen ignorieren

Der folgende Befehl zeigt, wie Sie beim Aufrufen der Methode answer vermeiden, dass auf feindselige Anfragen und Anfragen, die keine Antwort suchen, geantwortet wird.

REST

So überspringen Sie die Beantwortung von Anfragen, die feindselig sind oder 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

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

    # Handle the response
    print(response)

    return response

Nur relevante Antworten anzeigen

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

Der folgende Befehl zeigt, wie die Fallback-Antwort zurückgegeben wird, wenn beim Aufrufen der Methode answer irrelevante Ergebnisse zurückgegeben werden.

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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

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

    # Handle the response
    print(response)

    return response

Fundierungsunterstützungswerte zurückgeben

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

Allgemeine Informationen zur Fundierung in Vertex AI finden Sie unter Fundierung mit RAG prüfen. Die Methode groundingConfigs.check wird von der Methode „answer“ aufgerufen.

REST

So geben Sie für jede Behauptung (Satz in der Antwort) einen Support-Score und einen aggregierten Support-Score 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.

Nur fundierte Antworten anzeigen

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

Sie legen einen niedrigen oder hohen Schwellenwert für den Score für die Fundierung fest. Die Antwort wird nur zurückgegeben, wenn sie dieses Niveau erreicht oder übertrifft. Sie können mit den beiden Filtergrenzwerten und ohne Grenzwert experimentieren, um herauszufinden, welche Filterstufe wahrscheinlich die besten Ergebnisse für Ihre Nutzer liefert.

Allgemeine Informationen zur Fundierung in Vertex AI finden Sie unter Fundierung mit RAG prüfen. Die Methode groundingConfigs.check wird von der Methode „answer“ aufgerufen.

REST

Wenn Sie eine Antwort nur zurückgeben möchten, wenn sie einen bestimmten Support-Score-Schwellenwert erreicht, gehen Sie so vor:

  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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.
    • FILTER_LEVEL: Eine Aufzählung zum Filtern von Antworten basierend auf dem Score für die Fundierung. Folgende Optionen sind verfügbar: FILTERING_LEVEL_LOW und FILTERING_LEVEL_HIGH. Wenn filteringLevel nicht enthalten ist, wird kein Support-Score-Filter 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.
    • 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

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

    # 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, Fokus 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 dazu, was Sie in Präambeln schreiben sollten, und 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.
    • PREAMBLE: Eine Anleitung in natürlicher Sprache zum Anpassen der Antwort. Beispiele: show the answer format in an ordered list oder give a very detailed answer.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

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

    # Handle the response
    print(response)

    return response

Bei der Antwortmethode können ähnliche Fragen vorgeschlagen werden, die Ihre Nutzer auswählen können, anstatt eigene Fragen einzugeben. Wenn Sie beispielsweise fragen: „Wann ist die beste Reisezeit für Mexiko?“, kann die Antwortmethode nicht nur Ihre Frage beantworten, sondern auch andere Fragen vorschlagen, die Sie stellen könnten, z. B. „In welchem Monat ist eine Reise nach Mexiko am günstigsten?“ und „Wann ist in Mexiko Hauptsaison?“.

Wenn Sie ähnliche Fragen erhalten möchten, müssen Sie sie in jeder Anfrage angeben. Sie werden als String-Array in der Antwort zurückgegeben.

Hinweise

Achten Sie darauf, dass Sie erweiterte LLM-Funktionen für die App aktiviert haben.

Prozedur

Der folgende Befehl zeigt, wie Sie anfordern, dass der Antwort ähnliche Fragen beigefügt werden.

REST

So erhalten Sie ähnliche Fragen mit einer generierten Antwort:

  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"},
            "relatedQuestionsSpec": { "enable": true }
          }'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält. Zum Beispiel: „Welche Arten von Daten kann ich in Vertex AI Search importieren?“

Zitationen einfügen

Der folgende Befehl zeigt, wie Sie anfordern, dass Zitationen in die Antwort aufgenommen werden.

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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.
    • INCLUDE_CITATIONS: Gibt an, ob Zitationsmetadaten in die Antwort aufgenommen werden sollen. Der Standardwert ist false.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

    # 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.
    • ANSWER_LANGUAGE_CODE: Ein Sprachcode für die Antwort. Verwenden Sie Sprachtags, die in BCP47: Tags for Identifying Languages definiert sind.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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,
    )

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

    # Handle the response
    print(response)

    return response

Antworten personalisieren

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

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

So fügen Sie personenbezogene Daten des Nutzers hinzu, der eine Anfrage stellt, und generieren eine Antwort, die diese personenbezogenen Daten 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.
    • PERSONALIZATION_INFO: Ein String, der Informationen enthält, die für den Nutzer, der die Anfrage stellt, spezifisch sind. 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 Längenbeschränkung 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 benutzerdefinierte Antwort auf die Anfrage zu generieren.

Diagramme für Antworten erstellen

Mit der Methode answer können Diagramme generiert und als Teil der Antwort auf eine Anfrage 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 für die Jahre mit verfügbaren Daten grafisch 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 Anfrage nicht explizit ein Diagramm angefordert wurde. Ein 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:

Das zusammengesetzte Diagramm enthält vier kleinere Diagramme.

Beschränkung

Anfragen müssen auf Englisch sein.

Häufige Fehlerszenarien

Sie erhalten nicht immer ein Bild als Antwort. Wenn nicht genügend Daten vorhanden sind, kann keine Zahl generiert werden.

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

Hinweise

Bevor Sie eine Abfrage ausführen, in der generierte Diagramme angefordert werden, gehen Sie so vor:

Prozedur

REST

Rufen Sie die Methode answer wie folgt auf, um eine Antwort zurückzugeben, die ein aus den 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring auf Englisch, der die Frage oder Suchanfrage enthält.
    • 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 (FIGURE_GENERATION_ONLY) oder ein generiertes Diagramm oder ein vorhandenes Bild aus den Datenspeichern (ALL_AVAILABLE_SOURCES) enthält.

Vorhandene Bilder aus dem Datenspeicher abrufen

Sie können festlegen, dass Bilder aus dem Datenspeicher in der Antwort und in Zitatreferenzen zurückgegeben werden. Der Datenspeicher muss ein unstrukturierter Datenspeicher sein, in dem der Layout-Parser aktiviert ist.

Wenn Sie Diagramme in den zurückgegebenen Antworten sehen möchten, müssen Sie die erweiterten LLM-Funktionen aktivieren.

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

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

Beschränkungen

  • Die verwendete App muss mit einem unstrukturierten Datenspeicher verbunden sein. Bilder können nicht von Websites oder aus Datenspeichern mit strukturierten Daten zurückgegeben werden.

  • Anfragen müssen auf Englisch gestellt werden.

  • Die Bildannotation über den Layout-Parser muss auf den Datenspeicher angewendet werden. Informationen zum Layout-Parser finden Sie unter Dokumente parsen und in Chunks aufteilen.

Prozedur

REST

Rufen Sie die Methode answer wie folgt 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: Ein Freitextstring auf Englisch, der die Frage oder Suchanfrage enthält.
    • 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 (CORPUS_IMAGE_ONLY) oder ein Bild aus dem Datenspeicher oder ein generiertes Diagramm (ALL_AVAILABLE_SOURCES) enthält.

Befehle für Folgefragen

Follow-up-Anfragen sind Anfragen mit mehreren Turns. Nach der ersten Anfrage in einer Folgesitzung werden bei nachfolgenden „Zügen“ frühere Interaktionen berücksichtigt. Bei Follow-ups können mit der Antwortmethode auch ähnliche Fragen vorgeschlagen werden, die Ihre Nutzer auswählen können, anstatt eigene Follow-up-Fragen einzugeben. Wenn Sie Vorschläge für ähnliche Fragen erhalten möchten, müssen Sie die erweiterten LLM-Funktionen aktivieren.

Alle in den vorherigen Abschnitten beschriebenen Antwort- und Follow-up-Funktionen, z. B. Zitationen, Filter, SafeSearch, das Ignorieren bestimmter Arten von Anfragen und die Verwendung einer Präambel zum Anpassen von Antworten, können zusammen mit Follow-ups angewendet werden.

Beispiel für eine Folgesitzung

Im Folgenden finden Sie ein Beispiel für eine Sitzung mit Follow-ups. Angenommen, Sie möchten etwas über einen Urlaub in Mexiko wissen:

  • Runde 1:

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

    • Mit Follow-ups antworten:Die beste Reisezeit für Mexiko ist die Trockenzeit von November bis April.

  • 2. Zug:

    • Sie:Wie lautet der Wechselkurs?

    • Antwort mit Follow-ups:1 USD entspricht ungefähr 17,65 mexikanischen Pesos.

  • Runde 3:

    • Sie:Wie hoch ist die Durchschnittstemperatur im Dezember?

    • Antwort mit Follow-ups:Die Durchschnittstemperatur variiert zwischen 21 und 26 °C. Die Durchschnittstemperatur in Cancún liegt bei etwa 25 °C.

Ohne Follow-ups wäre Ihre Frage „What is the exchange rate?“ (Wie lautet der Wechselkurs?) nicht beantwortbar, da bei einer normalen Suche nicht klar wäre, dass Sie den mexikanischen Wechselkurs wissen möchten. Ohne Follow-ups gäbe es auch nicht den Kontext, der erforderlich ist, um Ihnen Temperaturen speziell für Mexiko zu nennen.

Informationen zu Sitzungen

Um zu verstehen, wie Follow-ups in Vertex AI Search funktionieren, müssen Sie sich mit Sitzungen vertraut machen.

Eine Sitzung besteht aus Textanfragen eines Nutzers und Antworten von Vertex AI Search.

Diese Frage- und Antwortpaare werden manchmal als Gesprächsrunden bezeichnet. Im vorherigen Beispiel besteht der zweite Turn aus „What is the exchange rate?“ (Wie lautet der Wechselkurs?) und „1 USD is equal to approximately 17.65 Mexican pesos.“ (1 USD entspricht ungefähr 17, 65 mexikanischen Pesos).

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

Die Sitzungsressource enthält neben den Nachrichten mit der Anfrage und der Antwort Folgendes:

  • Einen eindeutigen Namen (die Sitzungs-ID).

  • Einen Status („Wird verarbeitet“ 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.

  • Ein Turn, der ein Frage-Antwort-Paar ist.

Hinweise

Bevor Sie eine Anfrage mit weiterführenden Fragen ausführen, müssen Sie erweiterte LLM-Funktionen für die App aktivieren.

Sitzungsinformationen speichern und Antworten erhalten

Über die Befehlszeile können Sie Suchergebnisse und Antworten generieren und diese zusammen mit jeder Anfrage in einer Sitzung speichern.

REST

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

  1. Geben Sie die App 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 ID Ihres Google Cloud Projekts.

    • APP_ID: Die ID der Vertex AI Search-Anwendung.

    • USER_PSEUDO_ID: Eindeutige Kennung zum Tracking eines Besuchers, der über die Suche auf Ihre Website gelangt ist. Sie können dies beispielsweise mit einem HTTP-Cookie implementieren, 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 Zahlen 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. Antwort generieren und einer Sitzung in Ihrer App hinzufügen:

    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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-Anwendung.
    • QUERY: Ein Freitextstring, der die Frage oder Suchanfrage enthält.
    • 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. Die Art und Weise, 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 und Website-Suche 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 Anfrage in der Sitzung.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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.ConversationalSearchServiceClient()

    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

Im folgenden Befehl wird gezeigt, wie die Methode get aufgerufen und eine Sitzung aus dem Datenspeicher abgerufen wird.

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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-Anwendung.
    • SESSION_ID: Die ID der Sitzung, die Sie abrufen möchten.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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.ConversationalSearchServiceClient()

    # 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 App löschen

Der folgende Befehl zeigt, wie die Methode delete aufgerufen und eine Sitzung aus dem Datenspeicher gelöscht wird.

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 vertrauliche Inhalte enthält, verwenden Sie diesen API-Aufruf.

REST

So löschen Sie eine Sitzung aus einer App:

  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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-Anwendung.
    • SESSION_ID: Die ID der Sitzung, die Sie löschen möchten.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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.ConversationalSearchServiceClient()

    # 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

Es gibt verschiedene Gründe, warum Sie eine Sitzung aktualisieren möchten. Sie können beispielsweise folgende Aktionen ausführen:

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

Im folgenden Befehl wird gezeigt, wie die Methode patch aufgerufen und eine Sitzung im Datenspeicher aktualisiert wird.

REST

So aktualisieren Sie eine Sitzung über eine App:

  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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-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

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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.ConversationalSearchServiceClient()

    # 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

Im folgenden Befehl wird gezeigt, wie die Methode list aufgerufen und die Sitzungen im Datenspeicher aufgelistet werden.

REST

So listen Sie die Sitzungen für eine App 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-Anwendung.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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.ConversationalSearchServiceClient()

    # 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 die Methode list aufgerufen wird, um Sitzungen aufzulisten, die einem Nutzer oder Besucher zugeordnet sind.

REST

So listen Sie Sitzungen auf, die einem Nutzer oder Besucher zugeordnet 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-Anwendung.
    • USER_PSEUDO_ID: die pseudonymisierte ID des Nutzers, dessen Sitzungen Sie auflisten möchten.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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.ConversationalSearchServiceClient()

    # 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 einen Bundesstaat auflisten

Im folgenden Befehl wird gezeigt, wie Sie die Methode list aufrufen, um Sitzungen in einem bestimmten Status für einen bestimmten Nutzer aufzulisten.

REST

So listen Sie Sitzungen für einen Nutzer auf, die offen oder geschlossen sind und einem bestimmten Nutzer oder Besucher zugeordnet 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 ID Ihres Google Cloud Projekts.
    • APP_ID: Die ID der Vertex AI Search-Anwendung.
    • USER_PSEUDO_ID: die pseudonymisierte ID des Nutzers, dessen Sitzungen Sie auflisten möchten.
    • STATE: Der Status der Sitzung: STATE_UNSPECIFIED (geschlossen oder unbekannt) oder IN_PROGRESS (offen).

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur AI Applications Python API.

Richten Sie zur Authentifizierung bei AI Applications Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung 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.ConversationalSearchServiceClient()

    # 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