執行語意搜尋和檢索增強生成

本教學課程將逐步說明如何建立及使用文字嵌入項目,進行語意搜尋和檢索增強生成 (RAG)

本教學課程涵蓋下列工作:

本教學課程使用 BigQuery 公開資料表 patents-public-data.google_patents_research.publications

必要的角色

如要執行本教學課程,您需要下列 Identity and Access Management (IAM) 角色:

  • 建立及使用 BigQuery 資料集、連線和模型:BigQuery 管理員 (roles/bigquery.admin)。
  • 將權限授予連線的服務帳戶:專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin)。

這些預先定義的角色具備執行本文所述工作所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

  • 建立資料集:bigquery.datasets.create
  • 建立、委派及使用連線: bigquery.connections.*
  • 設定預設連線:bigquery.config.*
  • 設定服務帳戶權限: resourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy
  • 建立模型並執行推論:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

費用

在本文件中,您會使用下列 Cloud de Confiance by S3NS的計費元件:

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

如要進一步瞭解 BigQuery 定價,請參閱 BigQuery 說明文件中的「BigQuery 定價」一文。

如要進一步瞭解 Agent Platform 計價方式,請參閱這個頁面

事前準備

  1. 在 Cloud de Confiance 控制台的專案選擇器頁面中,選取或建立 Cloud de Confiance 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要「專案建立者」角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色

    前往專案選取器

  2. 確認專案已啟用計費功能 Cloud de Confiance

  3. 啟用 BigQuery、BigQuery Connection 和 Agent Platform API。

    啟用 API 時所需的角色

    如要啟用 API,您需要服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    啟用 API

建立資料集

建立 BigQuery 資料集來儲存機器學習模型。

控制台

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往 BigQuery 頁面

  2. 在「Explorer」窗格中,按一下專案名稱。

  3. 依序點按 「View actions」(查看動作) >「Create dataset」(建立資料集)

  4. 在「建立資料集」頁面中,執行下列操作:

    • 在「Dataset ID」(資料集 ID) 中輸入 bqml_tutorial

    • 針對「Location type」(位置類型) 選取「Multi-region」(多區域),然後選取「US」(美國)

    • 其餘設定請保留預設狀態,然後按一下「建立資料集」

bq

如要建立新的資料集,請使用 bq mk --dataset 指令

  1. 建立名為 bqml_tutorial 的資料集,並將資料位置設為 US

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. 確認資料集已建立完成:

    bq ls

API

請呼叫 datasets.insert 方法,搭配已定義的資料集資源

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

建立用於生成文字嵌入的遠端模型

建立遠端模型,代表代管的 Agent Platform 文字嵌入生成模型:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中執行下列陳述式:

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

    查詢會在幾秒內完成,之後即可透過「Explorer」窗格存取模型 embedding_model。由於查詢是使用 CREATE MODEL 陳述式建立模型,因此不會有查詢結果。

生成文字嵌入

使用 AI.GENERATE_EMBEDDING 函式從專利摘要產生文字嵌入,然後寫入 BigQuery 資料表,以便搜尋。

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中執行下列陳述式:

    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;

這項查詢大約需要 5 分鐘才能完成。

使用 AI.GENERATE_EMBEDDING 函式產生嵌入內容時,可能會因為 Agent Platform LLM 配額或服務無法使用而失敗。錯誤詳細資料會顯示在 status 欄中。如果資料欄為空白,表示已成功產生嵌入內容。status

如要瞭解 BigQuery 中其他產生文字嵌入的方法,請參閱使用預先訓練的 TensorFlow 模型嵌入文字教學課程

建立向量索引

如果您在嵌入欄中建立向量索引,對該欄執行的向量搜尋會使用近似最鄰近項目搜尋技術。這項技術可提升向量搜尋效能,但會降低召回率,因此傳回的結果會更近似。

如要建立向量索引,請使用CREATE VECTOR INDEX資料定義語言 (DDL) 陳述式:

  1. 前往「BigQuery」頁面

    前往「BigQuery」

  2. 在查詢編輯器中,執行下列 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}')

建立向量索引通常只需要幾秒鐘。向量索引需要再 2 到 3 分鐘才能填入資料並供您使用。

確認向量索引是否準備就緒

系統會以非同步方式填入向量索引。您可以查詢 INFORMATION_SCHEMA.VECTOR_INDEXES 檢視區塊,並確認 coverage_percentage 欄值大於 0,且 last_refresh_time 欄值不是 NULL,藉此檢查索引是否已可供使用。

  1. 前往「BigQuery」頁面

    前往「BigQuery」

  2. 在查詢編輯器中,執行下列 SQL 陳述式:

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

    PROJECT_ID 替換為專案 ID。

使用向量索引執行文字相似度搜尋

使用 VECTOR_SEARCH 函式,搜尋與文字查詢產生的嵌入項目相符的相關專利。

top_k 引數會決定要傳回的相符項目數量,在本例中為五個。fraction_lists_to_search 選項會決定要搜尋的向量索引清單百分比。您建立的向量索引有 500 個清單,因此 .01fraction_lists_to_search 值表示這項向量搜尋會掃描其中五個清單。如這裡所示,fraction_lists_to_search 值越低,召回率就越低,但效能會越快。如要進一步瞭解向量索引清單,請參閱num_lists 向量索引選項

您必須使用與要比較資料表相同的模型,才能在這項查詢中產生嵌入,否則搜尋結果將不準確。

  1. 前往「BigQuery」頁面

    前往「BigQuery」

  2. 在查詢編輯器中,執行下列 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}')

    輸出結果會與下列內容相似:

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

建立文字生成遠端模型

建立遠端模型,代表託管的 Agent Platform 文字生成模型:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中執行下列陳述式:

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

    查詢會在幾秒內完成,之後即可透過「Explorer」窗格存取模型 text_model。由於查詢是使用 CREATE MODEL 陳述式建立模型,因此不會有查詢結果。

根據向量搜尋結果生成文字

將搜尋結果做為提示,使用 AI.GENERATE_TEXT 函式生成文字

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中執行下列陳述式:

    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));

    輸出結果會與下列內容相似:

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

清除所用資源

  1. 前往 Cloud de Confiance 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟