執行語意搜尋和檢索增強生成
本教學課程將逐步說明如何建立及使用文字嵌入項目,進行語意搜尋和檢索增強生成 (RAG)。
本教學課程涵蓋下列工作:
- 透過 Vertex AI 嵌入模型建立 BigQuery ML 遠端模型。
- 使用
ML.GENERATE_EMBEDDING
函式搭配遠端模型,從 BigQuery 資料表中的文字生成嵌入。 - 建立向量索引,為嵌入建立索引,以提升搜尋效能。
- 使用
VECTOR_SEARCH
函式搭配嵌入項目,搜尋相似文字。 - 使用
ML.GENERATE_TEXT
函式生成文字,並使用向量搜尋結果擴增提示輸入內容,藉此執行 RAG,提升結果品質。
本教學課程使用 BigQuery 公開資料表 patents-public-data.google_patents_research.publications
。
必要的角色
如要執行本教學課程,您需要下列 Identity and Access Management (IAM) 角色:
- 建立及使用 BigQuery 資料集、連線和模型:
BigQuery 管理員 (
roles/bigquery.admin
)。 - 將權限授予連線的服務帳戶:專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin
)。
這些預先定義的角色具備執行本文中工作所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
- 建立資料集:
bigquery.datasets.create
- 建立、委派及使用連線:
bigquery.connections.*
- 設定預設連線:
bigquery.config.*
- 設定服務帳戶權限:
resourcemanager.projects.getIamPolicy
和resourcemanager.projects.setIamPolicy
- 建立模型並執行推論:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
費用
在本文件中,您會使用下列 Trusted Cloud by S3NS的計費元件:
- 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.
如要進一步瞭解 BigQuery 定價,請參閱 BigQuery 說明文件中的「BigQuery 定價」一文。
如要進一步瞭解 Vertex AI 定價,請參閱 Vertex AI 定價頁面。
事前準備
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點按
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「建立資料集」頁面中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。針對「Location type」(位置類型) 選取「Multi-region」(多區域),然後選取「US (multiple regions in United States)」(us (多個美國區域))。
其餘設定保留預設值,然後點選「建立資料集」。
bq
如要建立新的資料集,請使用 bq mk
指令搭配 --location
旗標。如需可能的完整參數清單,請參閱 bq mk --dataset
指令參考資料。
建立名為「
bqml_tutorial
」的資料集,並將資料位置設為「US
」,說明則設為「BigQuery ML tutorial dataset
」:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
這個指令採用
-d
捷徑,而不是使用--dataset
旗標。如果您省略-d
和--dataset
,該指令預設會建立資料集。確認資料集已建立完成:
bq ls
API
請呼叫 datasets.insert
方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
在嘗試這個範例之前,請按照使用 BigQuery DataFrames 的 BigQuery 快速入門導覽課程中的 BigQuery DataFrames 設定說明操作。 詳情請參閱 BigQuery DataFrames 參考說明文件。
如要驗證 BigQuery,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定 ADC」。
建立遠端模型,用於生成文字嵌入
建立遠端模型,代表代管的 Vertex AI 文字嵌入生成模型:
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'text-embedding-005');
查詢作業會在幾秒內完成,完成後,模型
embedding_model
會顯示在「Explorer」(探索工具) 窗格的bqml_tutorial
資料集中。由於查詢是使用CREATE MODEL
陳述式建立模型,因此不會有查詢結果。
生成文字嵌入
使用 ML.GENERATE_EMBEDDING
函式從專利摘要生成文字嵌入,然後將這些嵌入寫入 BigQuery 資料表,以便進行搜尋。
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS SELECT * FROM ML.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(ml_generate_embedding_status) = 0;
這項查詢大約需要 5 分鐘才能完成。
使用 ML.GENERATE_EMBEDDING
函式產生嵌入可能會失敗,原因可能是 Vertex AI LLM 配額或服務無法使用。錯誤詳細資料會傳回至 ml_generate_embedding_status
欄。如果資料欄為空白,表示嵌入生成作業成功。ml_generate_embedding_status
如要瞭解 BigQuery 中其他產生文字嵌入的方法,請參閱使用預先訓練的 TensorFlow 模型嵌入文字教學課程。
建立向量索引
如果您在嵌入欄上建立向量索引,對該欄執行的向量搜尋會使用近似最鄰近搜尋技術。這項技術可提升向量搜尋效能,但會降低召回率,因此傳回的結果會更近似。
如要建立向量索引,請使用
CREATE VECTOR INDEX
資料定義語言 (DDL) 陳述式:
前往「BigQuery」頁面
在查詢編輯器中,執行下列 SQL 陳述式:
CREATE OR REPLACE VECTOR INDEX my_index ON `bqml_tutorial.embeddings`(ml_generate_embedding_result) 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
,藉此檢查索引是否已可供使用。
前往「BigQuery」頁面
在查詢編輯器中,執行下列 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 個清單,因此 .01
的 fraction_lists_to_search
值表示這項向量搜尋會掃描其中五個清單。如這裡所示,fraction_lists_to_search
值越低,召回率就越低,但效能會越快。如要進一步瞭解向量索引清單,請參閱num_lists
向量索引選項。
您必須使用與要比較資料表相同的模型,才能在這項查詢中生成嵌入,否則搜尋結果不會準確。
前往「BigQuery」頁面
在查詢編輯器中,執行下列 SQL 陳述式:
SELECT query.query, base.publication_number, base.title, base.abstract FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.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... | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
建立文字生成遠端模型
建立代表代管 Vertex AI 文字生成模型的遠端模型:
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
CREATE OR REPLACE MODEL `bqml_tutorial.text_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'gemini-2.0-flash-001');
查詢作業會在幾秒內完成,完成後,模型
text_model
會顯示在「Explorer」(探索工具) 窗格的bqml_tutorial
資料集中。由於查詢是使用CREATE MODEL
陳述式建立模型,因此不會有查詢結果。
根據向量搜尋結果生成文字
將搜尋結果做為提示,使用 ML.GENERATE_TEXT
函式生成文字
前往 Trusted Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列陳述式:
SELECT ml_generate_text_llm_result AS generated, prompt FROM ML.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`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.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, TRUE AS flatten_json_output));
輸出結果會與下列內容相似:
+------------------------------------------------+------------------------------------------------------------+ | 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... | +------------------------------------------------+------------------------------------------------------------+
清除所用資源
- In the Trusted Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
後續步驟
- 請參閱「在檢索增強生成 pipeline 中剖析 PDF」教學課程,瞭解如何根據剖析的 PDF 內容建立 RAG pipeline。