Ricerca con follow-up

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

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

La ricerca con follow-up si applica alle app di ricerca con contenuti non strutturati dati 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 sugli agenti Vertex AI, consulta Introduzione a Agenti Vertex AI.

Informazioni sulla ricerca con follow-up

La ricerca con follow-up si basa su modelli di AI generativa. Ricerca con follow-up è diverso dai normali dati non strutturati rete di ricerca perché con Il follow-up prende in considerazione le 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.

  • Multi-turno: consente agli utenti di porre domande aggiuntive e ricevere pertinenti.

Esempio di ricerca con follow-up

Di seguito è riportato un esempio di ricerca con follow-up. Supponiamo che tu voglia sapere 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 una vacanza in Messico è durante l'asciutto. da novembre ad aprile.

  • Tu:qual è il tasso di cambio?

  • Ricerca con follow-up: 1 $ equivale a circa 17,65 peso messicani.

  • Tu: Qual è la temperatura media a dicembre?

  • Ricerca con follow-up:la temperatura media varia da 21 a 25 °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 standard non manterrebbe il contesto per fornire le tue temperature per il Messico.

Le conversazioni

Nella ricerca con follow-up, una conversazione è composta da query di testo fornite da un l'utente e le 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 i dati non strutturati viene mantenuta. Nel data store, 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 a seconda in base al tipo di app che possiedi.

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 del datastore associato con la tua app.

    • USER_PSEUDO_ID: si tratta di un identificatore univoco per il monitoraggio di un visitatore della 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 spazio dati associato alla tua app.

    • CONVERSATION_ID: un ID univoco per la conversazione, per 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 filtro un'espressione di base. Il valore predefinito è una stringa vuota. Il modo in cui crei il filtro varia a seconda che disponi di dati del sito web o dati non strutturati con metadati. Per ulteriori informazioni, consulta la sezione Filtro con domande aggiuntive.

    Fai clic per vedere una risposta di esempio da 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 eseguire l'autenticazione su Vertex AI Agent Builder, configura le credenziali predefinite dell'applicazione. Per maggiori 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. Tu per creare il filtro utilizzando le espressioni di filtro. Le espressioni di filtro che varia a seconda che si tratti di dati del sito web o di dati non strutturati con metadati.

Espressioni di filtro per i dati del sito web

Se hai un data store 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 indexing avanzato del sito 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.

Filtra espressioni per dati non strutturati con metadati

Se hai un data store 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 Filtrare la ricerca per dati non strutturati per capire come utilizzare i metadati filtra la ricerca ordinaria (senza follow-up). Puoi usare questi 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 della ricerca con follow-up è un riepilogo generato restituito nel seguente paese: summaryText. Esistono vari modi in cui puoi configurare la generazione riassunto. Le sezioni sono descritte nelle sezioni seguenti:

Ricevi citazioni con i risultati di ricerca

Le citazioni, se specificate, sono numeri posizionati in linea in una ricerca riassunto. Questi numeri indicano i risultati di ricerca di frasi specifiche in il riepilogo.

Per ricevere le citazioni:

  • Segui la precedente sezione Archiviare conversazioni e scaricare chat risposta, tranne che nel passaggio 2. esegui 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 delle citazioni si riferiscono i risultati di ricerca restituiti e sono indicizzati. Ad esempio, [1] indica che la frase è attribuita al primo risultato di ricerca. [2, 3] indica che viene attribuita sia al secondo che al terzo risultato di ricerca.

Ignorare le query avversarie

Le query di tipo adversarial includono commenti negativi o sono progettate per generare output non sicuri e in violazione delle norme. Puoi specificare che i riepiloghi delle ricerche non debbano per le query avversarie. 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 parte della risposta di un antagonista query.

    "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 eseguono la ricerca di riepilogo restituiscono risultati non adatti a riassunto. Ad esempio, "perché il cielo è blu?" e "Chi è il miglior calcio in tutto il mondo?" sono query di ricerca di riepilogo, ma "aeroporto SFO" e "mondo tazza 2026" non lo sono. Molto probabilmente si tratta di query di navigazione. Puoi specificare che non vengano restituiti riepiloghi delle ricerche per le query di ricerca non di riepilogo. I documenti della 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 precedente sezione Archiviare conversazioni e scaricare chat risposta, tranne che nel passaggio 2. esegui 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 parte della risposta di un antagonista query.

     "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 dei migliori risultati per generare riassunto 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 per la personalizzazione come negli esempi seguenti:

  • Esempio di istruzione: "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
    
  • Esempio di istruzione: 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 personalizzata, come stringa.

SafeSearch può essere utilizzato per filtrare i contenuti espliciti, non sicuri e che violano le 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 data store

Per ottenere tutti i dettagli su 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 del datastore associato con la tua app.

    • CONVERSATION_ID: l'ID della conversazione

    Fai clic per vedere una risposta di esempio da 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 conversazione specifica, ad esempio se contiene accidentalmente contenuti sensibili, utilizza questa chiamata API per eliminarla.

Per eliminare una conversazione da un datastore:

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

    • DATA_STORE_ID: l'ID del datastore associato con la tua app.

    • CONVERSATION_ID: l'ID della conversazione

    La risposta dal comando DELETE è simile alla seguente:

    {}
    

Aggiornare una conversazione

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

  • Contrassegnare una conversazione come completata

  • Unire i messaggi da una conversazione a un'altra

  • Modifica user_pseudo_id

Per aggiornare state in una conversazione:

  • 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/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 del datastore associato con la 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 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/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 spazio dati associato alla tua app.

    • CONVERSATION_ID: l'ID della conversazione da aggiornare

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

    Fai clic per vedere una risposta di esempio da 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 della risorsa Conversazione.

Elenca tutte le conversazioni

Per elencare tutte le conversazioni in un data store:

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

    • DATA_STORE_ID: l'ID dello spazio dati 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 next_page_token. Se non viene restituito alcun valore next_page_token, non ci sono altre conversazioni da elencare.

La dimensione predefinita della pagina è 50.

Elenco delle conversazioni per filtro

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

Ad esempio, puoi presentare 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).

Elencare le conversazioni di un utente

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

  • 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/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 spazio dati 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"
    }
    ]
    }

Elencare 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 spazio dati associato alla tua app.

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

    • 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 dei filtri, consulta l'articolo AIP-160Filtering (Filtri 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 fare le vacanze in Messico?", oltre a rispondere alla tua domanda, la ricerca suggerisce altre domande che potresti porre, ad esempio "Qual è il mese più economico per fare le vacanze in Messico?" e "Quali sono i mesi di alta stagione in Messico?".

Se vuoi che l'app di ricerca restituisca domande correlate, contatta il tuo team dedicato all'account e indicare quali progetti e app vuoi ricevere domande correlate per i quali è stata abilitata la funzionalità. 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 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.