嵌入工作流程範例

本頁提供範例工作流程,說明 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 的語意鄰近程度排序資料表的資料列,並傳回前十筆申訴。查詢會顯示第一個排序資料列的 id 和 name 值。

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

後續步驟