Ricerca con follow-up

Questa pagina introduce la ricerca con follow-up per Vertex AI Search e mostra come implementarla utilizzando le chiamate API.

Se vuoi aggiungere la ricerca con follow-up al widget di ricerca, consulta Configurare i risultati per il widget di ricerca.

La ricerca con follow-up si applica alle app di ricerca con dati non strutturati e siti web.

La ricerca con follow-up non si applica alle app Vertex AI Agents. Le app Vertex AI Agents utilizzano un agente che può conversare sui contenuti con gli utenti finali. Per ulteriori informazioni su Vertex AI Agents, consulta Introduzione a Vertex AI Agents.

Informazioni sulla ricerca con follow-up

La ricerca con i follow-up si basa su modelli di AI generativa. La ricerca con follow-up è diversa dalla ricerca di dati non strutturati standard perché tiene conto delle query precedenti nella stessa sessione di ricerca.

La ricerca con follow-up supporta quanto segue:

  • Elaborazione delle query in linguaggio naturale:elabora e comprende l'input in linguaggio umano, identifica lo scopo di una query e restituisce risultati pertinenti.

  • Sensibilità al contesto:comprende il contesto delle interazioni precedenti e fornisce risposte sensibili al contesto.

  • Più turni:consente agli utenti di porre domande di follow-up e di ricevere risposte pertinenti.

Esempio di ricerca con follow-up

Di seguito è riportato un esempio di ricerca con follow-up. Supponiamo che tu voglia sapere di più sulle vacanze in Messico:

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

  • Ricerca con follow-up: il periodo migliore per fare le vacanze in Messico è durante la stagione secca, da novembre ad aprile.

  • Tu: Qual è il tasso di cambio?

  • Ricerca con follow-up: 1 dollaro statunitense equivale a circa 17,65 pesos messicani.

  • Tu: Qual è la temperatura media a dicembre?

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

Con la ricerca normale, la tua domanda "Qual è il tasso di cambio?" non avrebbe risposta perché la ricerca normale non saprebbe che ti interessa il tasso di cambio messicano. Analogamente, una ricerca normale non manterrebbe il contesto per fornirti le temperature del Messico.

Le conversazioni

Nella ricerca con follow-up, una conversazione è composta da query di testo fornite da un utente e risposte fornite da Vertex AI Search.

Queste coppie di query e risposta sono a volte chiamate messaggi. Nell'esempio precedente, il secondo messaggio è composto da "Qual è il tasso di cambio?" e "1 dollaro statunitense equivale a circa 17,65 pesos messicani".

Le conversazioni vengono archiviate nello stesso datastore in cui vengono conservati i dati non strutturati. Nel datastore, una conversazione è rappresentata dalla risorsa Conversazione. Oltre a contenere i messaggi di query e risposta, la risorsa conversazione include:

  • Un nome univoco (l'ID conversazione).

  • Uno stato (in corso o completato).

  • Uno pseudo ID utente, ovvero un ID visitatore che monitora l'utente. Può essere assegnata in modo programmatico.

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

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti. I requisiti variano in base al tipo di app.

Memorizzare le conversazioni e ricevere risposte

Puoi utilizzare la riga di comando o le librerie client per generare risposte alla ricerca e per memorizzare la conversazione di ricerca con follow-up.

REST

Per utilizzare la riga di comando per creare una conversazione e generare risposte dall'input dell'utente:

  1. Specifica il datastore in cui vuoi archiviare la cronologia delle conversazioni:

    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/dataStores/DATA_STORE_ID/conversations" \
    -d '{
      "user_pseudo_id": "USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

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

    Fai clic per un esempio di risposta del comando POST.

    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
  2. Genera una risposta alla ricerca e aggiungila a una conversazione nuova o esistente nel tuo datastore:

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "filter": "FILTER"
    }'
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

    • CONVERSATION_ID: un ID univoco per la conversazione, ad esempio 123456. Per una conversazione con ricerca e follow-up, utilizza lo stesso ID conversazione in ogni turno.

    • FREE_TEXT: una stringa di testo libera contenente la domanda dell'utente, ad esempio what is bigquery?

    • 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 abbia dati del sito web o dati non strutturati con metadati. Per saperne di più, consulta Filtrare la ricerca con i follow-up.

    Fai clic per un esempio di risposta del comando POST.

    {
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
    }
    },
    "conversation": {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id",
    "messages": [
      {
        "userInput": {
          "input": "what is bigquery?"
        }
      },
      {
        "reply": {
          "summary": {
            "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
          }
        }
      }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    },
    "searchResults": [
    {
      "id": "c86f19582746b56f71c9bb6929893835",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/c86f19582746b56f71c9bb6929893835",
        "id": "c86f19582746b56f71c9bb6929893835",
        "derivedStructData": {
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/94627ee0249dfdfda25b1b158c717bca.txt",
          "snippets": [
            {
              "snippet_status": "SUCCESS",
              "snippet": "For larger websites, talk to the IT team and/or utilize a big data solution such as Google \u003cb\u003eBigQuery\u003c/b\u003e to extract all URLs. It may also be necessary to ask the ..."
            }
          ],
          "extractive_answers": [
            {
              "content": "Alternatively, load the Server Log Files into Google BigQuery and use the Google BigQuery interface or the 360 Data Studio to analyze the data. To monitor the indexation numbers of the HTTP and the HTTPS version, keep an eye on all submitted XML Sitemaps."
            }
          ]
        }
      }
    },
    {
      "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/774bd7ce2a3509ab4bbd1fc876f39dc2",
        "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "This consists of a collection of virtual tables. A virtual table exists for every queryable object type (content type if you prefer) in the repository. Each row in these virtual tables correspond to an instance of the corresponding object type (or of one of its subtypes)."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/28841ef8590a105e9415f1390648a811.txt"
        }
      }
    },
    {
      "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/3e1d306e49aefd9e23f2d5f7a66e6c76",
        "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "Other logo switches are based on search terms. For instance, if the term "ASCII art" is searched, an ASCII art version of the Google logo will appear next to the search box."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/98008df3eef5d3ee1661c52f23189190.txt"
        }
      }
    },
    {
      "id": "cf94e24aacd47cd2c2f5effcbdeda832",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/cf94e24aacd47cd2c2f5effcbdeda832",
        "id": "cf94e24aacd47cd2c2f5effcbdeda832",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "The company is listed on the NASDAQ stock exchange under the ticker symbols GOOGL and GOOG, and on the Frankfurt Stock Exchange under the ticker symbol GGQ1. These ticker symbols now refer to Alphabet Inc., Google's holding company, since the fourth quarter of 2015."
            }
          ],
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/d80204083ef1096799fa4b7257548b33.txt"
        }
      }
    },
    {
      "id": "05bc6497a4e7e6ca36b2e495b354b764",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/05bc6497a4e7e6ca36b2e495b354b764",
        "id": "05bc6497a4e7e6ca36b2e495b354b764",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "SQL injection countermeasures are designed to utilize secure programming methods. By changing the variables used by the application code, weaknesses in applications can be greatly minimized. This report will detail how to perform a SQL injection and explore the best countermeasures to prevent the attack."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/7cba75d646f5774a21d96801bec68bb3.txt",
          "snippets": [
            {
              "snippet_status": "NO_SNIPPET_AVAILABLE",
              "snippet": "No snippet is available for this page."
            }
          ]
        }
      }
    }
    ]
    }
  3. Ripeti il passaggio 2 per ogni nuova domanda nella conversazione.

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python Vertex AI Agent Builder.

Per autenticarti in Vertex AI Agent Builder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

from typing import List

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"
# data_store_id = "YOUR_DATA_STORE_ID"
# search_queries = ["YOUR_FIRST_SEARCH_QUERY", "YOUR_SECOND_SEARCH_QUERY"]


def multi_turn_search_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    search_queries: List[str],
) -> List[discoveryengine.ConverseConversationResponse]:
    #  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
    )

    # Initialize Multi-Turn Session
    conversation = client.create_conversation(
        # The full resource name of the data store
        # e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}
        parent=client.data_store_path(
            project=project_id, location=location, data_store=data_store_id
        ),
        conversation=discoveryengine.Conversation(),
    )


    for search_query in search_queries:
        # Add new message to session
        request = discoveryengine.ConverseConversationRequest(
            name=conversation.name,
            query=discoveryengine.TextInput(input=search_query),
            serving_config=client.serving_config_path(
                project=project_id,
                location=location,
                data_store=data_store_id,
                serving_config="default_config",
            ),
            # Options for the returned summary
            summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
                # Number of results to include in summary
                summary_result_count=3,
                include_citations=True,
            ),
        )
        response = client.converse_conversation(request)

        print(f"Reply: {response.reply.summary.summary_text}\n")

        for i, result in enumerate(response.search_results, 1):
            result_data = result.document.derived_struct_data
            print(f"[{i}]")
            print(f"Link: {result_data['link']}")
            print(f"First Snippet: {result_data['snippets'][0]['snippet']}")
            print(
                "First Extractive Answer: \n"
                f"\tPage: {result_data['extractive_answers'][0]['pageNumber']}\n"
                f"\tContent: {result_data['extractive_answers'][0]['content']}\n\n"
            )
        print("\n\n")

Filtrare la ricerca con i follow-up

Quando esegui una query con la ricerca con follow-up, puoi includere il campo filter per limitare il pool di documenti da cui viene ricavata una risposta. Puoi costruire il filtro utilizzando le espressioni di filtro. Le espressioni di filtro che utilizzi variano a seconda che tu abbia dati del sito web o dati non strutturati con metadati.

Espressioni di filtro per i dati del sito web

Se hai un datastore con dati del sito web, puoi filtrare la ricerca con la query di follow-up utilizzando le espressioni di filtro in Espressioni di filtro con indicizzazione avanzata dei siti web. Dopo aver costruito l'espressione del filtro, utilizzala per il valore del campo filter nel passaggio 2 di Archiviare le conversazioni e ricevere risposte.

Espressioni di filtro per dati non strutturati con metadati

Se hai un datastore con dati non strutturati con metadati, puoi filtrare la ricerca con la query di follow-up in modo che restituisca i documenti in base ai campi dei metadati che contengono. Consulta la sezione Filtrare la ricerca per dati strutturati o non strutturati per capire come utilizzare i metadati per filtrare la ricerca ordinaria (senza follow-up). Puoi utilizzare gli stessi principi per utilizzare i metadati per filtrare la ricerca con i follow-up. Dopo aver creato l'espressione di filtro, utilizzala per il valore del campo filter nel passaggio 2 di Archiviare le conversazioni e ricevere risposte.

Configurare il riepilogo

Il messaggio di risposta dalla ricerca con follow-up è un riepilogo generato restituito in summaryText. Esistono diversi modi per configurare il riepilogo generato. Questi sono descritti nelle sezioni seguenti:

Ricevere citazioni con i risultati di ricerca

Le citazioni, se specificate, sono numeri inseriti in linea nel riepilogo della ricerca. Questi numeri indicano da quali risultati di ricerca sono tratte frasi specifiche nel riepilogo.

Per ottenere citazioni:

  • Segui la procedura precedente per archiviare le conversazioni e ricevere risposte via chat, tranne che al passaggio 2, dove devi eseguire questo comando che include il campo summarySpec che imposta includeCitations su true.

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "include_citations": true }
    }'
    

    Fai clic per visualizzare parte della risposta di un comando di esempio.

    {
    "reply": {
    "summary": {
    }
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly [1]. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data [2, 3].",
      "safetyAttributes": {
        "categories": [
          "Finance",
          "Legal"
        ]

I numeri delle citazioni sono inclusi nel testo del riepilogo. I numeri di citazione si riferiscono ai risultati di ricerca restituiti e sono indicizzati da 1. Ad esempio, [1] indica che la frase è attribuita al primo risultato di ricerca. [2, 3] significa che la frase è attribuita sia al secondo che al terzo risultato di ricerca.

Ignorare le query dirette

Le query di tipo adversarial includono commenti negativi o sono progettate per generare output non sicuri e in violazione delle norme. Puoi specificare che non devono essere restituiti riepiloghi della ricerca per le query dirette. Quando una query nemica viene ignorata, la proprietà summaryText contiene un testo boilerplate che indica che non viene restituito alcun riepilogo della ricerca. I documenti di ricerca vengono restituiti per le query dirette anche se i riepiloghi della ricerca non lo sono.

Per specificare che non devono essere restituiti riepiloghi della ricerca per le query di attacco:

  • Segui la procedura precedente per archiviare le conversazioni e ricevere risposte via chat, tranne che al passaggio 2, dove devi eseguire questo comando che include il campo summarySpec che imposta ignoreAdversarialQuery su true.

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignoreAdversarialQuery": true }
    }'
    

    Fai clic per visualizzare parte della risposta di una query di attacco.

    "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "ADVERSARIAL_QUERY_IGNORED"
      ]

Ignora le query di ricerca non di riepilogo

Le query che non cercano un riepilogo restituiscono risultati non adatti per la sintesi. Ad esempio, "Perché il cielo è blu" e "Chi è il miglior calciatore al mondo?" sono query che cercano un riepilogo, ma non lo sono "Aeroporto di San Francisco" e "Coppa del mondo 2026". Si tratta molto probabilmente di query di navigazione. Puoi specificare che non vengano restituiti riepiloghi della ricerca per le query di ricerca non riepilogative. I documenti di ricerca vengono restituiti per le query di ricerca non relative ai riepiloghi, anche se i riepiloghi della ricerca non vengono restituiti.

Per specificare che non devono essere restituiti riepiloghi della ricerca per le query di ricerca non riepilogative:

  • Segui la procedura precedente per archiviare le conversazioni e ricevere risposte via chat, tranne che al passaggio 2, dove devi eseguire questo comando che include il campo summarySpec che imposta ignoreNonSummarySeekingQuery su true.

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignore_non_summary_seeking_query": true }
    }'
    

    Fai clic per visualizzare parte della risposta di una query di attacco.

     "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "NON_SUMMARY_SEEKING_QUERY_IGNORED"
      ]

Imposta il numero di risultati da utilizzare nel riepilogo

Puoi specificare il numero di risultati da utilizzare per generare il riepilogo. Per impostazione predefinita, se il campo summaryResultCount non è impostato, tutti i risultati restituiti vengono utilizzati per generare il riepilogo.

Per impostare il numero di risultati principali da utilizzare per il riepilogo:

  • Segui la procedura precedente per organizzare conversazioni in negozio e ricevere risposte via chat, tranne che al passaggio 2, dove devi eseguire questo comando che include il campo summarySpec che imposta summaryResultCount.

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "summary_result_count": NUMBER_OF_RESULTS }
    }'
    

    NUMBER_OF_RESULTS: il numero di risultati principali da cui generare il riepilogo della ricerca. Se il numero di risultati restituiti è inferiore a summaryResultCount, il riepilogo viene generato da tutti i risultati. Il valore massimo è 5.

Ricevere riepiloghi personalizzati

Puoi ottenere riepiloghi personalizzati fornendo istruzioni in linguaggio naturale nel campo modelPromptSpec.preamble quando richiedi un riepilogo.

Puoi richiedere personalizzazioni come lunghezza e livello di dettaglio, stile di output (ad es. "semplice"), lingua di output, punto focale della risposta e formato (ad es. tabelle, elenchi puntati e XML).

Ad esempio, per la query "Quali sono i vantaggi di BigQuery?", puoi inserire istruzioni di personalizzazione come gli esempi riportati di seguito:

  • Istruzioni di esempio: "please show the answer format in an ordered list"

    Risposta di esempio:

    The benefits of BigQuery are:
    
    1. Increased business productivity
    2. IT staff productivity
    3. Reduced infrastructure costs
    4. Loading and exporting data are free
    
  • Istruzioni di esempio: give a very detailed answer

    Risposta di esempio:

    BigQuery is a serverless, highly scalable, and cost-effective cloud data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that takes care of provisioning, scaling, and managing the underlying infrastructure, so you can focus on analyzing your data. BigQuery is also integrated with other Google Cloud services, such as Google Kubernetes Engine, Cloud Data Fusion, and Cloud Dataproc, making it easy to build and deploy data pipelines.
    
    Here are some of the benefits of using BigQuery:
    
    * **Fast and scalable:** BigQuery can process petabytes of data very quickly, and it can scale to handle even the most demanding workloads. * **Cost-effective:** BigQuery is a very cost-effective way to store and analyze data. You only pay for the data that you use, and there are no upfront costs or commitments. * **Secure:** BigQuery is a secure platform that meets the needs of even the most security-conscious organizations. * **Easy to use:** BigQuery is easy to use, even for non-technical users. It has a simple and intuitive user interface, and it supports a variety of data sources. * **Integrated with other Google Cloud services:** BigQuery is integrated with other Google Cloud services, making it easy to build and deploy data pipelines.
    
    If you are looking for a fast, scalable, and cost-effective way to analyze your data, then BigQuery is a great option.
    

Per ottenere un riepilogo personalizzato:

  • Segui la procedura precedente per archiviare le conversazioni e ricevere risposte via chat, tranne che al passaggio 2, dove devi eseguire questo comando che include il campo summarySpec che specifica l'istruzione di personalizzazione in modelPromptSpec.preamble.

      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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
      -d '{
        "query": { "input": "FREE_TEXT"},
        "summarySpec": {
          "modelPromptSpec": {
            "preamble": "CUSTOMIZATION_INSTRUCTIONS"
          }
        }
      }'
    
    • CUSTOMIZATION_INSTRUCTIONS: l'istruzione per la personalizzazione, come stringa.

SafeSearch può essere utilizzato per filtrare i contenuti espliciti, non sicuri e in violazione delle norme dalle risposte di riepilogo. Per ulteriori informazioni su SafeSearch, consulta Impostazioni di sicurezza per Vertex AI Search.

Per applicare la ricerca sicura a una risposta di chat:

  • Segui la procedura precedente per salvare le conversazioni e ricevere le risposte della chat, tranne che al passaggio 2, nella query specifica safe_search.

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "safe_search": true
    }'
    

Visualizzare e modificare le conversazioni archiviate

Puoi utilizzare la riga di comando per recuperare, eliminare, aggiornare ed elencare le conversazioni memorizzate.

Recuperare una conversazione dal datastore

Per ottenere tutti i dettagli di una conversazione specifica da un datastore:

  • Esegui il seguente 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID:l'ID dello datastore associato alla tua app.

    • CONVERSATION_ID: l'ID della conversazione

    Fai clic per un esempio di risposta del comando GET.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
    "state": "IN_PROGRESS",
    "userPseudoId": "2040473575290303058",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:11:24.046735Z"
    }

Eliminare una conversazione dal datastore

Per impostazione predefinita, le conversazioni precedenti a 60 giorni vengono eliminate automaticamente. Tuttavia, se vuoi eliminare una determinata conversazione, ad esempio se contiene accidentalmente contenuti sensibili, utilizza questa chiamata API per eliminarla.

Per eliminare una conversazione da un datastore:

  • Esegui il seguente 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

    • CONVERSATION_ID: l'ID della conversazione

    La risposta del comando DELETE è la seguente:

    {}
    

Aggiornare una conversazione

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

  • Contrassegnare una conversazione come completata

  • Unire i messaggi di una conversazione in un'altra

  • Modifica user_pseudo_id

Per aggiornare il state in una conversazione:

  • Esegui il seguente 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID?updateMask=state" \
    -d '{
      "state": "NEW_STATE"
    }'
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

    • CONVERSATION_ID: l'ID della conversazione da aggiornare

    • NEW_STATE: il nuovo valore per lo stato, ad esempio COMPLETED

    Fai clic per un esempio di risposta del comando PATCH.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "COMPLETED",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

Per aggiornare il user_pseudo_id in una conversazione:

  • Esegui il seguente 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID?updateMask=user_pseudo_id" \
    -d '{
      "user_pseudo_id": "NEW_USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

    • CONVERSATION_ID: l'ID della conversazione che vuoi aggiornare

    • NEW_USER_PSEUDO_ID: il nuovo valore per l'pseudo ID utente

    Fai clic per un esempio di risposta del comando PATCH.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

Il comando precedente mostra come modificare user_pseudo_id.. Tuttavia, puoi aggiornare altri campi della conversazione sostituendo user_pseudo_id con altri campi nella risorsa Conversazione.

Elenca tutte le conversazioni

Per elencare tutte le conversazioni in un datastore:

  • Esegui il seguente 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/dataStores/DATA_STORE_ID/conversations"
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

    Fai clic per un esempio di risposta del comando GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    },
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
      "state": "IN_PROGRESS",
      "userPseudoId": "2040473575290303058",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ]
    }
    ]
    }

La risposta contiene un elenco di conversazioni e il next_page_token. Se non viene restituito alcun valore next_page_token, non ci sono altre conversazioni da elencare.

Le dimensioni della pagina predefinite sono 50.

Elenco delle conversazioni per filtro

Anziché elencare tutte le conversazioni in un datastore, potresti elencare tutte le conversazioni aperte o tutte le conversazioni associate a un determinato utente.

Ad esempio, potresti mostrare all'utente le sue ricerche chiuse con un'opzione per riaprirne una.

Per farlo, elenca le conversazioni che corrispondono a un determinato filtro: user_pseudo_id o state (IN_PROGRESS o COMPLETED).

Elenca le conversazioni per un utente

Per elencare le conversazioni associate a un utente o un visitatore:

  • Esegui il seguente 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/dataStores/DATA_STORE_ID/conversations?filter=user_pseudo_id=USER_PSEUDO_ID"
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

    • USER_PSEUDO_ID: lo pseudo ID dell'utente di cui vuoi elencare le conversazioni.

    La risposta del comando GET è simile alla seguente:

    Fai clic per un esempio di risposta del comando GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

Elenca le conversazioni per un utente e uno stato

Per elencare le conversazioni in un determinato stato (aperto o chiuso) e associate a un utente o un visitatore:

  • Esegui il seguente 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/dataStores/DATA_STORE_ID/conversations?filter=user_pseudo_id=USER_PSEUDO_ID%20AND%20state=STATE"
    
    • PROJECT_ID: il numero o l'ID del tuo progetto Google Cloud

    • DATA_STORE_ID: l'ID dello datastore associato alla tua app.

    • USER_PSEUDO_ID: lo pseudo ID dell'utente di cui vuoi elencare le conversazioni.

    • STATE: indica se la conversazione è aperta o chiusa (IN_PROGRESS o COMPLETED)

    La risposta del comando GET è simile alla seguente:

    Fai clic per un esempio di risposta del comando GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

Per informazioni generali sulla sintassi di filtro, consulta Filtro AIP-160.

Domande correlate è una funzionalità di Anteprima con lista consentita che può restituire domande correlate oltre ai risultati di ricerca.

Ad esempio, quando chiedi "Qual è il periodo migliore dell'anno per andare in vacanza in Messico?", oltre a rispondere alla tua domanda, la ricerca suggerisce altre domande che potresti porre, ad esempio "Qual è il mese più economico per andare in vacanza in Messico?" e "Quali sono i mesi di alta stagione in Messico?".

Se vuoi che la tua app di ricerca restituisca domande correlate, contatta il team degli Account Google e indica i progetti e le app per i quali vuoi attivare le domande correlate. Se non utilizzi la configurazione di pubblicazione predefinita, devi fornire anche il nome della configurazione di pubblicazione.

Una volta attivata la funzionalità delle domande correlate, le domande vengono restituite come stringhe in ConverseConversationResponse.

Ulteriori informazioni

  • Per ulteriori informazioni sui campi summaryResultCount, includeCitations, ignoreAdversarialQuery, ignoreNonSummarySeekingQuery, consulta SummarySpec nella documentazione dell'API Vertex AI Agent Builder.

  • Per altri esempi su come ottenere i riepiloghi della ricerca, vedi Generare riepiloghi.