Migliorare i risultati di ricerca con l'ottimizzazione della ricerca

Un modello di ricerca ottimizzato può fornire risultati di qualità migliore rispetto al modello di ricerca di base.

L'ottimizzazione della ricerca è particolarmente utile se hai domande su società o settori specifici che non vengono gestite bene dagli LLM generici. Può essere utilizzato per addestrare ulteriormente il modello di ricerca.

Limitazioni

L'ottimizzazione della ricerca può essere applicata solo ai datastore non strutturati.

Informazioni sui dati di addestramento

Per ottimizzare un modello di ricerca, devi innanzitutto assemblare i dati di addestramento.

I dati di addestramento devono contenere query che prevedi che gli utenti finali porranno e snippet di testo, lunghi da 250 a 500 parole, che contengano le informazioni pertinenti necessarie per rispondere alle query. Una query può essere associata a più snippet, purché ogni snippet contenga informazioni che rispondono alla query.

I dati di addestramento devono contenere anche snippet di testo non accoppiati a query, ma simili alle risposte per stile e lunghezza. Questi snippet senza query associate forniscono negativi casuali per ottimizzare il modello. Google consiglia di fornire almeno 10.000 di questi snippet.

Ecco alcuni termini per descrivere i dati di addestramento che dovrai fornire:

  • Query di addestramento:query che prevedi che i tuoi utenti finali pongano. Assicurati di concentrarti sulle query con terminologia specifica del dominio o dell'azienda.

    Forniscine almeno 100.

  • Segmenti estrattivi:gli snippet (in genere più paragrafi) devono essere presi testualmente dai documenti nel datastore. Tutti i documenti insieme nel datastore sono denominati "il corpus".

    Devi fornire due tipi di segmenti estrattivi:

    • Segmenti che contengono le informazioni pertinenti necessarie per rispondere alle query di addestramento. Questi sono segmenti che hanno una corrispondenza positiva con le query.

    • Segmenti non associati ad alcuna query di addestramento. Questi segmenti vengono utilizzati come negativi casuali nell'ottimizzazione del modello.

    Una frase o due non sono sufficientemente lunghe per essere un segmento estrattivo; il segmento deve contenere un contesto sufficiente per l'addestramento. Ad esempio, in risposta a una query come "chi ha fondato Google", un breve estratto come "Larry Page" non è sufficiente. Per esempi di segmenti sufficientemente lunghi, consulta la tabella di esempi riportata di seguito.

    Fornisci almeno un segmento estrattivo per query e almeno 10.000 segmenti estrattivi aggiuntivi.

  • Punteggi di pertinenza: i punteggi di pertinenza sono numeri interi non negativi che stimano la pertinenza del segmento estrattivo per la query. Fornisci un valore di punteggio per ogni coppia query e segmento estrattivo. Un punteggio pari a 0 indica che il segmento estrattivo non è pertinente alla query. Un punteggio maggiore di zero indica una certa pertinenza. Per una valutazione semplice, Google consiglia 1 per tutti i segmenti pertinenti e 0 per quelli non pertinenti. In alternativa, se vuoi classificare la pertinenza, puoi assegnare punteggi di pertinenza da 0 a 10 (ad esempio), con 10 per i segmenti più pertinenti e 0 per i segmenti che non sono affatto pertinenti.

    Fornisci almeno 100 punteggi pertinenti e, facoltativamente, punteggi non pertinenti aggiuntivi.

Esempi di coppie di query e segmenti estrattivi

La tabella seguente fornisce alcuni esempi di coppie di query e segmenti estrattivi. Questi esempi generali sono stati presi da Wikipedia. Tuttavia, per un'ottimizzazione utile, ti consigliamo di fornire documenti di set di dati proprietari che contengano informazioni specifiche per la tua attività e che siano meno facilmente reperibili sul web.

L'ultima coppia in questa tabella è un esempio di coppia con punteggio zero, in cui la risposta non è pertinente alla query.

Query di addestramento Segmento estrattivo Punteggio
chi ha fondato Google? Google è stata fondata il 4 settembre 1998 dagli informatici americani Larry Page e Sergey Brin, mentre erano studenti di dottorato presso la Stanford University in California.Insieme possiedono circa il 14% delle azioni quotate in borsa e controllano il 56% del potere di voto degli azionisti tramite azioni con diritto di voto multiplo. La società è stata quotata in borsa tramite un'offerta pubblica iniziale (IPO) nel 2004. Nel 2015, Google è stata riorganizzata come società interamente controllata da Alphabet Inc. Google è la più grande società controllata di Alphabet ed è una holding per le proprietà e gli interessi di Alphabet su internet. Sundar Pichai è stato nominato CEO di Google il 24 ottobre 2015, in sostituzione di Larry Page, che è diventato CEO di Alphabet. Il 3 dicembre 2019, Pichai è diventato anche CEO di Alphabet. [...] Nell'elenco dei brand di maggior valore, Google si classifica al secondo posto secondo Forbes e al quarto secondo Interbrand. 1
Dove viene pompato il sangue dopo aver lasciato il ventricolo destro? Il sangue ossigenato lascia i polmoni attraverso le vene polmonari, che lo riportano alla parte sinistra del cuore, completando il ciclo polmonare. Questo sangue entra poi nell'atrio sinistro, che lo pompa attraverso la valvola mitrale nel ventricolo sinistro. Dal ventricolo sinistro, il sangue passa attraverso la valvola aortica all'aorta. Il sangue viene quindi distribuito al corpo attraverso la circolazione sistemica prima di tornare alla circolazione polmonare. Arterie Articolo principale: arteria polmonare Dal ventricolo destro, il sangue viene pompato attraverso la valvola semilunare polmonare nelle arterie polmonari principali sinistra e destra (una per ogni polmone), che si ramificano in arterie polmonari più piccole che si diffondono in tutti i polmoni. [...] Lo shunt cardiaco è una connessione innaturale tra le parti del cuore che porta a circolazione sanguigna che bypassa i polmoni. 1
Dove si trova la International Bowling Hall of Fame? La World Bowling Writers ( WBW) International Bowling Hall of Fame è stata fondata nel 1993 e si trova all'interno dell'International Bowling Museum and Hall of Fame , nell'International Bowling Campus di Arlington, in Texas. Storia L'International Bowling Museum and Hall of Fame si trovava al 11 Stadium Plaza, St. Louis, Missouri, USA, e condivideva lo stesso edificio con il St. Louis Cardinals Hall of Fame Museum fino all'8 novembre 2008. È stato trasferito ad Arlington e ha riaperto all'inizio del 2010. Nel 2012, il WBW è stato unito all'International Bowling Media Association. Dopo la fusione, i membri della WBW Hall of Fame sono entrati a far parte della IBMA Luby Hall of Fame. I funzionari della World Bowling Writers, che hanno formato il consiglio di amministrazione della Hall of Fame, hanno eletto l'uomo e la donna che hanno ricevuto il maggior numero di voti. 1
perché il cielo è blu Un programma "Hello, World!" è in genere un semplice programma per computer che restituisce (o visualizza) sullo schermo (spesso la console) un messaggio simile a "Hello, World!" ignorando qualsiasi input utente'utente. Un piccolo frammento di codice nella maggior parte dei linguaggi di programmazione di uso generale, questo programma viene utilizzato per illustrare la sintassi di base di un linguaggio. Un programma "Hello, World!" è spesso il primo scritto da uno studente di un nuovo linguaggio di programmazione, ma può essere utilizzato anche come controllo per assicurarsi che il software del computer destinato a compilare o eseguire il codice sorgente sia installato correttamente e che il suo operatore sappia come utilizzarlo. [...] La versione in linguaggio C è stata preceduta da A Tutorial Introduction to the Language B di Kernighan del 1972, in cui la prima versione nota del programma si trova in un esempio utilizzato per illustrare le variabili esterne 0

Informazioni sui test

Dopo l'addestramento, la ricerca ottimizzata viene testata per determinare se l'ottimizzazione ha migliorato i risultati. Puoi fornire esplicitamente le query che vuoi testare. Se non fornisci query di test, Vertex AI Search utilizza il 20% delle query di addestramento come query di test.

File di addestramento

I dati di addestramento devono essere caricati in tre (o quattro, facoltativamente) file specifici:

I tre file di addestramento (file corpus, file query e file etichette di addestramento) e il file (facoltativo) delle etichette di test devono trovarsi in Cloud Storage. I percorsi dei file sono definiti dai campi nella chiamata trainCustomMethod.

File del corpus

Il file del corpus contiene segmenti estrattivi: segmenti che contengono informazioni per rispondere alle query nel file di query e molti segmenti aggiuntivi da utilizzare come negativi casuali durante l'ottimizzazione del modello. Devi avere almeno 100 segmenti che contengano risposte alle query; le query possono ricevere risposte da più segmenti. Inoltre,devi avere almeno 10.000 segmenti casuali.

Se i documenti nel datastore contengono meno di 500 parole, puoi utilizzare i documenti interi come segmenti. In caso contrario, crea in modo programmatico segmenti casuali di 250-500 parole dai documenti nel datastore e aggiungili al file del corpus.

Il file del corpus è un file JSONL (JSON Lines) in cui ogni riga contiene i campi _id e text con valori stringa. Ad esempio:

  {"_id": "doc1", "text": "Google was founded on September 4, 1998, by American computer scientists Larry Page and Sergey Brin while they were PhD students at Stanford University in California. Together they own about 14% of its publicly listed shares and control 56% of its stockholder voting power through super-voting stock. The company went public via an initial public offering (IPO) in 2004. In 2015, Google was reorganized as a wholly owned subsidiary of Alphabet Inc. Google is Alphabet's largest subsidiary and is a holding company for Alphabet's internet properties and interests. Sundar Pichai was appointed CEO of Google on October 24, 2015, replacing Larry Page, who became the CEO of Alphabet. On December 3, 2019, Pichai also became the CEO of Alphabet. [...] On the list of most valuable brands, Google is 105 ranked second by Forbes and fourth by Interbrand."}
  {"_id": "doc2", "text": "Oxygenated blood leaves the lungs through pulmonary veins, which return it to the left part of the heart, completing the pulmonary cycle. This blood then enters the left atrium, which pumps it through the mitral valve into the left ventricle. From the left ventricle, the blood passes through the aortic valve to the aorta. The blood is then distributed to the body through the systemic circulation before returning again to the pulmonary circulation. Arteries Main article: Pulmonary artery From the right ventricle, blood is pumped through the semilunar pulmonary valve into the left and right main pulmonary artery (one for each lung), which branch into smaller pulmonary arteries that spread throughout the lungs. [...] Cardiac shunt is an unnatural connection between parts of the heart that leads to blood flow that bypasses the lungs."}
  {"_id": "doc3", "text": "The World Bowling Writers ( WBW ) International Bowling Hall of Fame was established in 1993 and is located in the International Bowling Museum and Hall of Fame , on the International Bowling Campus in Arlington , Texas. History The International Bowling Museum and Hall of Fame was located at 11 Stadium Plaza, St. Louis, Missouri, USA, and shared the same building with the St. Louis Cardinals Hall of Fame Museum, until November 8, 2008. It moved to Arlington and reopened in early 2010. In 2012, the WBW was merged with the International Bowling Media Association. After the merger, the WBW Hall of Fame inductees became part of the IBMA Luby Hall of Fame.  officers of the World Bowling Writers, which formed the Hall's Board.][...] The man and woman who receive the most votes are elected."}
  {"_id": "doc4", "text": "A \"Hello, World!\" program is generally a simple computer program which outputs (or displays) to the screen (often the console) a message similar to "Hello, World!" while ignoring any user input. A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.  [...] The C-language version was preceded by Kernighan's own 1972 A Tutorial Introduction to the Language B, where the first known version of the program is found in an example used to illustrate external variables."}

La dimensione massima del file è di 500.000 righe.

File di query

Il file di query contiene le query di esempio che verranno utilizzate per l'ottimizzazione del modello. Ogni query deve avere uno o più segmenti estrattivi corrispondenti nel file del corpus. Devi fornire almeno 100 query di corrispondenza positiva. Puoi fornire anche query non pertinenti: si tratta di query che corrispondono a segmenti estrattivi con un punteggio di pertinenza pari a zero.

Il file di query è in formato JSONL e ha gli stessi campi del file del corpus.

Ad esempio:

  {"_id": "query1", "text": "who founded Google?"}
  {"_id": "query2", "text": "where is blood pumped after it leaves the right ventricle?"}
  {"_id": "query3", "text": "where is the bowling hall of fame located?"}
  {"_id": "query4", "text": "why is the sky blue?"}

Il numero massimo di query consentite nel file è 40.000.

Etichette di addestramento

Il file delle etichette di addestramento collega le query ai segmenti estrattivi e assegna un punteggio a ogni coppia di query e segmento.

Se il file delle etichette di test non è presente, il 20% delle query nel file delle etichette di addestramento viene riservato per la valutazione del modello ottimizzato dopo l'addestramento.

Il file contiene l'ID di una query e l'ID del segmento estrattivo corrispondente (o non corrispondente) e un punteggio per la pertinenza del segmento rispetto alla query. Deve essere presente almeno una riga per query; se a una query rispondono due segmenti, sono presenti due righe per quella query. Score è un valore intero non negativo. Un punteggio maggiore di zero indica che il documento è correlato alla query. Numeri più grandi indicano un livello di pertinenza maggiore. Se il punteggio viene omesso, il valore predefinito è 1.

Il file delle etichette di addestramento è un file TSV (valori separati da tabulazioni) con un'intestazione. Il file deve contenere le colonne query-id, corpus-id e score. query-id è una stringa che corrisponde alla chiave _id del file di query, mentre corpus-id è una stringa che corrisponde a _id nel file del corpus.

Ad esempio:

query-id    corpus-id   score
query1  doc1    1
query2  doc2    1
query3  doc3    1
query3  doc9    1
query4  doc4    0

Il file delle etichette di addestramento deve includere almeno 100 ID query unici. Il numero di ID query nel file delle etichette di addestramento combinato con il numero di query nel file delle etichette di test deve essere inferiore a 500.000.

Etichette di test

Come il file delle etichette di addestramento, questo file facoltativo contiene gli ID della query e del segmento estrattivo e i punteggi di pertinenza. Contiene un numero inferiore di query e query diverse rispetto al file delle etichette di addestramento. Se presenti, le coppie di query e segmenti estrattivi nel file vengono utilizzate per valutare l'ottimizzazione. Se il file delle etichette di test non è presente, per la valutazione vengono utilizzate le coppie di query e segmenti estrattivi del file delle etichette di addestramento.

Questo file ha lo stesso formato del file delle etichette di addestramento.

Ad esempio:

query-id    corpus-id   score
query200    doc200  1
query201    doc201  1
query202    doc202  1

Sebbene il file delle etichette di test sia facoltativo, se lo fornisci, deve contenere almeno tre ID query univoci.

Prima di iniziare

Attiva le funzionalità della versione Enterprise per l'app.

Per ottimizzare un modello di ricerca con i tuoi dati di addestramento, segui questi passaggi.

Console

Per utilizzare la console Google Cloud per ottimizzare un modello:

  1. Prepara i file di dati di addestramento e, facoltativamente, quelli di test. Utilizza i formati descritti in File di addestramento.

  2. Carica i file su Cloud Storage.

  3. Nella Google Cloud console, vai alla pagina AI Applications.

    Applicazioni di AI

  4. Nella pagina App, fai clic sul nome dell'app per cui vuoi un modello addestrato.

  5. Nel menu di navigazione, fai clic su Configurazioni.

  6. Fai clic sulla scheda Ottimizzazione.

  7. Fai clic su Ottimizza il modello di base.

  8. Specifica i file del corpus, della query, di addestramento e, facoltativamente, di test che hai preparato nei passaggi 1 e 2 precedenti.

  9. Fai clic su Avvia ottimizzazione.

  10. Aggiorna la pagina per visualizzare lo stato nella tabella Attività recente di ottimizzazione nella scheda Ottimizzazione.

REST

Per utilizzare il metodo trainCustomModel per ottimizzare un datastore, segui questi passaggi:

  1. Prepara i file di dati di addestramento (e, facoltativamente, i dati di test). Utilizza i formati descritti in File di addestramento.

  2. Inserisci i file in un bucket Cloud Storage.

  3. Carica i file dal bucket Cloud Storage in Vertex AI Search eseguendo il seguente 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/dataStores/DATA_STORE_ID:trainCustomModel" \
    -d '{
    "gcsTrainingInput": {
     "corpusDataPath": "CORPUS_JSONL_GCS_PATH",
     "queryDataPath": "QUERY_JSONL_GCS_PATH",
     "trainDataPath": "TRAIN_TSV_GCS_PATH",
     "testDataPath": "TEST_TSV_GCS_PATH"
    },
    "modelType": "search-tuning"
    }'
    

    Sostituisci quanto segue:

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

    • DATA_STORE_ID: l'ID del datastore che vuoi ottimizzare.

    • CORPUS_JSONL_GCS_PATH: il percorso del file JSONL del corpus in Cloud Storage, ad esempio gs://my-bucket/corpus.jsonl.

    • QUERY_JSONL_GCS_PATH: il percorso del file JSONL di query in Cloud Storage, ad esempio gs://my-bucket/query.jsonl.

    • TRAIN_TSV_GCS_PATH: il percorso del file TSV delle etichette di addestramento in Cloud Storage, ad esempio gs://my-bucket/train.tsv.

    • TEST_TSV_GCS_PATH: un campo facoltativo per specificare il percorso Cloud Storage del file TSV delle etichette di test, ad esempio gs://my-bucket/test.tsv. Se non hai un file di etichette di test, rimuovi il campo testDataPath o lascialo vuoto.

    Per informazioni generali su questo metodo, consulta trainCustomModel.

    L'ottimizzazione inizia automaticamente dopo il caricamento dei file di dati.

    Fai clic per visualizzare un comando curl e una risposta di esempio.

    curl -X POST
    -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321:trainCustomModel"
    -d '{
    "dataStore":
    "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321",
    "gcsTrainingInput": {
    "corpusDataPath": "gs://my-bucket/corpus.jsonl",
    "queryDataPath": "gs://my-bucket/query.jsonl",
    "trainDataPath": "gs://my-bucket/train.tsv"
    },
    "modelType": "search-tuning"
    }
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/operations/train-custom-model-6071430366161939774",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelMetadata"
      },
      "response": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelResponse",
        "modelStatus": "in-progress"
      }
    }
  4. Prendi nota del valore name restituito dal metodo trainCustomModel e segui le istruzioni riportate in Visualizzare i dettagli di un'operazione a lunga esecuzione per vedere quando l'operazione di ottimizzazione della ricerca è completata.

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, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


from google.api_core.client_options import ClientOptions
from google.api_core.operation import Operation
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# corpus_data_path = "gs://my-bucket/corpus.jsonl"
# query_data_path = "gs://my-bucket/query.jsonl"
# train_data_path = "gs://my-bucket/train.tsv"
# test_data_path = "gs://my-bucket/test.tsv"


def train_custom_model_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    corpus_data_path: str,
    query_data_path: str,
    train_data_path: str,
    test_data_path: str,
) -> Operation:
    #  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.SearchTuningServiceClient(client_options=client_options)

    # The full resource name of the data store
    data_store = f"projects/{project_id}/locations/{location}/collections/default_collection/dataStores/{data_store_id}"

    # Make the request
    operation = client.train_custom_model(
        request=discoveryengine.TrainCustomModelRequest(
            gcs_training_input=discoveryengine.TrainCustomModelRequest.GcsTrainingInput(
                corpus_data_path=corpus_data_path,
                query_data_path=query_data_path,
                train_data_path=train_data_path,
                test_data_path=test_data_path,
            ),
            data_store=data_store,
            model_type="search-tuning",
        )
    )

    # Optional: Wait for training to complete
    # print(f"Waiting for operation to complete: {operation.operation.name}")
    # response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    # metadata = discoveryengine.TrainCustomModelMetadata(operation.metadata)

    # Handle the response
    # print(response)
    # print(metadata)
    print(operation)

    return operation

Testare la ricerca ottimizzata e utilizzarla per singole query di ricerca

Al termine dell'ottimizzazione, puoi testare il modello confrontando i risultati delle query con il modello ottimizzato e con il modello di base.

Console

Per utilizzare la console Google Cloud per visualizzare l'anteprima del comportamento di un modello ottimizzato, segui questi passaggi:

  1. Vai alla scheda Ottimizzazione:

    1. Nella Google Cloud console, vai alla pagina AI Applications.

      Applicazioni di AI

    2. Fai clic sul nome dell'app di cui vuoi visualizzare l'anteprima.

    3. Fai clic su Configurations (Configurazione).

    4. Fai clic sulla scheda Ottimizzazione.

  2. Fai clic su Modello ottimizzato e utilizza il riquadro di anteprima a destra per eseguire query che utilizzano il modello ottimizzato.

  3. Fai clic su Modello di base e utilizza il riquadro di anteprima a destra per fare query utilizzando il modello originale.

  4. Confronta la qualità dei risultati.

REST

Per valutare l'effetto della messa a punto, puoi eseguire query con il campo enableSearchAdaptor impostato su true e poi su false e confrontare i risultati. Se il campo enableSearchAdaptor è impostato su true, significa che per quella query viene utilizzata la versione ottimizzata della ricerca.

Per eseguire query di ricerca che utilizzano il modello ottimizzato:

  1. Nella chiamata del metodo di query, imposta il campo enableSearchAdaptor nel campo customFineTuningSpec su true.

    Ad esempio:

    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:search" \
    -d '{
    "query": "QUERY",
    "customFineTuningSpec": { "enableSearchAdaptor": true }
    }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • APP_ID: l'ID dell'app che vuoi interrogare.

Per informazioni dettagliate sulle query di ricerca, vedi Ottenere i risultati di ricerca e il metodo servingConfigs.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, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

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


def search_sample(
    project_id: str,
    location: str,
    engine_id: str,
    search_query: str,
) -> discoveryengine.services.search_service.pagers.SearchPager:
    #  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.SearchServiceClient(client_options=client_options)

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

    # Optional - only supported for unstructured data: Configuration options for search.
    # Refer to the `ContentSearchSpec` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
    content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
        # For information about snippets, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/snippets
        snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
            return_snippet=True
        ),
        # For information about search summaries, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
        summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
            summary_result_count=5,
            include_citations=True,
            ignore_adversarial_query=True,
            ignore_non_summary_seeking_query=True,
            model_prompt_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelPromptSpec(
                preamble="YOUR_CUSTOM_PROMPT"
            ),
            model_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelSpec(
                version="stable",
            ),
        ),
    )

    # Refer to the `SearchRequest` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
    request = discoveryengine.SearchRequest(
        serving_config=serving_config,
        query=search_query,
        page_size=10,
        content_search_spec=content_search_spec,
        query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
            condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
        ),
        spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
            mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
        ),
        # Optional: Use fine-tuned model for this request
        # custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
        #     enable_search_adaptor=True
        # ),
    )

    page_result = client.search(request)

    # Handle the response
    for response in page_result:
        print(response)

    return page_result

Attivare la ricerca ottimizzata

Dopo aver testato la ricerca ottimizzata e deciso di utilizzarla per tutte le query di ricerca, puoi impostarla come modello di ricerca predefinito.

Console

Per impostare il modello ottimizzato come modello predefinito e applicarlo alla pagina principale di anteprima, al widget e alle chiamate API, segui questi passaggi:

  1. Vai alla scheda Ottimizzazione:

    1. Nella Google Cloud console, vai alla pagina AI Applications.

      Applicazioni di AI

    2. Fai clic sul nome dell'app.

    3. Fai clic su Configurations (Configurazione).

    4. Fai clic sulla scheda Ottimizzazione.

  2. Fai clic su Modello ottimizzato.

  3. Fai clic su Pubblica.

REST

Quando imposti il modello ottimizzato come modello predefinito, non devi specificare il campo customFineTuningSpec nella query di ricerca come nella procedura precedente.

Per utilizzare la versione ottimizzata della ricerca per impostazione predefinita per tutte le query di ricerca, segui questi passaggi:

  1. Per impostare la ricerca ottimizzata come modello predefinito, esegui questo comando curl:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": true
    }
    }'
    

    Per informazioni generali su questo metodo, vedi servingConfigs.patch.

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, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


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

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


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  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.ServingConfigServiceClient(client_options=client_options)

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

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

Disattivare la ricerca ottimizzata

Se non vuoi più utilizzare la versione ottimizzata della ricerca, ad esempio se ritieni che i risultati non siano migliori, o peggiori, rispetto a prima dell'ottimizzazione, puoi disattivare la ricerca ottimizzata.

Console

Per ripristinare l'utilizzo del modello di base come modello predefinito:

  1. Vai alla scheda Ottimizzazione:

    1. Nella Google Cloud console, vai alla pagina AI Applications.

      Applicazioni di AI

    2. Fai clic sul nome dell'app.

    3. Fai clic su Configurations (Configurazione).

    4. Fai clic sulla scheda Ottimizzazione.

  2. Fai clic su Modello di base.

  3. Fai clic su Pubblica.

REST

Per interrompere l'utilizzo del modello ottimizzato, esegui una chiamata curl simile a quella precedente, ma imposta enableSearchAdaptor su false:

  1. Esegui questo comando curl:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": false
    }
    }'
    

    Per informazioni generali su questo metodo, vedi servingConfigs.patch.

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, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


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

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


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  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.ServingConfigServiceClient(client_options=client_options)

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

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

Passaggi successivi

  • Per comprendere l'impatto dell'ottimizzazione della ricerca sulla qualità della ricerca, valuta la qualità della ricerca. Per maggiori informazioni, consulta la pagina Valutare la qualità della ricerca.