Eseguire la ricerca semantica e la generazione Retrieval-Augmented Generation

Questo tutorial ti guida attraverso l'intero processo di creazione e utilizzo degli embedding di testo per la ricerca semantica e la generazione Retrieval-Augmented Generation (RAG).

Questo tutorial spiega le seguenti attività:

  • Creazione di un modello remoto BigQuery ML remote model su un modello di embedding di Vertex AI.
  • Utilizzo del modello remoto con la AI.GENERATE_EMBEDDING funzione per generare embedding dal testo in una tabella BigQuery.
  • Creazione di un indice vettoriale per indicizzare gli embedding al fine di migliorare il rendimento della ricerca.
  • Utilizzo della VECTOR_SEARCH funzione con gli embedding per cercare testo simile.
  • Esecuzione di RAG generando testo con la AI.GENERATE_TEXT funzione, e utilizzando i risultati della ricerca vettoriale per aumentare l'input del prompt e migliorare i risultati.

Questo tutorial utilizza la tabella pubblica BigQuery patents-public-data.google_patents_research.publications.

Ruoli obbligatori

Per eseguire questo tutorial, devi disporre dei seguenti ruoli Identity and Access Management (IAM):

  • Creare e utilizzare set di dati, connessioni e modelli BigQuery: Amministratore BigQuery (roles/bigquery.admin).
  • Concedere autorizzazioni al account di servizio della connessione: Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin).

Questi ruoli predefiniti contengono le autorizzazioni necessarie per eseguire le attività descritte in questo documento. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

  • Creare un set di dati: bigquery.datasets.create
  • Creare, delegare e utilizzare una connessione: bigquery.connections.*
  • Impostare la connessione predefinita: bigquery.config.*
  • Impostare le autorizzazioni del account di servizio: resourcemanager.projects.getIamPolicy e resourcemanager.projects.setIamPolicy
  • Creare un modello ed eseguire l'inferenza:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi Google Cloud utenti potrebbero avere diritto a una prova senza costi.

Per ulteriori informazioni sui prezzi di BigQuery, consulta la pagina Prezzi di BigQuery nella documentazione di BigQuery.

Per ulteriori informazioni sui prezzi di Vertex AI, consulta la pagina Prezzi di Vertex AI.

Prima di iniziare

  1. Nella Google Cloud console, nella pagina di selezione del progetto, seleziona o crea un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Selezionare un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Creare un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.

    Vai al selettore di progetti

  2. Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.

  3. Abilita le API BigQuery, BigQuery Connection e Vertex AI.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilita le API

Crea un set di dati

Crea un set di dati BigQuery per archiviare il modello di ML.

Console

  1. Nella Google Cloud console, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nel riquadro Explorer, fai clic sul nome del progetto.

  3. Fai clic su Visualizza azioni > Crea set di dati

  4. Nella pagina Crea set di dati, segui questi passaggi:

    • In ID set di dati, inserisci bqml_tutorial.

    • Per Tipo di località, seleziona Multi-regione e poi seleziona Stati Uniti.

    • Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.

bq

Per creare un nuovo set di dati, utilizza il bq mk --dataset comando.

  1. Crea un set di dati denominato bqml_tutorial con la località dei dati impostata su US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Verifica che il set di dati sia stato creato:

    bq ls

API

Chiama il datasets.insert metodo con una risorsa del set di dati definita.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Crea il modello remoto per la generazione di embedding di testo

Crea un modello remoto che rappresenti un modello di generazione di text embedding di Vertex AI ospitato:

  1. Nella Google Cloud console, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione:

    CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'text-embedding-005');

    L'esecuzione della query richiede alcuni secondi, dopodiché è possibile accedere al modello embedding_model tramite il riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non vengono visualizzati i risultati della query.

Genera embedding di testo

Genera embedding di testo dagli abstract dei brevetti utilizzando la AI.GENERATE_EMBEDDING funzione, quindi scrivili in una tabella BigQuery in modo che possano essere cercati.

  1. Nella Google Cloud console, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione:

    CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS
    SELECT * FROM AI.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (
        SELECT *, abstract AS content
        FROM `patents-public-data.google_patents_research.publications`
        WHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore'
      )
    )
    WHERE LENGTH(status) = 0;

L'esecuzione di questa query richiede circa 5 minuti.

La generazione di embedding utilizzando la AI.GENERATE_EMBEDDING funzione potrebbe non riuscire a causa delle quote dei modelli LLM di Vertex AI o della mancata disponibilità del servizio. I dettagli dell'errore vengono restituiti nella colonna status. Una colonna status vuota indica che la generazione di embedding è riuscita.

Per metodi alternativi di generazione di embedding di testo in BigQuery, consulta il tutorial Incorporare testo con modelli TensorFlow preaddestrati.

Crea un indice vettoriale

Se crei un indice vettoriale su una colonna di embedding, una ricerca vettoriale eseguita su quella colonna utilizza la tecnica di ricerca del vicino più prossimo approssimato. Questa tecnica migliora il rendimento della ricerca vettoriale, con il compromesso di ridurre il richiamo e quindi restituire risultati più approssimativi.

Per creare un indice vettoriale, utilizza l' CREATE VECTOR INDEX istruzione DDL (Data Definition Language):

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione SQL:

    CREATE OR REPLACE VECTOR INDEX my_index
    ON `bqml_tutorial.embeddings`(embedding)
    OPTIONS(index_type = 'IVF',
      distance_type = 'COSINE',
      ivf_options = '{"num_lists":500}')

In genere, la creazione di un indice vettoriale richiede solo pochi secondi. Sono necessari altri 2 o 3 minuti prima che l'indice vettoriale venga compilato e sia pronto per l'uso.

Verifica la disponibilità dell'indice vettoriale

L'indice vettoriale viene compilato in modo asincrono. Puoi verificare se l'indice è pronto per l'uso eseguendo una query sulla INFORMATION_SCHEMA.VECTOR_INDEXES visualizzazione e verificando che il valore della colonna coverage_percentage sia maggiore di 0 e che il valore della colonna last_refresh_time non sia NULL.

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione SQL:

    SELECT table_name, index_name, index_status,
    coverage_percentage, last_refresh_time, disable_reason
    FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`

    Sostituisci PROJECT_ID con l'ID progetto.

Esegui una ricerca sulla similarità del testo utilizzando l'indice vettoriale

Utilizza la VECTOR_SEARCH funzione per cercare brevetti pertinenti che corrispondano agli embedding generati da una query di testo.

L'argomento top_k determina il numero di corrispondenze da restituire, in questo caso cinque. L'opzione fraction_lists_to_search determina la percentuale di elenchi di indici vettoriali da cercare. L'indice vettoriale che hai creato ha 500 elenchi, quindi il valore fraction_lists_to_search di .01 indica che questa ricerca vettoriale esegue la scansione di cinque di questi elenchi. Un valore fraction_lists_to_search inferiore, come mostrato qui fornisce un richiamo inferiore e un rendimento più rapido. Per ulteriori informazioni sugli elenchi di indici vettoriali, consulta l'num_lists opzione dell'indice vettoriale.

Il modello che utilizzi per generare gli embedding in questa query deve essere lo stesso che utilizzi per generare gli embedding nella tabella con cui stai confrontando, altrimenti i risultati della ricerca non saranno accurati.

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione SQL:

    SELECT query.query, base.publication_number, base.title, base.abstract
    FROM VECTOR_SEARCH(
      TABLE `bqml_tutorial.embeddings`, 'embedding',
      (
      SELECT embedding, content AS query
      FROM AI.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (SELECT 'improving password security' AS content))
      ),
      top_k => 5, options => '{"fraction_lists_to_search": 0.01}')

    L'output è simile al seguente:

    +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
    |            query            | publication_number |                       title                     |                      abstract                   |
    +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
    | improving password security | SG-120868-A1       | Data storage device security method and a...    | Methods for improving security in data stora... |
    | improving password security | SG-10201610585W-A  | Passsword management system and process...      | PASSSWORD MANAGEMENT SYSTEM AND PROCESS ...     |
    | improving password security | SG-148888-A1       | Improved system and method for...               | IMPROVED SYSTEM AND METHOD FOR RANDOM...        |
    | improving password security | SG-194267-A1       | Method and system for protecting a password...  | A system for providing security for a...        |
    | improving password security | SG-120868-A1       | Data storage device security...                 | Methods for improving security in data...       |
    +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
    

Crea il modello remoto per la generazione di testo

Crea un modello remoto che rappresenti un modello di generazione di testo di Vertex AI ospitato:

  1. Nella Google Cloud console, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione:

    CREATE OR REPLACE MODEL `bqml_tutorial.text_model`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'gemini-2.0-flash-001');

    L'esecuzione della query richiede alcuni secondi, dopodiché è possibile accedere al modello text_model tramite il riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non vengono visualizzati i risultati della query.

Genera testo aumentato dai risultati della ricerca vettoriale

Inserisci i risultati della ricerca come prompt per generare testo con la AI.GENERATE_TEXT funzione

  1. Nella Google Cloud console, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione:

    SELECT result AS generated, prompt
    FROM AI.GENERATE_TEXT(
      MODEL `bqml_tutorial.text_model`,
      (
        SELECT CONCAT(
          'Propose some project ideas to improve user password security using the context below: ',
          STRING_AGG(
            FORMAT("patent title: %s, patent abstract: %s", base.title, base.abstract),
            ',\n')
          ) AS prompt,
        FROM VECTOR_SEARCH(
          TABLE `bqml_tutorial.embeddings`, 'embedding',
          (
            SELECT embedding, content AS query
            FROM AI.GENERATE_EMBEDDING(
              MODEL `bqml_tutorial.embedding_model`,
             (SELECT 'improving password security' AS content)
            )
          ),
        top_k => 5, options => '{"fraction_lists_to_search": 0.01}')
      ),
      STRUCT(600 AS max_output_tokens));

    L'output è simile al seguente:

    +------------------------------------------------+------------------------------------------------------------+
    |            generated                           | prompt                                                     |
    +------------------------------------------------+------------------------------------------------------------+
    | These patents suggest several project ideas to | Propose some project ideas to improve user password        |
    | improve user password security.  Here are      | security using the context below: patent title: Active     |
    | some, categorized by the patent they build     | new password entry dialog with compact visual indication   |
    | upon:                                          | of adherence to password policy, patent abstract:          |
    |                                                | An active new password entry dialog provides a compact     |
    | **I. Projects based on "Active new password    | visual indication of adherence to password policies. A     |
    | entry dialog with compact visual indication of | visual indication of progress towards meeting all          |
    | adherence to password policy":**               | applicable password policies is included in the display    |
    |                                                | and updated as new password characters are being...        |
    +------------------------------------------------+------------------------------------------------------------+
     

Libera spazio

  1. Nella Google Cloud console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.

Passaggi successivi