本頁面提供工作流程範例,說明 embedding()
函式如何搭配表格中儲存的資料和 pgvector
查詢功能運作。本例使用純文字輸入內容,從某個資料庫中擷取結果,該資料庫是透過大型語言模型 (LLM) 導向的語意剖析機制來分析文字意思。
嵌入工作流程情境範例
假設資料庫在 PostgreSQL 適用的 Cloud SQL 上執行,且具有下列特點:
資料庫包含一個資料表:
items
。這份表格的每一列都說明貴商家銷售的項目。items
資料表包含complaints
資料欄。這個資料欄會以純文字形式,儲存買家對各個項目提出的申訴。資料庫會與 Vertex AI Model Garden 整合,因此可存取
textembedding-gecko
LLM。
雖然這個資料庫會儲存有關項目的申訴內容,但這些申訴內容會以純文字形式儲存,因此查詢起來相當困難。舉例來說,如果想瞭解收到錯誤顏色商品的顧客最常抱怨哪些項目,您可以在資料表上執行一般 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 查詢,有助於填補這項落差。套用嵌入後,您可以在這個範例中查詢資料表,找出與指定文字提示 (例如「顏色錯誤」) 語意相似的項目。
下列步驟說明如何在先前所述的範例情境中啟用這項功能。
準備資料表
在 items
資料表的內容上執行 LLM 查詢之前,您必須準備資料表,根據現有資料儲存及建立嵌入內容的索引。
建立資料欄來儲存嵌入內容
在表格中新增資料欄,用來儲存嵌入內容。
sql
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
本範例將 768
指定為引數,因為這是 textembedding-gecko
LLM 支援的維度數量。詳情請參閱「產生嵌入內容」。
這個範例會將 vector
資料類型套用至資料欄,簡化搭配資料欄值使用 pgvector
函式和運算子的程序。
填入新資料欄
使用 embedding()
函式,根據 complaints
欄中每列的文字值,在新欄中填入嵌入內容。在本範例中,Cloud SQL 會使用 ID 為 textembedding-gecko
的 LLM 生成嵌入,版本為 004
。
UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);
embedding()
的 real[]
傳回值隱含轉換為 vector
值,以便將值儲存在您在「建立資料欄來儲存嵌入內容」中建立的 vector
資料欄。
建立索引
如要提升效能,請在 items
表格中新增索引。
CREATE INDEX complaint_embed_idx ON items
USING hnsw (complaint_embedding vector_cosine_ops);
如要進一步瞭解如何建立這類索引,請參閱建立最鄰近索引。此外,如要進一步瞭解如何透過設定參數調整索引,請參閱「使用 pgvector
查詢及建立索引嵌入」。
使用提供的文字執行 LLM 輔助查詢
您現在可以對 items
表格執行語意最鄰近查詢。下列查詢使用 <->
運算子,pgvector
提供該運算子來完成下列動作:
- 根據與
It was the wrong color
文字的語意鄰近程度,排序表格列。 - 傳回前十項申訴。
查詢會顯示第一個排序資料列的 id
和 name
值。
SELECT id, name FROM items
ORDER BY complaint_embedding
<-> embedding('text-embedding-005', 'It was the wrong color')::vector LIMIT 10;