嵌入工作流程範例

本頁提供範例工作流程,說明如何搭配使用 embedding() 函式、資料表格式的資料和 pgvector 功能。本例使用純文字輸入內容,從某個資料庫中擷取結果,該資料庫是透過大型語言模型 (LLM) 導向的語意剖析機制來分析文字意思。

情境示例

假設資料庫在 AlloyDB 上執行,且具有下列特點:

  • 資料庫包含資料表 items。這份表格的每一列都說明貴商家銷售的項目。

  • items 資料表包含 complaints 資料欄。這個 TEXT 欄會儲存買家對各個項目的申訴記錄。

  • 資料庫會與 Vertex AI Model Garden 整合,因此可存取text-embedding英文模型。

雖然這個資料庫會儲存有關項目的申訴內容,但這些申訴內容會以純文字形式儲存,因此查詢起來相當困難。舉例來說,如果想瞭解收到錯誤顏色商品的顧客最常抱怨哪些項目,您可以在資料表上執行一般 SQL 查詢,尋找各種關鍵字相符項目。不過,這種做法只會比對包含這些完全相符關鍵字的資料列。

舉例來說,SELECT * FROM item WHERE complaints LIKE "%wrong color%" 等基本 SQL 查詢不會傳回 complaints 欄位只包含 The picture shows a blue one, but the one I received was red 的資料列。

使用 LLM 支援的嵌入內容進行 SQL 查詢,有助於填補這項落差。套用嵌入後,您可以在這個範例中查詢表格,找出與特定文字提示 (例如「顏色錯誤」) 語意相似的項目。

下列步驟說明如何在先前所述的範例設定中啟用這項功能。

事前準備

請確認符合下列規定:

必要的資料庫擴充功能

  • 確認 AlloyDB 資料庫已安裝下列擴充功能。

    • google_ml_integration 項擴充功能

    • vector 擴充功能,版本 0.5.0.google-1 以上

如要進一步瞭解如何安裝及管理擴充功能,請參閱「設定資料庫擴充功能」。

  • google_ml_integration.enable_model_support 資料庫標記設為 off

設定模型存取權

如要從 AlloyDB 資料庫產生嵌入內容,請務必先設定 AlloyDB,使其能與文字嵌入模型搭配運作。

如要使用雲端 text-embedding-005 模型,您需要將資料庫與 Vertex AI 整合

準備資料表

items 資料表的內容執行 LLM 查詢前,您必須準備資料表,根據現有資料儲存及建立嵌入內容的索引。

建立資料欄來儲存嵌入內容

在表格中新增資料欄,用來儲存嵌入內容。

ALTER TABLE items ADD COLUMN complaint_embedding vector(768);

這個範例將 768 指定為引數,因為這是 text-embedding-005 英文模型支援的維度數量。詳情請參閱「產生嵌入內容」。

這個範例會將 vector 資料類型套用至資料欄,方便使用 pgvector 函式和運算子處理資料欄中的值。

填入新資料欄

如果已備妥 CSV 格式的嵌入項目,請按照「儲存向量嵌入項目」一節的步驟儲存嵌入項目。

如果 complaints 資料欄中儲存了文字,您可以選擇使用 embedding() 函式,在新資料欄中填入嵌入內容。在本範例設定中,AlloyDB 會使用 text-embedding 模型 (版本 005) 生成嵌入。

UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);

這個範例會將 embedding()real[] 傳回值隱含轉換為 vector 值,以便將值儲存到先前建立的 vector 資料欄。

建立索引

如要提升效能,請為 items 新增索引,並使用純量量化技術。

CREATE INDEX complaint_embed_idx ON items
  USING scann (complaint_embedding l2)
  WITH (num_leaves=20);

如要進一步瞭解如何建立 ScaNN 索引,請參閱「建立索引和查詢向量」。

使用提供的文字執行 LLM 輔助查詢

您現在可以對 items 表格執行語意最鄰近查詢。下列查詢使用 pgvector 提供的 <-> 運算子,依據與「It was the wrong color」文字的語意鄰近程度排序資料表資料列,並傳回前十項申訴。查詢會顯示第一個排序資料列的 idname 值。

SELECT id, name FROM items
  ORDER BY complaint_embedding::vector
  <-> embedding('text-embedding-005', 'It was the wrong color') LIMIT 10;

後續步驟