Ricevere risposte e follow-up

Questa pagina introduce la ricerca con risposta e follow-up per Vertex AI Search e mostra come implementarla per le app di ricerca personalizzate utilizzando le chiamate ai metodi.

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

Funzionalità del metodo di risposta

Le caratteristiche principali del metodo di risposta sono le seguenti:

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

    • "Quali sono le entrate rispettive di Google Cloud e Google Ads nel 2024?"
    • "Dopo quanti anni dalla sua fondazione, Google ha raggiunto 1 miliardo di dollari di entrate?"
  • 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 accoppiarsi con il metodo di ricerca per ridurre la latenza della ricerca. Puoi chiamare separatamente il metodo di ricerca e il metodo di risposta e visualizzare i risultati di ricerca e le risposte in iframe diversi in momenti diversi. Ciò significa che puoi mostrare ai tuoi utenti i risultati di ricerca (i 10 link blu) in millisecondi. Non devi attendere la generazione delle risposte prima di mostrare i risultati di ricerca.

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

Quando utilizzare Rispondi e quando utilizzare Cerca

Vertex AI Search dispone di due metodi utilizzati per eseguire query sulle app. Hanno funzionalità diverse ma sovrapposte.

Utilizza il metodo risposta quando:

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

  • Vuoi effettuare ricerche in più passaggi, ovvero ricerche che mantengono il contesto per consentire domande aggiuntive.

Utilizza il metodo search nei seguenti casi:

  • Ti servono solo i risultati di ricerca, non una risposta generata.

  • Hai uno dei seguenti requisiti:

    • Dati sanitari o contenuti multimediali
    • I tuoi embedding
    • Controlli sinonimi o reindirizzamento
    • Facet
    • Codici paese dell'utente
  • Devi sfogliare i dati nel tuo datastore generico.

Utilizza insieme i metodi di risposta e di ricerca quando:

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

  • Hai problemi di latenza e vuoi tornare indietro 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 più semplici.

    Input utente Query secondarie create dalla query complessa
    Quali lavori e hobby hanno in comune Andie Ram e Arnaud Clément?
    • Andie Ram occupation
    • Arnaud Clément occupation
    • Hobby di Andie Ram
    • Hobby di Arnaud Clément
  • Sintetizzare le query multi-turno per rendere le domande aggiuntive consapevoli del contesto e con stato.

    Ad esempio, le query sintetizzate dall'input utente'utente a ogni turno potrebbero avere questo 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 bisogno anche 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 laptop con schermo più grande per la scuola, non Mac, con tastiera e mouse wireless e uno zaino
  • Semplifica le query lunghe per migliorare il recupero (richiede le funzionalità LLM avanzate).

    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 viene aggiunto al carrello e riceve un messaggio di errore. Ho controllato il codice e sembra corretto, quindi non so quale possa 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 (reason + act), 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 1 miliardo di dollari di entrate? Passaggio 1:
    [Pensiero]: devo sapere quando è stata fondata Google, poi posso chiedere le sue entrate da allora.
    [Azione] Ricerca: quando è stata fondata Google?[Osserva i risultati di ricerca]: "1998"

    Passaggio 2:
    [Pensiero]: ora devo cercare le entrate annuali di Google dal 1998 e scoprire quando hanno superato per la prima volta 1 miliardo.
    [Act] Search: Google revenue since 1998
    [Observe Search Results] Google revenue in 1998, Google revenue in 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 le funzionalità LLM avanzate.

Classificazione delle query

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

Per saperne di più sulle query ostili e che non cercano risposte, consulta Ignorare le query ostili e Ignorare le query che non cercano 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 non disponibili nel metodo di ricerca sono:

  • Ottenere un punteggio di supporto per ogni rivendicazione (frase nella risposta generata). Il punteggio di supporto è un valore in virgola mobile compreso nell'intervallo [0,1] che indica quanto l'affermazione è basata sui dati nel datastore. Per maggiori informazioni, vedi Punteggi di supporto per la messa a terra dei resi.

  • Ottenere un punteggio di assistenza aggregato per la risposta. Il punteggio di supporto indica in che misura la risposta si basa sui dati nel datastore. Per maggiori informazioni, consulta Punteggi di supporto per il grounding dei risultati.

  • Restituisci solo risposte ben documentate. Puoi scegliere di restituire solo le risposte che soddisfano una determinata soglia di punteggio di supporto. Per ulteriori informazioni, vedi Mostrare solo risposte ben documentate.

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

  • Aggiungi informazioni di personalizzazione alle query in modo che le risposte possano essere personalizzate per i singoli utenti. Per ulteriori informazioni, vedi Personalizzare le risposte.

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

  • Ricevere risposte che includono grafici che tracciano i dati contenuti nelle risposte. Per saperne di più, vedi Generare grafici per le risposte.

  • Recupero delle immagini dal datastore. Se l'datastore contiene immagini, il metodo di risposta può restituire un'immagine nella risposta. Le immagini dello datastorei possono essere restituite anche nei riferimenti se vengono richieste le citazioni. Per saperne di più, consulta Recuperare 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 per siti web, attiva le seguenti opzioni:

    • Funzionalità della versione Enterprise: ti consente di accedere alle funzionalità principali di risposte generative. Sono incluse tutte le funzionalità di generazione di risposte, tranne quelle avanzate, come domande correlate, semplificazione delle query, query multi-turn e risposte multimodali che restituiscono immagini e grafici.
    • Funzionalità LLM avanzate: ti consente di accedere alle funzionalità avanzate di risposte generative che richiedono ragionamenti in più passaggi, semplificazione delle query, query in più passaggi, domande correlate e risposte multimodali che restituiscono immagini e grafici.
  • Inoltre, se hai un datastore di ricerca sul sito web, attiva l'indicizzazione avanzata dei siti web.

Cerca e rispondi (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 cercare e ottenere risultati 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"}
          }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

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 cercare 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.
    • 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 ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

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 è aumentato.

REST

Per cercare e ottenere risultati con una risposta generata che consente fino a cinque passaggi di riformulazione, svolgi i seguenti 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 più grande consentito è 5. Se non è impostato o se è impostato su un valore inferiore a 1, il valore è quello predefinito, 1.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

Cercare e rispondere con la classificazione delle query

Il seguente comando mostra come chiamare il metodo answer per verificare se una query è ostile, non cerca risposte 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. Vedi Ignorare le query ostili e Ignorare le query che non cercano riepiloghi.

REST

Per determinare se una query è ostile 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca. Ad esempio, "ciao".
    • QUERY_CLASSIFICATION_TYPE: i tipi di query che vuoi identificare: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY o entrambi.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

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

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

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

REST

Per impostare varie opzioni relative a quali e come vengono restituiti i risultati di ricerca, procedi nel seguente modo:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 quali documenti vengono interrogati. Se i metadati di un documento soddisfano la specifica del filtro, il documento verrà sottoposto a query. Per maggiori informazioni, inclusa la sintassi dei filtri, consulta Filtrare 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 ulteriori informazioni, inclusa la sintassi per la specifica del boost, consulta Migliorare i risultati di ricerca.
    • ORDER_BY: l'ordine in cui vengono restituiti i documenti. I documenti possono essere ordinati in base a un campo in un oggetto Documento. 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 Analizzare e dividere i documenti in blocchi e ContentSearchSpec. Questo campo è disponibile solo nella versione v1alpha dell'API.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

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.

Ignorare le query contraddittorie e quelle che non cercano risposte

Il seguente comando mostra come evitare di rispondere a query ostili e query che non cercano risposte quando si chiama il metodo answer.

REST

Per evitare di rispondere a query ostili o che non richiedono una risposta, procedi nel seguente modo:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

Mostra solo le risposte pertinenti

Vertex AI Search può valutare la pertinenza dei risultati per una query. Se nessun risultato viene ritenuto sufficientemente pertinente, invece di 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 irrilevanti quando viene chiamato il metodo answer.

REST

Per restituire una risposta di riserva se non vengono trovati risultati pertinenti, procedi nel seguente modo:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

Restituisci i punteggi di supporto del grounding

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

Per informazioni generali sulla fondatezza in Vertex AI, consulta Verificare la fondatezza 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per cui vuoi eseguire query.
    • QUERY: una stringa di testo libero che contiene la domanda o la query di ricerca.

Mostra solo risposte ben documentate

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

Scegli una soglia di livello basso o alto per il punteggio di supporto della messa a terra. La risposta viene restituita solo se raggiunge o supera quel livello. Puoi sperimentare con le due soglie di filtro e senza soglia per determinare quale livello di filtro è più probabile che fornisca i risultati migliori per i tuoi utenti.

Per informazioni generali sulla fondatezza in Vertex AI, consulta Verificare la fondatezza 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, procedi nel seguente modo:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 della base. Le opzioni sono: FILTERING_LEVEL_LOW e FILTERING_LEVEL_HIGH. Se filteringLevel non è incluso, alla risposta non viene applicato alcun filtro del 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, vedi 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per cui vuoi eseguire 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 maggiori informazioni, consulta Versioni e ciclo di vita del modello di generazione delle risposte.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

Specificare un preambolo personalizzato

Il comando seguente 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ò influire in modo 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

Il metodo di risposta può suggerire domande correlate, che gli utenti possono scegliere invece di 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 specificarne l'inclusione in ogni query e vengono restituite come array di stringhe nella risposta.

Prima di iniziare

Assicurati di aver attivato le funzionalità LLM avanzate per l'app.

Procedura

Il seguente comando mostra come richiedere l'inclusione di domande correlate nella risposta.

REST

Per ottenere 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 Vertex AI 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

Impostare 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per cui vuoi eseguire 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 ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

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

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

    # Handle the response
    print(response)

    return response

Personalizzare le risposte

Se sono disponibili informazioni specifiche sull'utente, ad esempio dati in un profilo, puoi specificare queste informazioni 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 sta cercando informazioni sull'upgrade di un cellulare, le informazioni del suo profilo, come il modello di smartphone attuale e il piano cellulare, forniscono informazioni che possono personalizzare la risposta generata.

Per aggiungere informazioni personali sull'utente che esegue una query e generare una risposta che tenga conto delle informazioni personali:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 dell'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 quando genera una risposta personalizzata alla query.

Generare grafici per le risposte

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

Puoi richiedere specificamente che una risposta includa un grafico, ad esempio "Traccia il tasso di crescita annuo dei pagamenti delle piccole imprese negli anni con dati disponibili". Se il sistema determina che sono presenti dati sufficienti, viene restituito un grafico. Di solito, insieme al grafico viene restituito del testo di risposta.

Inoltre, se sono disponibili dati sufficienti per creare un grafico, il metodo di risposta può restituire un grafico anche se la query non lo ha richiesto esplicitamente. Ad esempio, "Qual è stato il miglioramento dei punteggi dell'IDU 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 con la risposta. Se i dati non sono sufficienti, non è possibile generare una cifra.

Altri scenari di errore includono errori di esecuzione del codice e timeout. Se si verifica una di queste situazioni, riformula la query e riprova.

Prima di iniziare

Prima di eseguire una query che richiede grafici generati, procedi nel seguente modo:

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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 gemini-2.0-flash-001/answer_gen/v1 o successive. Per maggiori informazioni, 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 dagli archivi di dati, ALL_AVAILABLE_SOURCES.

Recuperare le immagini esistenti dal datastore

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

Per visualizzare i grafici nelle risposte restituite, devi attivare le funzionalità LLM avanzate.

Quando imageSource è CORPUS_IMAGE_ONLY o ALL_AVAILABLE_SOURCES, il metodo answer può recuperare le immagini dall&#39datastorei in modo appropriato. Tuttavia, l'attivazione di questa opzione non significa che le immagini vengano sempre restituite.

Puoi inserire al massimo un'immagine per risposta. Le citazioni possono contenere più immagini.

Limitazioni

  • L'app che utilizzi 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, vedi Analizzare e dividere in blocchi i documenti.

Procedura

REST

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

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search per 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 gemini-2.0-flash-001/answer_gen/v1 o successive. Per maggiori informazioni, consulta Versioni e ciclo di vita del modello di generazione delle risposte.
    • IMAGE_SOURCE: un'enumerazione per richiedere che la risposta includa un'immagine dall'datastore, CORPUS_IMAGE_ONLY, o che la risposta possa includere un'immagine dall'datastore o un grafico generato, ALL_AVAILABLE_SOURCES.

Comandi per le domande aggiuntive

I follow-up sono query multi-turno. Dopo la prima query in una sessione successiva, 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 invece di inserire le proprie domande di follow-up. Per ricevere suggerimenti per domande correlate, devi attivare le funzionalità LLM avanzate.

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 sulle vacanze in Messico:

  • Turno 1:

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

    • Risposta con follow-up: il periodo migliore per andare in 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 dollaro statunitense equivale a circa 17,65 pesos messicani.

  • Turno 3:

    • Tu:Qual è la temperatura media a dicembre?

    • Risposta con follow-up: la temperatura media varia da 21 a 26 °C. La media di Cancún è di circa 25 °C.

Senza i follow-up, la tua domanda "Qual è il tasso di cambio?" non avrebbe risposta perché la ricerca normale non saprebbe che volevi il tasso di cambio messicano. Allo stesso modo, senza follow-up, non ci sarebbe il contesto necessario per fornirti le temperature specifiche per il Messico.

Informazioni sulle sessioni

Per capire come funzionano i follow-up in Vertex AI Search, devi comprendere le sessioni.

Una sessione è costituita da query di testo fornite da un utente e dalle risposte fornite da Vertex AI Search.

Queste coppie di query e risposte sono a volte chiamate turni. Nell'esempio precedente, il secondo turno è composto da "Qual è il tasso di cambio?" e "1 dollaro statunitense 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 sessione dispone di:

  • 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.

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

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

Prima di iniziare

Prima di eseguire una query che richiede domande aggiuntive, assicurati di aver attivato le funzionalità avanzate degli LLM per l'app.

Memorizzare le informazioni della sessione e ricevere risposte

Puoi utilizzare la riga di comando per generare risposte e risultati di ricerca e per memorizzarli, 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 Google Cloud progetto.

    • APP_ID: l'ID dell'app Vertex AI Search.

    • USER_PSEUDO_ID: si tratta di un identificatore univoco per monitorare un visitatore della ricerca. Ad esempio, puoi implementarlo con un cookie HTTP, che identifica in modo univoco un visitatore su un singolo dispositivo.

    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, i numeri alla fine del campo name: nella risposta JSON. Nel risultato di esempio, l'ID è 5386462384953257772. 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.
    • 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 costruisci il filtro varia a seconda che tu disponga di dati non strutturati con metadati, dati strutturati o dati del sito web. Per saperne di più, vedi Filtrare la ricerca personalizzata per dati strutturati o non strutturati e Filtrare la ricerca sui siti 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 nella sessione.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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.ConversationalSearchServiceClient()

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

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

Ottieni una sessione dal datastore

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

REST

Per ottenere una sessione da un datastore:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.
    • SESSION_ID: l'ID della sessione che vuoi recuperare.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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.ConversationalSearchServiceClient()

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

    session = client.get_session(name=name)

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

Eliminare una sessione dall'app

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

Per impostazione predefinita, le sessioni più vecchie di 60 giorni 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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.
    • SESSION_ID: l'ID della sessione che vuoi eliminare.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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.ConversationalSearchServiceClient()

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

    client.delete_session(name=name)

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

Aggiornare una sessione

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

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

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

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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.
    • SESSION_ID: l'ID della sessione che vuoi aggiornare.
    • NEW_STATE: il nuovo valore per lo stato, ad esempio IN_PROGRESS.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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.ConversationalSearchServiceClient()

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

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

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

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

Elenca tutte le sessioni

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

REST

Per elencare le sessioni di un'app:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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.ConversationalSearchServiceClient()

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

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

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

    return response

Elencare 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:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.
    • USER_PSEUDO_ID: lo pseudo ID dell'utente di cui vuoi elencare le sessioni.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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.ConversationalSearchServiceClient()

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

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

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

    return response

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 particolare utente.

REST

Per elencare le sessioni di un utente aperte o chiuse e associate a un determinato utente o visitatore, procedi nel seguente modo:

  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 Google Cloud progetto.
    • APP_ID: l'ID dell'app Vertex AI Search.
    • 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 ulteriori informazioni, consulta la documentazione di riferimento dell'API AI Applications Python.

Per autenticarti in AI Applications, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi 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.ConversationalSearchServiceClient()

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

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

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

    return response