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 sono meno ben affrontate dagli LLM generali. Può essere utilizzato per addestrare ulteriormente il modello di ricerca.

Limitazioni

La regolazione della ricerca può essere applicata solo ai datastore non strutturati.

Informazioni sui dati di addestramento

Per ottimizzare un modello di ricerca, devi iniziare raccogliendo i dati di addestramento.

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

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

Ecco un po' di terminologia per descrivere i dati di addestramento che dovrai fornire:

  • Query di addestramento:le query che prevedi che gli utenti finali faranno. Assicurati di concentrarti sulle query con terminologia specifica del dominio o dell'azienda.

    Fornisci almeno 100.

  • Segmenti estratti:gli snippet (in genere più paragrafi) devono essere trascritti esattamente dai documenti nel datastore. Tutti i documenti nel datastore sono definiti "corpus".

    Devi fornire due tipi di segmenti estratti:

    • Segmenti contenenti informazioni pertinenti necessarie per rispondere alle query di addestramento. Si tratta di segmenti con corrispondenza positiva con le query.

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

    Una o due frasi non sono sufficientemente lunghe per essere un segmento estratto. 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 di estrazione per query e almeno 10.000 segmenti di estrazione aggiuntivi.

  • Scori di pertinenza: gli score di pertinenza sono numeri interi non negativi che stimano quanto sia pertinente il segmento di estrazione per la query. Fornisci un valore di voto per ogni coppia di query e segmento di estrazione. Un punteggio pari a 0 indica che il segmento di estrazione non è pertinente alla query. Un punteggio superiore a zero indica una certa pertinenza. Per un punteggio semplice, Google consiglia di assegnare un valore di 1 a tutti i segmenti pertinenti e 0 a quelli non pertinenti. In alternativa, se vuoi assegnare un ranking alla 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, altri punteggi non pertinenti.

Esempi di coppie di query e segmenti estratti

La tabella seguente fornisce alcuni esempi di coppie di query e segmenti estratti. Questi esempi generali sono stati tratti da Wikipedia. Tuttavia, per una ottimizzazione utile, ti consigliamo di fornire documenti di set di dati proprietari contenenti informazioni specifiche della tua attività e meno facilmente reperibili sul web.

L'ultima coppia in questa tabella è un esempio di coppia con punteggio pari a 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 quando 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 maggiorato. La società è stata quotata in borsa tramite un'offerta pubblica iniziale (IPO) nel 2004. Nel 2015, Google è stata riorganizzata come società controllata interamente di 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 più di valore, Google è al secondo posto secondo Forbes e al quarto posto secondo Interbrand. 1
dove viene pompato il sangue dopo che lascia il ventricolo destro? Il sangue ossigenato esce dai polmoni attraverso le vene polmonari, che lo riportano alla parte sinistra del cuore, completando il ciclo polmonare. Questo sangue poi entra nell'atrio sinistro, che lo pompa attraverso la valvola mitrale nel ventricolo sinistro. Dal ventricolo sinistro, il sangue passa attraverso la valvola aortica nell'aorta. Il sangue viene poi distribuito al corpo tramite la circolazione sistemica prima di tornare nuovamente alla circolazione polmonare. Arterie Articolo principale: arteria polmonare Dal ventricolo destro, il sangue viene pompato attraverso la valvola semilunare polmonare nell'arteria polmonare principale sinistra e destra (una per ogni polmone), che si ramificano in piccole arterie polmonari che si diffondono nei polmoni. [...] Lo shunt cardiaco è una connessione non naturale tra parti del cuore che provoca circolazione sanguigna che aggira i polmoni. 1
dove si trova la hall of fame del bowling? La World Bowling Writers ( WBW ) International Bowling Hall of Fame è stata fondata nel 1993 e si trova nell'International Bowling Museum and Hall of Fame , nell'International Bowling Campus di Arlington , Texas. Storia L'International Bowling Museum and Hall of Fame si trovava all'indirizzo 11 Stadium Plaza, St. Louis, Missouri, Stati Uniti, e condivideva lo stesso edificio con il St. Louis Cardinals Hall of Fame Museum fino all'8 novembre 2008. Si è trasferito ad Arlington e ha riaperto all'inizio del 2010. Nel 2012, la WBW è stata unita 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. Gli ufficiali della World Bowling Writers, che formavano il Consiglio della Hall,][...] L'uomo e la donna che ricevono il maggior numero di voti vengono eletti. 1
perché il cielo è blu? Un programma "Hello, World!" è in genere un semplice programma per computer che visualizza sullo schermo (spesso nella console) un messaggio simile a "Hello, World!" ignorando qualsiasi input utente'utente. Si tratta di un piccolo frammento di codice nella maggior parte dei linguaggi di programmazione generici, utilizzato per illustrare la sintassi di base di un linguaggio. Un programma "Hello, World!" è spesso il primo scritto da un utente che sta imparando un nuovo linguaggio di programmazione, ma può essere utilizzato anche come controllo per verificare che il software per computer destinato a compilare o eseguire il codice sorgente sia installato correttamente e che l'operatore sappia come utilizzarlo. [...] La versione in linguaggio C è stata preceduta da A Tutorial Introduction to the Language B di Kernighan del 1972, dove 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 (facoltativamente quattro) file specifici:

I tre file di addestramento (file del corpus, file di query e file delle 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 estratti: segmenti che contengono informazioni per rispondere alle query nel file di query e molti segmenti aggiuntivi da utilizzare come negativi casuali durante la messa a punto del modello. Devi avere almeno 100 segmenti che contengono le risposte alle query. Le query possono essere risposte da più segmenti. Inoltre,devi avere almeno 10.000 segmenti randomizzati.

Se i documenti nel tuo datastore contengono meno di 500 parole, puoi utilizzare interi documenti come segmenti. In caso contrario, crea in modo programmatico segmenti casuali di 250-500 parole dai documenti nel tuo 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 di 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 delle query contiene le query di esempio che verranno utilizzate per ottimizzare il modello. Ogni query deve avere uno o più segmenti estratti corrispondenti nel file del corpus. Devi fornire almeno 100 query di corrispondenza positiva. Puoi anche fornire query non pertinenti: si tratta di query che corrispondono a segmenti estratti 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 estratti 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 è riservato alla valutazione del modello ottimizzato dopo l'addestramento.

Il file contiene l'ID di una query e l'ID del relativo segmento estratto corrispondente (o non corrispondente) e un punteggio per la pertinenza del segmento alla query. Deve essere presente almeno una riga per query. Se a una query viene data una risposta da due segmenti, ci sono due righe per quella query. Score è un valore intero non negativo. Qualsiasi punteggio maggiore di zero indica che il documento è correlato alla query. Numeri più elevati 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 e 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 univoci. 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 prova

Come il file delle etichette di addestramento, questo file facoltativo contiene gli ID della query e del segmento di estrazione, nonché i punteggi di pertinenza. Contiene query meno numerose e diverse rispetto a quelle del file delle etichette di addestramento. Se presenti, le coppie di query e segmenti estratti 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 estratti dal 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 dati di addestramento e, facoltativamente, i file di dati di test. Utilizza i formati descritti in File di addestramento.

  2. Carica i file su Cloud Storage.

  3. Nella console Google Cloud, vai alla pagina Agent Builder.

    Agent Builder

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

  7. Fai clic su Ottimizza il modello di base.

  8. Specifica i file del corpus, delle 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:

  1. Prepara i file dei 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 progetto Google Cloud.

    • 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 della 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 di Cloud Storage per il file TSV delle etichette di test, ad esempio gs://my-bucket/test.tsv. Se non hai un file di etichette di prova, rimuovi il campo testDataPath o lascialo vuoto.

    Per informazioni generali su questo metodo, consulta trainCustomModel.

    La regolazione inizia automaticamente dopo il caricamento dei file di dati.

    Fai clic per un esempio di comando e risposta curl.

    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 Ottenere dettagli su un'operazione di lunga durata per vedere quando l'operazione di ottimizzazione della ricerca è completata.

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 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 testarla confrontando i risultati delle query con il modello ottimizzato e i risultati delle stesse query 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 Tuning:

    1. Nella console Google Cloud, vai alla pagina Agent Builder.

      Agent Builder

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

    3. Fai clic su Configurations (Configurazione).

    4. Fai clic sulla scheda Tuning.

  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 eseguire query utilizzando il modello originale.

  4. Confronta la qualità dei risultati.

REST

Per valutare l'effetto della regolazione, puoi eseguire query con il campo enableSearchAdaptor impostato su true e poi su false e confrontare i risultati. L'impostazione del campo enableSearchAdaptor su true indica che per la query viene utilizzata la versione ottimizzata della ricerca.

Per eseguire query di ricerca che utilizzano il modello ottimizzato:

  1. Nella chiamata al 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 progetto Google Cloud.
    • APP_ID: l'ID dell'app per cui vuoi eseguire la query.

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 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"
# engine_id = "YOUR_APP_ID"
# search_query = "YOUR_SEARCH_QUERY"


def search_sample(
    project_id: str,
    location: str,
    engine_id: str,
    search_query: str,
) -> List[discoveryengine.SearchResponse]:
    #  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
        # ),
    )

    response = client.search(request)
    print(response)

    return response

Attivare la ricerca personalizzata

Dopo aver testato la ricerca ottimizzata e aver 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 di anteprima principale, al widget e alle chiamate API:

  1. Vai alla scheda Tuning:

    1. Nella console Google Cloud, vai alla pagina Agent Builder.

      Agent Builder

    2. Fai clic sul nome dell'app.

    3. Fai clic su Configurations (Configurazione).

    4. Fai clic sulla scheda Tuning.

  2. Fai clic su Modello ottimizzato.

  3. Fai clic su Pubblica.

REST

Quando imposti il modello ottimizzato come modello predefinito, non è necessario 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 il seguente 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, consulta servingConfigs.patch.

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 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 personalizzata

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

Console

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

  1. Vai alla scheda Tuning:

    1. Nella console Google Cloud, vai alla pagina Agent Builder.

      Agent Builder

    2. Fai clic sul nome dell'app.

    3. Fai clic su Configurations (Configurazione).

    4. Fai clic sulla scheda Tuning.

  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 il seguente 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, consulta servingConfigs.patch.

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 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 ulteriori informazioni, consulta Valutare la qualità della ricerca.