Antworten und Nachfragen erhalten

Auf dieser Seite wird die Suche mit Antworten und weiterführenden Fragen zu Vertex AI Search und zeigt, wie Sie ihn mithilfe von Methodenaufrufen für allgemeine Suchanwendungen implementieren können.

Die Suche mit Antworten und weiterführenden Fragen basiert auf der Antwortmethode. Die Antwortmethode ersetzt die Zusammenfassungsfunktionen der älteren search-Methode sowie alle Funktionen der eingestellten CONverse-Methode. Die Antwortmethode bietet außerdem einige wichtige zusätzliche Funktionen, z. B. die Möglichkeit, komplexe Abfragen zu verarbeiten.

Merkmale der Antwortmethode

Die wichtigsten Merkmale der Antwortmethode sind:

  • Die Fähigkeit, Antworten auf komplexe Abfragen zu generieren. Mit der Antwortmethode können beispielsweise zusammengesetzte Suchanfragen wie die folgende in mehrere kleinere Suchanfragen unterteilt werden, um bessere Ergebnisse zu erzielen, die wiederum zu besseren Antworten führen:

    • „Wie hoch ist der Umsatz mit Google Cloud bzw. Google Ads im Jahr 2024?“
    • „Nach wie vielen Jahren seit der Gründung hat Google einen Umsatz von 1 Milliarde $ erzielt?“
  • Die Möglichkeit, die Suche und die Antwortgenerierung in einer Unterhaltung mit mehreren Gesprächsrunden zu kombinieren, indem die Antwortmethode in jeder Runde aufgerufen wird.

  • Die Möglichkeit einer Kombination mit der Suchmethode, um die Suchlatenz zu reduzieren. Ich kann die Such- und die Antwortmethode separat aufrufen und die Suchergebnisse und Antworten in verschiedenen iFrames zu unterschiedlichen Zeitpunkten. Das bedeutet, dass Sie Ihren Nutzern Suchergebnisse (die 10 blauen Links) innerhalb von Millisekunden anzeigen können. Sie müssen nicht warten, bis Antworten generiert wurden, bevor Sie Suchergebnisse anzeigen können.

Die Funktionen von Antworten und Nachfragen lassen sich in drei Phasen der Suchanfrage unterteilen:

Wann sollte ich die Antwortfunktion und wann die Suche verwenden?

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

Verwenden Sie die Methode answer, wenn:

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

  • Sie benötigen eine Suche in mehreren Schritten, d. h. Suchanfragen, die den Kontext berücksichtigen und weiterführende Fragen zulassen.

Verwenden Sie die Methode search, wenn:

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

  • Sie möchten, dass mehr als zehn Suchergebnisse („blaue Links“) angezeigt werden.

  • Sie haben eines der folgenden Elemente:

    • Medien- oder Gesundheitsdaten
    • Eigene Einbettungen
    • Synonym- oder Weiterleitungssteuerungen
    • Attribute
    • Ländercodes der Nutzer

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

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

  • Sie haben Latenzprobleme und möchten schnell zu den Suchergebnissen zurückkehren und diese anzeigen lassen bevor die generierte Antwort zurückgegeben wird.

Funktionen der Abfragephase

Die Funktion für Antworten und Nachfragen unterstützt die Verarbeitung von Suchanfragen in natürlicher Sprache.

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

Formulierung von Suchanfragen ändern

Die Umformulierung von Abfragen ist standardmäßig aktiviert. Mit dieser Funktion wird automatisch die beste Formulierung für Suchanfragen ausgewählt, um die Suchergebnisse zu verbessern. Diese Funktion kann auch Suchanfragen verarbeiten, die nicht umformuliert werden müssen.

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

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

    Nutzereingabe Unterabfragen, die aus der komplexen Abfrage erstellt wurden
    Welche Berufe und Hobbys haben Andie Ram und Arnaud? Gemeinsam sind Clémente?
    • Andie Ram – Beruf
    • Beruf von Arnaud Clément
    • Andie Ram hobby
    • Arnaud Clément hobby
  • Fragen mit mehreren Antworten zusammenfassen, um Folgefragen kontextbewusst zu gestalten und zustandsorientiert.

    Beispiel: Suchanfragen, die aus Nutzereingaben generiert werden, sehen möglicherweise wie hier:

    Nutzereingabe Abfrage wurde synthetisiert
    Kurve 1: Laptops für die Schule Laptops für Schule
    Runde 2: kein Mac laptops for school not mac
    Schritt 3: Größeres Display und ich benötige auch eine kabellose Tastatur und Maus größere Bildschirme für Schulen, nicht Mac mit kabelloser Tastatur und Maus
    4. Geburtstag: mit einem Rucksack größere Bildschirme für Schulen, nicht Mac mit kabelloser Tastatur und Maus und Rucksack.
  • Vereinfachen Sie lange Abfragen, um die Abrufleistung zu verbessern.

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

    Nutzereingabe Vereinfachte Abfrage
    Ich möchte wissen, warum die Schaltfläche „In den Einkaufswagen“ auf unserer Website nicht richtig funktioniert. Wenn ein Nutzer auf die Schaltfläche klickt, wird der Artikel anscheinend nicht in den Einkaufswagen gelegt und er erhält eine Fehlermeldung. Ich habe den Code überprüft und er scheint korrekt zu sein. Ich weiß also nicht, woran das Problem liegen könnte. Können Sie mir helfen, das Problem zu beheben? „In den Warenkorb“ Schaltfläche funktioniert auf der Website nicht.
  • Mehrstufige Überlegungen anstellen

    Die mehrstufige Logik basiert auf dem ReAct-Paradigma (Grund + Handlung). ermöglicht es LLMs, komplexe Aufgaben mithilfe von logischen Schlussfolgerungen in natürlicher Sprache zu lösen. Standardmäßig ist die maximale Anzahl der Schritte fünf.

    Beispiel:

    Nutzereingabe Zwei Schritte zur Generierung der Antwort
    Nach wie vielen Jahren seit der Gründung hat Google einen Umsatz von 1 Milliarde $ erreicht? Schritt 1:
    [Überlegung]: Ich muss wissen, wann Google gegründet wurde, damit ich den Umsatz seit dieser Zeit abfragen kann.
    [Aktion] Suche: Wann wurde Google gegründet? [Suchergebnisse beobachten]: „1998“

    Schritt 2:
    [Überlegung]: Jetzt muss ich den Jahresumsatz von Google seit 1998 ermitteln und herausfinden, wann er zum ersten Mal 1 Milliarde überschritten hat.
    [Aktion] Suche: Google-Umsatz seit 1998
    [Suchergebnisse beobachten] Google-Umsatz 1998, Google-Umsatz 1999…..
    [Antwort]: Google erzielte 2003, fünf Jahre nach der Gründung im Jahr 1998, einen Umsatz von mehr als 1 Milliarde $[1].

Anfrageklassifizierung

Optionen bei der Abfrageklassifizierung dienen zur Identifizierung von kontradiktorischen Suchanfragen und Nicht-Antworten-Anfragen. oder Suchanfragen stellen. Die Optionen für die Abfrageklassifizierung sind standardmäßig deaktiviert.

Weitere Informationen zu bösartigen und anderen Suchanfragen, die keine Antworten sind, finden Sie unter Adversarial ignorieren Abfragen und Suche ohne Zusammenfassung ignorieren abfragen.

Funktionen der Suchfunktion

Bei der Suche stehen für die Antwortmethode dieselben Optionen wie für die Suchmethode zur Verfügung. Beispiel:

Funktionen der Antwortphase

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

Hinweise

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

  • Wenn Sie eine strukturierte oder unstrukturierte Suchanwendung haben, achten Sie darauf, dass ist aktiviert: Erweiterte LLM-Features

  • Wenn Sie eine App für die Websitesuche verwenden, achten Sie darauf, dass Folgendes aktiviert ist:

  • Wenn Sie eine App für die zusammengeführte Suche haben, d. h. eine App, die mit anderen als ein Datenspeicher), wenden Sie sich an Ihr Account-Management-Team bei Google und bitten Sie darum, Zulassungsliste für die answer API mit zusammengeführter Suche.

Suche und Antwort (einfach)

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

Dieser Befehl zeigt nur die erforderliche Eingabe an. Die Optionen bleiben auf den Standardeinstellungen.

REST

So suchen Sie nach Ergebnissen 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 ist 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: „Vergleichen Sie die BigQuery- und Spanner- Datenbanken?“.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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 der Abfragephase

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

Suche und Antwort (Umformulierung deaktiviert)

Im folgenden Befehl wird gezeigt, wie die Methode answer aufgerufen und eine generierte Antwort und eine Liste mit Suchergebnissen zurückgegeben wird. Die Antwort kann sich von der vorherigen Antwort unterscheiden, da die Option zum Umformulieren deaktiviert ist.

REST

So können Sie eine Suche starten und Ergebnisse mit einer generierten Antwort erhalten, ohne die Suchanfrage umzuformulieren:

  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 ist 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. Zum Beispiel: „Vergleichen Sie die BigQuery- und Spanner- Datenbanken?“.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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 (maximale Schritte angeben)

Der folgende Befehl zeigt, wie Sie die Methode answer aufrufen und eine generierte Antwort und eine Liste mit Suchergebnissen zurückgeben. Die Antwort lautet: von den vorherigen Antworten, da die Anzahl der Umformulierungsschritte gesteigert.

REST

So können Sie eine Suche starten und Ergebnisse mit einer generierten Antwort erhalten, die bis zu fünf Umformulierungsschritte zulässt:

  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 ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: ein Freitextstring, der den Parameter Frage oder Suchanfrage. Beispiel: „BigQuery- und Spanner-Datenbanken vergleichen?“
    • MAX_REPHRASE: die maximale Anzahl der Schritte zur Umformulierung. Der maximal zulässige Wert ist 5. Wenn der Wert nicht festgelegt ist oder kleiner als 1 ist, wird der Standardwert 1 verwendet.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Vertex AI Agent Builder zu authentifizieren. 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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

Mit der Abfrageklassifizierung suchen und Antworten erhalten

Der folgende Befehl zeigt, wie die Methode answer aufgerufen wird, um fragen Sie nach, ob eine Abfrage bösartig, nicht nach einer Antwort oder keines von beidem ist.

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

REST

So ermitteln Sie, ob eine Suchanfrage bösartig oder nicht auf eine Antwort ausgerichtet ist:

  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 ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: ein Freitextstring, der den Parameter Frage oder Suchanfrage. Beispiel: „Hallo“.
    • QUERY_CLASSIFICATION_TYPE: die Abfragetypen die Sie identifizieren möchten: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY oder beides.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Vertex AI Agent Builder zu authentifizieren. 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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 Suche: Mit Suchergebnisoptionen suchen und antworten

In diesem Abschnitt erfahren Sie, wie Sie Optionen für den Teil der Suchphase des answer-Methodenaufrufs angeben, z. B. die maximale Anzahl der zurückgegebenen Dokumente, die Aufstockung und das Filtern. Außerdem erfahren Sie, wie Sie eine Antwort erhalten, wenn Sie Ihre eigenen Suchergebnisse bereitstellen.

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

REST

So legen Sie verschiedene Optionen fest, die sich darauf beziehen, 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 ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: ein Freitextstring, der den Parameter Frage oder Suchanfrage. Beispiel: „BigQuery- und Spanner-Datenbanken vergleichen?“
    • MAX_RETURN_RESULTS: die Anzahl der Suchanfragen die zurückzugebenden Ergebnisse. Der Standardwert ist 10.
    • 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 Filter finden Sie unter Filter allgemeine Suche nach strukturierten oder unstrukturierten Daten
    • 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 Bessere Suchergebnisse:
    • ORDER_BY: die Reihenfolge, in der Dokumente zurückgegeben werden. Dokumente können in einem Document-Objekt nach einem Feld sortiert werden. Bei orderBy wird die Groß- und Kleinschreibung berücksichtigt. Wenn dieses Feld nicht erkennbar ist, wird ein INVALID_ARGUMENT zurückgegeben.
    • SEARCH_RESULT_MODE: Gibt die Suchanfrage an. Ergebnismodus: DOCUMENTS oder CHUNKS. Weitere Informationen finden Sie unter Dokumente parsen und in Blöcke aufteilen und ContentSearchSpec. Dieses Feld ist nur in der Version v1alpha der API verfügbar.

Python

Weitere Informationen finden Sie in der Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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 Antwortphasen

In diesem Abschnitt wird beschrieben, wie Sie antwortspezifische Optionen für den Methodenaufruf answer angeben.

Anstößige Suchanfragen und Suchanfragen, die keine Antwort suchen, ignorieren

Der folgende Befehl zeigt, wie Sie verhindern, dass bei Aufruf der Methode answer antwortfeindliche Suchanfragen und Suchanfragen beantwortet werden, die keine Antwort erfordern.

REST

Um die Beantwortung von kontroversen oder nicht antwortsuchenden Suchanfragen zu überspringen, führen Sie die Folgendes:

  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 ist 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 Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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 Abfrage. Wenn keine Ergebnisse gefunden werden, die ausreichend relevant sind, aus nicht relevanten oder minimal relevanten Ergebnissen zu machen, eine Fallback-Antwort zurückgeben: "We do not have a summary for your query."

Der folgende Befehl zeigt, wie die Fallback-Antwort im Fall von irrelevante Ergebnisse beim Aufrufen der answer-Methode.

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

Python

Weitere Informationen finden Sie in der Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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

Antwortmodell angeben

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

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 ist 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, mit der Sie die Antwort generieren möchten. Weitere Informationen erhalten Sie unter Antwort und Lebenszyklus von Modellen für die Generierung

Python

Weitere Informationen finden Sie in der Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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

Im folgenden Befehl wird gezeigt, wie Sie eine Präambel für die generierte Antwort festlegen. A Präambel enthält Anweisungen in natürlicher Sprache zum Anpassen der Antwort. Sie können Anpassungen wie Länge, Detaillierungsgrad, Ausgabestil (z. B. „einfach“), Ausgabesprache, Schwerpunkt der Antwort und Format (z. B. Tabellen, Aufzählungspunkte und XML) anfordern. Eine solche Einleitung könnte beispielsweise lauten: „Erkläre es so, als wärest du ein zehnjähriges Kind.“

Die Präambel kann einen erheblichen Einfluss auf die Qualität der generierten Antwort. Für Informationen darüber, was in Präambeln geschrieben werden sollte, und Beispiele für gute Weitere Informationen zu benutzerdefinierten 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 ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: ein Freitextstring, der den Parameter Frage oder Suchanfrage.
    • PREAMBLE: eine Anleitung in natürlicher Sprache zum Anpassen der Antwort. Versuchen Sie es beispielsweise mit show the answer format in an ordered list oder give a very detailed answer.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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

Zitate einschließen

Der folgende Befehl zeigt, wie Sie die Aufnahme von Zitaten in die Antwort.

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 ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: Die ID der Vertex AI Search-App, die Sie abfragen möchten.
    • QUERY: ein Freitextstring, der den Parameter Frage oder Suchanfrage.
    • INCLUDE_CITATIONS: gibt an, ob einbezogen werden soll Zitationsmetadaten in der Antwort. Der Standardwert ist false.

Python

Weitere Informationen finden Sie in der Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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 Antworten festlegen

Im folgenden Befehl wird gezeigt, 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 ist 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 Sprachen-Tags, die gemäß BCP47: Tags for Identifying Languages definiert sind.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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
    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
    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-1.5-flash-001/answer_gen/v2",  # 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 Folgefragen

Follow-ups sind Abfragen, die in mehreren Schritten beantwortet werden. Nach der ersten Abfrage in einer Folgesitzung "Runden" frühere Interaktionen berücksichtigen. Bei Nachfragen ist die Antwortmethode können auch verwandte Fragen vorschlagen, die Ihre Nutzer auswählen können, anstatt eigene Folgefragen eingeben.

Alle Antworten und weiterführenden Fragen, die in den vorherigen Abschnitten beschrieben wurden, darunter Zitationen, Filter und SafeSearch, das Ignorieren bestimmter Arten von Suchanfragen und die Verwendung eines Präambel zur Anpassung der Antworten kann zusammen mit Folgefragen angewendet werden.

Beispiel für eine Folgesitzung

Im Folgenden finden Sie ein Beispiel für eine Sitzung mit Folgefragen. Angenommen, Sie möchten mehr über einen Urlaub in Mexiko erfahren:

  • Runde 1:

    • Ich:Wann ist die beste Zeit des Jahres für einen Urlaub in Mexiko?

    • Antwort mit weiterführenden Fragen: Die beste Reisezeit in Mexiko ist in der Trockenheit Saison, die von November bis April dauert.

  • Zug 2:

    • Sie:Wie lautet der Wechselkurs?

    • Mit Nachfragen antworten: 1 US-Dollar entspricht ungefähr 17,65 mexikanischen Pesos.

  • Runde 3:

    • Sie: Wie hoch ist die durchschnittliche Temperatur im Dezember?

    • Mit Nachfragen antworten: Die durchschnittliche Temperatur liegt zwischen 21 und 26 °C. Der Durchschnitt für Cancún liegt bei ca. 25 °C.

Ohne Nachfragen könnte Ihre Frage „Wie hoch ist der Wechselkurs?“ nicht beantwortet werden, da bei einer normalen Suche nicht bekannt ist, dass Sie den mexikanischen Wechselkurs benötigen. Ebenso gäbe es ohne Nachfragen keinen Kontext um Ihnen Temperaturen speziell für Mexiko zu geben.

Wenn Sie fragen: „Wann ist die beste Reisezeit für Mexiko?“, werden Ihnen neben der Antwort auf Ihre Frage auch weitere Fragen vorgeschlagen, die Sie stellen könnten, z. B. „Welcher Monat ist der günstigste für einen Urlaub in Mexiko?“ und „Welche Monate sind die Hauptreisemonate in Mexiko?“.

Nachdem die Funktion für ähnliche Fragen aktiviert wurde, werden Fragen ConverseConversationResponse definieren.

Informationen zu Sitzungen

Um zu verstehen, wie Nachfragen in Vertex AI Search funktionieren, müssen Sie wissen, wie Sitzungen funktionieren.

Eine Sitzung besteht aus Textanfragen, die von einem Nutzer und Antworten von Vertex AI Search bereitgestellt.

Diese Abfrage- und Antwortpaare werden manchmal als Runden bezeichnet. Im im Beispiel des vorherigen Beispiels besteht die zweite Runde aus "Wie ist der Wechselkurs?" und „1 USD entspricht etwa 17,65 mexikanischen Pesos“.

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

Die Sitzung enthält nicht nur die Abfrage- und Antwortnachrichten, Ressource:

  • Ein eindeutiger Name (die Sitzungs-ID).

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

  • Eine Pseudo-Nutzer-ID, also eine Besucher-ID, mit der der Nutzer getrackt wird. Sie kann programmatisch zugewiesen werden.

  • Start- und Endzeit

  • Ein Turn, also ein Frage-Antwort-Paar.

Sitzungsinformationen speichern und Antworten erhalten

Sie können die Befehlszeile verwenden, um Suchantworten und -antworten zu generieren und sie zusammen mit jeder Abfrage in einer Sitzung zu speichern.

REST

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

  1. Geben Sie die App an, in der die Sitzung gespeichert werden soll:

    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 ist die ID Ihres Google Cloud-Projekts.

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

    • USER_PSEUDO_ID: Eine eindeutige Kennung für das Tracking eines Suchmaschinenbesuchers. Sie können dies z. B. mit einem HTTP-Cookie, ein 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, die Zahlen am Ende des Felds name: in der JSON-Antwort. In diesem Beispiel lautet die ID 5386462384953257772. Sie benötigen diese ID im nächsten Schritt.

  3. So generieren Sie eine Antwort und fügen sie einer Sitzung in Ihrer App hinzu:

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "session": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
              "searchSpec":{ "searchParams": {"filter": "FILTER"} }
    }'
    
    • PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: die ID der Vertex AI Search-Anwendung.
    • QUERY: ein Freitextstring, der den Parameter Frage oder Suchanfrage.
    • SESSION_ID: die ID der Sitzung, die Sie in Schritt 1 erstellt haben. Dies sind die Ziffern am Ende des Feld name:, Schritt 2 notiert. Verwenden Sie für eine Sitzung die gleiche Sitzungs-ID immer wieder.
    • FILTER: ein Textfeld zum Filtern der Suche mithilfe eines Filterausdrucks. Der Standardwert ist ein leerer String. Die wie Sie Ihren Filter erstellen, hängt davon ab, ob Sie unstrukturierte Daten mit Metadaten, strukturierten Daten oder Websitedaten. Weitere Informationen Siehe Filter allgemeine Suche nach strukturierten oder unstrukturierten Daten und Filtern Websitesuche.

    Beispielbefehl und -ergebnis

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

Python

Weitere Informationen finden Sie in der Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Vertex AI Agent Builder zu authentifizieren. 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 ist 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 Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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 Sie die Methode delete aufrufen und eine Sitzung aus dem Datenspeicher löschen.

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

REST

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

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Vertex AI Agent Builder zu authentifizieren. 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 kann aus verschiedenen Gründen notwendig werden, eine Sitzung zu aktualisieren. Beispiel: um eine der folgenden Aktionen auszufü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 ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: die ID der Vertex AI Search-Anwendung.
    • SESSION_ID: die ID der Sitzung, die Sie die Sie aktualisieren möchten.
    • NEW_STATE: der neue Wert für den Status – für Beispiel: IN_PROGRESS.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Vertex AI Agent Builder zu authentifizieren. 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

Der folgende Befehl zeigt, wie Sie die Methode list aufrufen und eine Liste der Sitzungen im Datenspeicher erstellen.

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

Python

Weitere Informationen finden Sie in der Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Vertex AI Agent Builder zu authentifizieren. 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 eines Nutzers auflisten

Im folgenden Befehl wird gezeigt, wie die Methode list aufgerufen wird, um Sitzungen aufzulisten, die mit einem Nutzer oder Besucher verknüpft sind.

REST

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

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

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

    Ersetzen Sie Folgendes:

    • PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: die ID der Vertex AI Search-Anwendung.
    • USER_PSEUDO_ID: die Pseudo-ID des Nutzers deren Sitzungen Sie auflisten möchten.

Python

Weitere Informationen finden Sie in der Vertex AI Agent Builder Python API Referenzdokumentation.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Vertex AI Agent Builder zu authentifizieren. 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 Status auflisten

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

REST

Zum Auflisten von Sitzungen für einen Nutzer, die geöffnet oder geschlossen sind und einer bestimmten Nutzer oder Besucher:

  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 ist die ID Ihres Google Cloud-Projekts.
    • APP_ID: die ID der Vertex AI Search-Anwendung.
    • USER_PSEUDO_ID: die Pseudo-ID des Nutzers deren Sitzungen Sie auflisten möchten.
    • STATE: den Status der Sitzung: STATE_UNSPECIFIED (geschlossen oder unbekannt) oder IN_PROGRESS (offen).

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder 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