嵌入工作流程範例

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

情境示例

假設 AlloyDB 執行的資料庫具備下列特性:

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

  • items 資料表包含 complaints 欄。這個 TEXT 欄會儲存買家對每項商品提出的申訴。

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

雖然這個資料庫儲存了商品相關申訴,但這些申訴是以純文字形式儲存,因此難以查詢。舉例來說,如果您想查看哪些商品最常收到顧客投訴收到錯誤顏色的商品,可以對資料表執行一般 SQL 查詢,尋找各種關鍵字比對。不過,這種做法只會比對包含這些確切關鍵字的資料列。

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

使用 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 格式的嵌入,請按照「儲存向量嵌入」中的步驟儲存嵌入。

如有需要,您可以使用 embedding() 函式,在complaints 欄中儲存文字時,將嵌入內容填入這個新欄。在這個範例設定中,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;

後續步驟