Ricevere risposte e follow-up

Questa pagina presenta la ricerca con risposta e i follow-up per Agent Search e mostra come implementarla per le app di ricerca personalizzata utilizzando le chiamate ai metodi.

La ricerca con risposta e follow-up si basa sul metodo di risposta. Il metodo answer sostituisce le funzionalità di riassunto del metodo search precedente e tutte le funzionalità del metodo converse deprecato. Il metodo answer ha anche alcune importanti funzionalità aggiuntive, come la capacità di gestire query complesse.

Funzionalità del metodo di risposta

Le funzionalità principali del metodo answer sono le seguenti:

  • La capacità di generare risposte a query complesse. Ad esempio, il metodo answer può suddividere query composte, come la seguente, in più query più piccole per restituire risultati migliori che vengono utilizzati per generare risposte migliori:

    • "Quali sono le entrate di Google Cloud e Google Ads nel 2024?"
    • "Dopo quanti anni dalla sua fondazione Google ha raggiunto un fatturato di 1 miliardo di dollari?"
  • La possibilità di combinare la ricerca e la generazione di risposte in una conversazione a più turni chiamando il metodo di risposta in ogni turno.

  • La possibilità di accoppiamento con il metodo di ricerca per ridurre la latenza di ricerca. Puoi chiamare il metodo di ricerca e il metodo di risposta separatamente ed eseguire il rendering dei risultati di ricerca e delle risposte in iframe diversi in momenti diversi. Ciò significa che puoi mostrare agli utenti i risultati di ricerca (i 10 link blu) in pochi millisecondi. Non devi attendere la generazione delle risposte prima di poter mostrare i risultati di ricerca.

Le funzionalità di risposta e follow-up possono essere suddivise in tre fasi della query, della ricerca e della risposta:

Quando utilizzare la risposta e quando la ricerca

Agent Search ha due metodi che vengono utilizzati per eseguire query sulle app. Hanno funzionalità diverse, ma sovrapposte.

Utilizza il metodo answer quando:

  • Vuoi una risposta (o un riepilogo) generata dall'AI dei risultati di ricerca.

  • Vuoi eseguire ricerche in più passaggi, ovvero ricerche che mantengono il contesto e consentono di porre domande aggiuntive.

Utilizza il metodo search nei seguenti casi:

  • Hai bisogno solo dei risultati di ricerca, non di una risposta generata.

  • Hai uno dei seguenti elementi:

    • Dati multimediali o sanitari
    • I tuoi embedding
    • Controlli sinonimi o reindirizzamenti
    • Facet
    • Codici paese dell'utente
  • Devi esplorare i dati nel datastore generico.

Utilizza i metodi di risposta e di ricerca insieme quando:

  • Vuoi restituire più di dieci risultati di ricerca e vuoi una risposta generata.

  • Hai problemi di latenza e vuoi restituire e visualizzare rapidamente i risultati di ricerca prima che venga restituita la risposta generata.

Funzionalità della fase di query

La funzionalità di risposta e follow-up supporta l'elaborazione delle query in linguaggio naturale.

Questa sezione descrive e illustra le varie opzioni per la riformulazione e la classificazione delle query.

Riformulazione delle query

La riformulazione delle query è attiva per impostazione predefinita. Questa funzionalità sceglie automaticamente il modo migliore per riformulare le query per migliorare i risultati di ricerca. Questa funzionalità può anche gestire query che non richiedono una riformulazione.

  • Suddividi le query complesse in più query ed esegui query secondarie sincrone.

    Ad esempio, una query complessa viene suddivisa in quattro query più piccole e semplici.

    Input utente Subquery create dalla query complessa
    Quali lavori e hobby hanno in comune Andie Ram e Arnaud Clément?
    • Andie Ram occupation
    • Arnaud Clément professione
    • Andie Ram hobby
    • Arnaud Clément hobby
  • Sintetizzare le query multi-turno per rendere le domande di follow-up sensibili al contesto e stateful.

    Ad esempio, le query sintetizzate dall'input utente'utente a ogni turno potrebbero avere il seguente aspetto:

    Input utente Query sintetizzata
    Turno 1: laptop per la scuola laptop per la scuola
    Turno 2: non mac laptop per la scuola non mac
    Turno 3: schermo più grande e ho anche bisogno di tastiera e mouse wireless laptop con schermo più grande per la scuola non mac con tastiera e mouse wireless
    Turno 4: e uno zaino per contenerlo laptop con schermo più grande per la scuola, non Mac, con tastiera e mouse wireless e uno zaino per contenerli
  • Semplifica le query lunghe per migliorare il recupero (richiede l'opzione Risposte generative).

    Ad esempio, una query lunga viene abbreviata in una query tipica.

    Input utente Query semplificata
    Sto cercando di capire perché il pulsante "Aggiungi al carrello" sul nostro sito web non funziona correttamente. Sembra che quando un utente fa clic sul pulsante, l'articolo non venga aggiunto al carrello e l'utente riceva un messaggio di errore. Ho controllato il codice e sembra corretto, quindi non so quale potrebbe essere il problema. Puoi aiutarmi a risolvere questo problema? Il pulsante "Aggiungi al carrello" non funziona sul sito web.
  • Eseguire ragionamenti multi-step

    Il ragionamento multi-step si basa sul paradigma ReAct (ragionamento + azione), che consente agli LLM di risolvere attività complesse utilizzando il ragionamento in linguaggio naturale. Per impostazione predefinita, il numero massimo di passaggi è cinque.

    Ad esempio:

    Input utente Due passaggi per generare la risposta
    Dopo quanti anni dalla sua fondazione Google ha raggiunto un fatturato di 1 miliardo di dollari? Passaggio 1:
    [Thought]: I need to know when Google was founded, then I can query it is revenue since then.
    [Azione] Cerca: Quando è stata fondata Google?[Osserva i risultati di ricerca]: "1998"

    Passaggio 2:
    [Pensiero]: Ora devo cercare su Google le entrate annuali di Google dal 1998 e scoprire quando hanno superato per la prima volta il miliardo.
    [Azione] Ricerca: entrate di Google dal 1998
    [Osservazione dei risultati di ricerca] Entrate di Google nel 1998, entrate di Google nel 1999…..
    [Risposta]: Google ha raggiunto un fatturato di oltre 1 miliardo di dollari nel 2003 [1], 5 anni dopo la sua fondazione nel 1998 [2].

    Il ragionamento multi-step richiede l'attivazione dell'opzione Risposte generative.

Classificazione delle query

Le opzioni di classificazione delle query servono a identificare le query avversarie e quelle che non cercano una risposta. Per impostazione predefinita, le opzioni di classificazione delle query sono disattivate.

Per saperne di più sulle query di tipo adversarial e non di ricerca di risposte, consulta Ignora le query di tipo adversarial e Ignora le query non di ricerca di riepiloghi.

Funzionalità della fase di ricerca

Per la ricerca, il metodo di risposta ha le stesse opzioni del metodo di ricerca. Ad esempio:

Funzionalità della fase di risposta

Durante la fase di risposta, quando le risposte vengono generate dai risultati di ricerca, puoi attivare le stesse funzionalità del metodo di ricerca. Ad esempio:

Le funzionalità aggiuntive della fase di risposta che non sono disponibili nel metodo di ricerca sono:

  • Ottenere un punteggio di supporto per ogni affermazione (frase nella risposta generata). Un punteggio di supporto è un valore di rappresentazione in virgola mobile compreso nell'intervallo [0,1] che indica quanto l'affermazione è fondata sui dati nel datastore. Per saperne di più, consulta Restituisci i punteggi di supporto del grounding.

  • Sto ottenendo un punteggio di supporto aggregato per la risposta. Il punteggio di supporto indica quanto la risposta è basata sui dati nel datastore. Per saperne di più, consulta Restituisci i punteggi di supporto del grounding.

  • Restituisci solo risposte ben fondate. Puoi scegliere di restituire solo le risposte che soddisfano una determinata soglia di punteggio di supporto. Per saperne di più, consulta Mostra solo risposte ben fondate.

  • Scegli di restituire le domande correlate. Le domande correlate sono suggerimenti che gli utenti possono scegliere anziché inserire le proprie domande.

  • Aggiungi informazioni di personalizzazione alle query in modo che le risposte possano essere personalizzate per i singoli utenti. Per saperne di più, consulta Personalizza le risposte.

Per ricevere risposte multimodali che includono grafici o immagini oltre al testo, sono disponibili le seguenti opzioni:

  • Ottenere risposte che includono grafici e diagrammi che tracciano i dati contenuti nelle risposte. Per saperne di più, consulta Genera grafici per le risposte.

  • Recupero delle immagini dal datastore. Se il datastore contiene immagini, il metodo di risposta può restituire un'immagine nella risposta. Se vengono richieste citazioni, nei riferimenti possono essere restituite anche le immagini del datastore. Per saperne di più, consulta Recupera le immagini esistenti dal datastore.

Prima di iniziare

A seconda del tipo di app, soddisfa i seguenti requisiti:

  • Se hai un'app di ricerca strutturata, non strutturata o di siti web, attiva le seguenti opzioni:

    • Funzionalità della versione Enterprise: ti consente di accedere alle funzionalità principali delle risposte generatrici. Sono incluse tutte le funzionalità di generazione delle risposte, ad eccezione delle funzionalità di risposta generativa avanzate, come domande correlate, semplificazione delle query, query multi-turn e risposte multimodali che restituiscono immagini e grafici.
    • Risposte generative: consente di accedere alle funzionalità di risposta generativa avanzate che richiedono ragionamento multi-step, semplificazione delle query, query multi-turn, domande correlate e risposte multimodali che restituiscono immagini e grafici.
  • Inoltre, se hai un datastore di ricerca di siti web, attiva l'indicizzazione avanzata dei siti web.

Ricerca e risposta (di base)

Il seguente comando mostra come chiamare il metodo answer e restituire una risposta generata e un elenco di risultati di ricerca, con link alle fonti.

Questo comando mostra solo l'input richiesto. Le opzioni vengono lasciate ai valori predefiniti.

REST

Per eseguire una ricerca e ottenere risultati con una risposta generata, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca. Ad esempio, "Confronta i database BigQuery e Spanner?".

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Comandi della fase di query

Questa sezione mostra come specificare le opzioni per la fase di query della chiamata al metodo answer.

Cerca e rispondi (riformulazione disattivata)

Il seguente comando mostra come chiamare il metodo answer e restituire una risposta generata e un elenco di risultati di ricerca. La risposta potrebbe essere diversa dalla precedente perché l'opzione di riformulazione è disattivata.

REST

Per eseguire una ricerca e ottenere risultati con una risposta generata senza applicare la riformulazione della query, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca. Ad esempio, "Confronta i database BigQuery e Spanner?".

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Cerca e rispondi (specifica il numero massimo di passaggi)

Il seguente comando mostra come chiamare il metodo answer e restituire una risposta generata e un elenco di risultati di ricerca. La risposta è diversa dalle precedenti perché il numero di passaggi di riformulazione è stato aumentato.

REST

Per eseguire una ricerca e ottenere risultati con una risposta generata che consente fino a cinque passaggi di riformulazione, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca. Ad esempio, "Confronta i database BigQuery e Spanner?".
    • MAX_REPHRASE: il numero massimo di passaggi di riformulazione. Il valore massimo consentito è 5. Se non viene impostato o se viene impostato su un valore inferiore a 1, il valore predefinito è 1.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Ricerca e risposta con classificazione delle query

Il seguente comando mostra come chiamare il metodo answer per verificare se una query è di tipo adversarial, non cerca una risposta o nessuna delle due.

La risposta include il tipo di classificazione per la query, ma la risposta stessa non è influenzata dalla classificazione. Se vuoi modificare il comportamento della risposta in base al tipo di query, puoi farlo nella fase di risposta. Consulta Ignora le query avversarie e Ignora le query che non cercano un riepilogo.

REST

Per determinare se una query è di tipo adversarial o non cerca una risposta, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca. Ad esempio, "hello".
    • QUERY_CLASSIFICATION_TYPE: i tipi di query che vuoi identificare: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY o entrambi.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Comandi della fase di ricerca: cerca e rispondi con le opzioni dei risultati di ricerca

Questa sezione mostra come specificare le opzioni per la fase di ricerca della chiamata al metodo answer, ad esempio l'impostazione del numero massimo di documenti restituiti, il boosting e il filtro, nonché come ottenere una risposta quando fornisci i tuoi risultati di ricerca.

Il seguente comando mostra come chiamare il metodo answer e specificare varie opzioni per la restituzione del risultato di ricerca. (I risultati di ricerca sono indipendenti dalla risposta.)

REST

Per impostare varie opzioni relative a quali risultati di ricerca vengono restituiti e come, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca. Ad esempio, "Confronta i database BigQuery e Spanner?"
    • MAX_RETURN_RESULTS: il numero di risultati di ricerca da restituire. Il valore predefinito è 10. Il valore massimo è 25.
    • FILTER: il filtro specifica i documenti su cui viene eseguita la query. Se i metadati di un documento soddisfano la specifica del filtro, il documento verrà interrogato. Per saperne di più, inclusa la sintassi dei filtri, consulta Filtra la ricerca personalizzata per dati strutturati o non strutturati.
    • BOOST_SPEC: la specifica di boost ti consente di aumentare il ranking di determinati documenti nei risultati di ricerca, il che può influire sulla risposta. Per saperne di più, inclusa la sintassi per la specifica di boost, consulta Aumenta i risultati di ricerca.
    • ORDER_BY: l'ordine in cui vengono restituiti i documenti. I documenti possono essere ordinati in base a un campo di un oggetto Document. L'espressione orderBy è sensibile alle maiuscole. Se questo campo non è riconoscibile, viene restituito un INVALID_ARGUMENT.
    • SEARCH_RESULT_MODE: specifica la modalità dei risultati di ricerca: DOCUMENTS o CHUNKS. Per saperne di più, consulta Analizza e suddividi i documenti e ContentSearchSpec. Questo campo è disponibile solo nella versione v1alpha dell'API.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Comandi della fase di risposta

Questa sezione mostra come personalizzare la chiamata al metodo answer. Puoi combinare le seguenti opzioni in base alle tue esigenze.

Ignora le query contraddittorie e le query che non cercano una risposta

Il seguente comando mostra come evitare di rispondere a query avversarie e a query che non cercano una risposta quando chiami il metodo answer.

REST

Per saltare le risposte alle query contraddittorie o che non richiedono una risposta, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Mostra solo le risposte pertinenti

Agent Search può valutare la pertinenza dei risultati rispetto a una query. Se nessun risultato viene ritenuto sufficientemente pertinente, anziché generare una risposta da risultati non pertinenti o minimamente pertinenti, puoi scegliere di restituire una risposta di riserva: "We do not have a summary for your query."

Il seguente comando mostra come restituire la risposta di riserva in caso di risultati non pertinenti quando si chiama il metodo answer.

REST

Per restituire una risposta di riserva se non vengono trovati risultati pertinenti, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Restituisci i punteggi di supporto del grounding

Il seguente comando mostra come restituire i punteggi di supporto di grounding per risposte e affermazioni.

Per informazioni generali sul grounding in Vertex AI, consulta Verifica il grounding con RAG. Il metodo groundingConfigs.check viene chiamato dal metodo answer.

REST

Per restituire un punteggio di supporto per ogni affermazione (frase nella risposta) e un punteggio di supporto aggregato per la risposta, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.

Mostra solo risposte ben fondate

Il seguente comando mostra come restituire solo le risposte ritenute ben fondate nel corpus, ovvero le informazioni nel datastore. Le risposte con un grounding scarso vengono filtrate.

Scegli una soglia di livello basso o alto per il punteggio di supporto del grounding. La risposta viene restituita solo se soddisfa o supera questo livello. Puoi sperimentare con le due soglie di filtro e senza soglia per determinare quale livello di filtro è probabile che fornisca i risultati migliori per i tuoi utenti.

Per informazioni generali sul grounding in Vertex AI, consulta Verifica il grounding con RAG. Il metodo groundingConfigs.check viene chiamato dal metodo answer.

REST

Per restituire una risposta solo se soddisfa una soglia del punteggio di supporto, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.
    • FILTER_LEVEL: un'enumerazione per filtrare le risposte in base al punteggio di supporto del grounding. Le opzioni sono: FILTERING_LEVEL_LOW e FILTERING_LEVEL_HIGH. Se filteringLevel non è incluso, alla risposta non viene applicato alcun filtro per il punteggio di supporto.

Specifica il modello di risposta

Il seguente comando mostra come modificare la versione del modello utilizzata per generare le risposte.

Per informazioni sui modelli supportati, consulta Versioni e ciclo di vita del modello di generazione delle risposte.

REST

Per generare una risposta utilizzando un modello diverso da quello predefinito, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente su cui vuoi eseguire la query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.
    • MODEL_VERSION: la versione del modello che vuoi utilizzare per generare la risposta. Per saperne di più, consulta Versioni e ciclo di vita del modello di generazione delle risposte.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Specifica un preambolo personalizzato

Il seguente comando mostra come impostare un preambolo per la risposta generata. Un preambolo contiene istruzioni in linguaggio naturale per personalizzare la risposta. Puoi richiedere personalizzazioni come lunghezza, livello di dettaglio, stile dell'output (ad esempio "semplice"), lingua dell'output, focus della risposta e formato (ad esempio tabelle, elenchi puntati e XML). Ad esempio, un preambolo potrebbe essere "Spiega come se fossi un bambino di dieci anni".

Il preambolo può avere un effetto significativo sulla qualità della risposta generata. Per informazioni su cosa scrivere nei preamboli ed esempi di preamboli efficaci, consulta Informazioni sui preamboli personalizzati.

REST

Per generare una risposta utilizzando un modello diverso da quello predefinito, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.
    • PREAMBLE: un'istruzione in linguaggio naturale per personalizzare la risposta. Ad esempio, prova show the answer format in an ordered list o give a very detailed answer.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Il metodo di risposta può suggerire domande correlate, che gli utenti possono scegliere anziché inserire le proprie domande. Ad esempio, quando chiedi "Qual è il periodo migliore dell'anno per andare in vacanza in Messico?", oltre a rispondere alla tua domanda, il metodo di risposta può suggerire altre domande che potresti porre, ad esempio "Qual è il mese più economico per andare in vacanza in Messico?" e "Quali sono i mesi turistici in Messico?".

Per ricevere domande correlate, devi specificare la loro inclusione in ogni query. Vengono restituite come un array di stringhe nella risposta.

Se la risposta viene saltata e nella risposta viene restituito un campo answerSkippedReasons, le domande correlate non vengono incluse nell'output.

Prima di iniziare

Assicurati di aver attivato l'opzione Risposte generative per l'app.

Procedura

Il seguente comando mostra come richiedere che le domande correlate vengano incluse nella risposta.

REST

Per visualizzare le domande correlate con una risposta generata:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca. Ad esempio, "Quali tipi di dati posso importare in Agent Search?".

Includi citazioni

Il seguente comando mostra come richiedere l'inclusione delle citazioni nella risposta.

REST

Per generare una risposta utilizzando un modello diverso da quello predefinito, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.
    • INCLUDE_CITATIONS: specifica se includere i metadati delle citazioni nella risposta. Il valore predefinito è false.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Imposta il codice lingua della risposta

Il seguente comando mostra come impostare il codice lingua per le risposte.

REST

Per generare una risposta utilizzando un modello diverso da quello predefinito, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire la query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.
    • ANSWER_LANGUAGE_CODE: un codice lingua per la risposta. Utilizza i tag di lingua definiti da BCP47: Tags for Identifying Languages.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


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

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

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

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

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

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

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

    # Handle the response
    print(response)

    return response

Personalizza le risposte

Se sono disponibili informazioni specifiche sull'utente, ad esempio i dati di un profilo, puoi specificarle nell'oggetto endUserMetadata in modo che i risultati della query possano essere personalizzati per l'utente.

Ad esempio, se un utente che ha eseguito l'accesso cerca informazioni sull'upgrade di un cellulare, le informazioni del suo profilo, come il modello di telefono attuale e il piano tariffario, forniscono informazioni che possono personalizzare la risposta generata.

Per aggiungere informazioni personali sull'utente che effettua una query e generare una risposta che tenga conto delle informazioni personali, segui questi passaggi:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.
    • PERSONALIZATION_INFO: una stringa che contiene informazioni specifiche sull'utente che esegue la query. Ad esempio, This customer has a Pixel 6 Pro purchased over a period of 24-months starting 2023-01-15. This customer is on the Business Plus International plan. No payment is due at this time. Il limite di lunghezza per questa stringa è di 8000 caratteri.
    • INFO_DESCRIPTION: una stringa che descrive brevemente le informazioni di personalizzazione, ad esempio Customer profile data, including model, plan, and billing status.. Il modello utilizza sia questa descrizione sia le informazioni di personalizzazione per generare una risposta personalizzata alla query.

Genera grafici per le risposte

Il metodo answer può generare grafici e restituirli come parte della risposta a una query.

Puoi richiedere espressamente che una risposta includa un grafico, ad esempio "Traccia il tasso di crescita su base annua dei pagamenti delle piccole imprese nel corso degli anni con i dati disponibili". Se il sistema determina che sono presenti dati sufficienti, viene restituito un grafico. In genere, insieme al grafico viene restituito un testo di risposta.

Inoltre, se sono disponibili dati sufficienti per creare un grafico, il metodo answer può restituire un grafico anche se la query non lo ha richiesto esplicitamente. Ad esempio: "Qual è stato il miglioramento dei punteggi HDI associato a un maggiore accesso all'acqua potabile pulita nel decennio tra il 2010 e il 2020?"

Viene generato un solo grafico per risposta. Tuttavia, il grafico potrebbe essere un grafico composito, contenente altri grafici più piccoli. Esempio di grafico composito:

il grafico composito contiene quattro grafici più piccoli

Limitazione

Le query devono essere in inglese.

Scenari di errore comuni

Non sempre riceverai un'immagine insieme alla risposta. Se non sono disponibili dati sufficienti, non è possibile generare un valore.

Altri scenari di errore includono errori di esecuzione del codice e timeout. In questi casi, riformula la query e riprova.

Prima di iniziare

Prima di eseguire una query che richiede grafici generati, segui questi passaggi:

Procedura

REST

Chiama il metodo answer come segue per restituire una risposta che può includere un grafico generato dai dati nel datastore:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero in inglese che contiene la domanda o la query di ricerca.
    • MODEL_VERSION: versione del modello. Per saperne di più, consulta Versioni e ciclo di vita del modello di generazione delle risposte.
    • IMAGE_SOURCE: un'enumerazione per richiedere che la risposta includa un grafico generato, FIGURE_GENERATION_ONLY, o che la risposta possa includere un grafico generato o un'immagine esistente dai datastore, ALL_AVAILABLE_SOURCES.

Recupera le immagini esistenti dal datastore

Puoi scegliere di restituire le immagini del datastore con la risposta e nei riferimenti delle citazioni. Il datastore deve essere un datastore non strutturato con l'analizzatore del layout attivato.

Per ottenere grafici nelle risposte restituite, devi attivare l'opzione Risposte generative.

Quando imageSource è CORPUS_IMAGE_ONLY o ALL_AVAILABLE_SOURCES, il metodo answer può recuperare le immagini dal datastore, se opportuno. Tuttavia, l'attivazione di questa opzione non significa che le immagini vengano sempre restituite.

Puoi ottenere un'immagine (massimo) per risposta. Le citazioni possono contenere più immagini.

Limitazioni

  • L'app che stai utilizzando deve essere connessa a un datastore non strutturato. Le immagini non possono essere restituite da siti web o da datastore strutturati.

  • Le query devono essere in inglese.

  • L'annotazione delle immagini tramite l'analizzatore del layout deve essere applicata al datastore. Per informazioni sul parser del layout, consulta Analizza e suddividi i documenti.

Procedura

REST

Chiama il metodo answer come segue per restituire una risposta che può includere un'immagine del datastore:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Agent Search su cui vuoi eseguire query.
    • QUERY: una stringa di testo libero in inglese che contiene la domanda o la query di ricerca.
    • MODEL_VERSION: versione del modello. Per saperne di più, consulta Versioni e ciclo di vita del modello di generazione delle risposte.
    • IMAGE_SOURCE: un'enumerazione per richiedere che la risposta includa un'immagine del datastore, CORPUS_IMAGE_ONLY, o che la risposta possa includere un'immagine del datastore o un grafico generato, ALL_AVAILABLE_SOURCES.

Comandi per le domande aggiuntive

I follow-up sono query multi-turno. Dopo la prima query di una sessione di follow-up, i "turni" successivi tengono conto delle interazioni precedenti. Con i follow-up, il metodo di risposta può anche suggerire domande correlate, che gli utenti possono scegliere anziché inserire le proprie domande di follow-up. Per ricevere suggerimenti per domande correlate, devi attivare l'opzione Risposte generative.

Tutte le funzionalità di risposta e follow-up descritte nelle sezioni precedenti, come citazioni, filtri, SafeSearch, ignorare determinati tipi di query e utilizzare un preambolo per personalizzare le risposte, possono essere applicate insieme ai follow-up.

Esempio di sessione di follow-up

Di seguito è riportato un esempio di sessione con follow-up. Supponiamo che tu voglia informazioni su una vacanza in Messico:

  • Turno 1:

    • Tu: Qual è il periodo migliore dell'anno per una vacanza in Messico?

    • Risposta con domande aggiuntive: Il periodo migliore per una vacanza in Messico è durante la stagione secca, che va da novembre ad aprile.

  • Turno 2:

    • Tu: Qual è il tasso di cambio?

    • Risposta con follow-up: 1 USD equivale a circa 17,65 pesos messicani.

  • Turno 3:

    • Tu: Qual è la temperatura media a dicembre?

    • Risposta con domande aggiuntive: La temperatura media varia da 21 a 25 °C. La media di Cancun è di circa 25 °C.

Senza domande aggiuntive, non sarebbe possibile rispondere alla domanda "Qual è il tasso di cambio?" perché la ricerca standard non saprebbe che vuoi il tasso di cambio messicano. Allo stesso modo, senza i follow-up, non ci sarebbe il contesto necessario per darti le temperature specifiche per il Messico.

Informazioni sulle sessioni

Per capire come funzionano i follow-up in Ricerca agente, devi comprendere le sessioni.

Una sessione è composta da query di testo fornite da un utente e risposte fornite da Ricerca agente.

Queste coppie di query e risposte sono talvolta chiamate turni. Nell'esempio precedente, il secondo turno è composto da "Qual è il tasso di cambio?" e "1 USD equivale a circa 17,65 pesos messicani".

Le sessioni vengono archiviate con l'app. Nell'app, una sessione è rappresentata dalla risorsa sessione.

Oltre a contenere i messaggi di query e risposta, la risorsa della sessione ha:

  • Un nome univoco (l'ID sessione).

  • Uno stato (in corso o completato).

  • Uno pseudo ID utente, ovvero un ID visitatore che monitora l'utente. Può essere assegnato in modo programmatico. Se mappato allo pseudo ID utente negli eventi utente della tua app, il modello può aiutarti a mostrare risultati personalizzati per l'utente.

  • Un'ora di inizio e un'ora di fine.

  • Un turno, ovvero una coppia di query e risposta.

Prima di iniziare

Prima di eseguire una query che richiede domande aggiuntive, assicurati di aver attivato l'opzione Risposte generative per l'app.

Archivia le informazioni sulla sessione e ricevi risposte

Puoi utilizzare la riga di comando per generare risposte di ricerca e archiviarle, insieme a ogni query, in una sessione.

REST

Per utilizzare la riga di comando per creare una sessione e generare risposte dall'input dell'utente, segui questi passaggi:

  1. Specifica l'app in cui vuoi archiviare la sessione:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .

    • APP_ID: l'ID dell'app Ricerca agente.

    • USER_PSEUDO_ID: una stringa con codifica UTF-8 che funge da identificatore pseudonimizzato univoco che monitora gli utenti. Può avere una lunghezza massima di 128 caratteri. Google consiglia vivamente di utilizzare questo campo perché migliora le prestazioni del modello e la qualità della personalizzazione. Per questo campo puoi utilizzare un cookie HTTP, che identifica in modo univoco un visitatore su un singolo dispositivo. Di seguito sono riportate alcune considerazioni importanti:

      • Questo identificatore non cambia quando il visitatore accede o esce da un sito web.
      • Questo campo non deve essere impostato sullo stesso identificatore per più utenti. In caso contrario, lo stesso ID utente può combinare le cronologie eventi di utenti diversi e peggiorare la qualità del modello.
      • Questo campo non deve includere informazioni che consentono l'identificazione personale (PII).
      • Per una determinata richiesta di ricerca o navigazione, questo campo deve essere mappato al campo userPseudoId corrispondente negli eventi utente.

      Per saperne di più, vedi userPseudoId.

    Esempio di comando e risultato

    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. Prendi nota dell'ID sessione, ovvero i numeri alla fine del campo name: nella risposta JSON. Nel risultato di esempio, l'ID è 5386462384953257772. Questo ID ti servirà nel passaggio successivo.

  3. Genera una risposta e aggiungila a una sessione nella tua app:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.
    • SESSION_ID: l'ID della sessione che hai creato nel passaggio 1. Queste sono le cifre alla fine del campo name:, indicate nel passaggio 2. Per una sessione, utilizza lo stesso ID sessione in ogni turno.
    • FILTER: un campo di testo per filtrare la ricerca utilizzando un'espressione di filtro. Il valore predefinito è una stringa vuota. Il modo in cui crei il filtro varia a seconda che tu abbia dati non strutturati con metadati, dati strutturati o dati del sito web. Per saperne di più, consulta Filtra la ricerca personalizzata per dati strutturati o non strutturati e Filtra la ricerca sul sito web.

    Esempio di comando e risultato

    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. Ripeti il passaggio 3 per ogni nuova query della sessione.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import discoveryengine_v1 as discoveryengine


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

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

    client = discoveryengine.SessionServiceClient()

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

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

Recupera una sessione dal datastore

Il seguente comando mostra come chiamare il metodo get e ottenere una sessione dal datastore.

REST

Per ottenere una sessione da un datastore, segui questi passaggi:

  1. Esegui questo comando curl:

    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"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.
    • SESSION_ID: l'ID della sessione che vuoi recuperare.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import discoveryengine_v1 as discoveryengine


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

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

    client = discoveryengine.SessionServiceClient()

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

    session = client.get_session(name=name)

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

Elimina una sessione dall'app

Il seguente comando mostra come chiamare il metodo delete ed eliminare una sessione dal datastore.

Per impostazione predefinita, le sessioni risalenti a più di 60 giorni prima vengono eliminate automaticamente. Tuttavia, se vuoi eliminare una sessione specifica, ad esempio se contiene contenuti sensibili, utilizza questa chiamata API per eliminarla.

REST

Per eliminare una sessione da un'app:

  1. Esegui questo comando curl:

    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"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.
    • SESSION_ID: l'ID della sessione che vuoi eliminare.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import discoveryengine_v1 as discoveryengine


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

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

    client = discoveryengine.SessionServiceClient()

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

    client.delete_session(name=name)

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

Aggiorna una sessione

Esistono vari motivi per cui potresti voler aggiornare una sessione. Ad esempio, per eseguire una delle seguenti operazioni:

  • Contrassegna una sessione come completata
  • Unire i messaggi di una sessione a un'altra
  • Modifica lo pseudo ID di un utente

Il seguente comando mostra come chiamare il metodo patch e aggiornare una sessione nel datastore.

REST

Per aggiornare una sessione da un'app:

  1. Esegui questo comando curl:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.
    • SESSION_ID: l'ID della sessione che vuoi aggiornare.
    • NEW_STATE: il nuovo valore dello stato, ad esempio IN_PROGRESS.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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


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

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

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

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

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

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

Elenca tutte le sessioni

Il seguente comando mostra come chiamare il metodo list ed elencare le sessioni nel datastore.

REST

Per elencare le sessioni di un'app, segui questi passaggi:

  1. Esegui questo comando curl:

    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"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import discoveryengine_v1 as discoveryengine


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

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

    client = discoveryengine.SessionServiceClient()

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

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

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

    return response

Elenca le sessioni di un utente

Il seguente comando mostra come chiamare il metodo list per elencare le sessioni associate a un utente o a un visitatore.

REST

Per elencare le sessioni associate a un utente o a un visitatore, segui questi passaggi:

  1. Esegui questo comando curl:

    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"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.
    • USER_PSEUDO_ID: lo pseudo ID dell'utente di cui vuoi elencare le sessioni.

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import discoveryengine_v1 as discoveryengine


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

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

    client = discoveryengine.SessionServiceClient()

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

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

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

    return response

Elenca le sessioni per un utente e uno stato

Il seguente comando mostra come chiamare il metodo list per elencare le sessioni in un determinato stato per un determinato utente.

REST

Per elencare le sessioni aperte o chiuse di un utente e associate a un determinato utente o visitatore, segui questi passaggi:

  1. Esegui questo comando curl:

    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"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • APP_ID: l'ID dell'app Ricerca agente.
    • USER_PSEUDO_ID: lo pseudo ID dell'utente di cui vuoi elencare le sessioni.
    • STATE: lo stato della sessione: STATE_UNSPECIFIED (chiusa o sconosciuta) o IN_PROGRESS (aperta).

Python

Per saperne di più, consulta la documentazione di riferimento dell'API Agent Search Python.

Per eseguire l'autenticazione in Agent Search, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import discoveryengine_v1 as discoveryengine


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

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

    client = discoveryengine.SessionServiceClient()

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

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

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

    return response