瞭解嵌入工作流程示例

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

嵌入工作流程的示例情境

假設在 MySQL 適用的 Cloud SQL 上執行的資料庫具有下列特徵:

  • 資料庫包含資料表:items。這個表格中的每一列都會說明貴商家販售的商品。

  • items 資料表包含一個資料欄:complaints。這個欄會以純文字形式儲存每個項目的買家申訴記錄。

  • 資料庫會與 Vertex AI Model Garden 整合,讓資料庫存取 textembedding-gecko LLM。

雖然這個資料庫會儲存有關商品的申訴,但這些申訴會以純文字形式儲存,因此不易查詢。舉例來說,如果您想查看哪些商品的顧客抱怨最多,因為他們收到的商品顏色不對,那麼您可以對資料表執行一般 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 查詢,有助於填補這項差距。透過套用嵌入,您可以在本範例中查詢表格,找出與特定文字提示 (例如「顏色不對」) 的語意相似的抱怨項目。

以下步驟說明如何在先前所述的範例情境中啟用這項功能。

準備表格

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

建立用來儲存嵌入資料的資料欄

在表格中新增資料欄來儲存嵌入向量。

sql ALTER TABLE items ADD COLUMN complaint_embedding vector(768) using varbinary;

這個範例將 768 指定為引數,因為 textembedding-gecko LLM 支援的維度數量就是 768。詳情請參閱「產生嵌入內容」。

這個範例會將 vector 資料類型套用至資料欄,簡化使用 pgvector 函式和運算子與資料欄值的操作。

填入新資料欄

使用 mysql.ml_embedding() 函式,根據 complaints 欄中每個資料列文字的值,為這個新欄填入嵌入資料。在這個範例中,Cloud SQL 會使用 ID 為 textembedding-gecko 的 LLM 產生嵌入資料,版本為 004

UPDATE items SET complaint_embedding = mysql.ml_embedding('text-embedding-005', complaints);
這個範例會隱含地將 mysql.ml_embedding() 的二進位值傳回值轉換為 vector 值,以便將值儲存在您在建立用於儲存嵌入資料的資料欄中建立的 vector 資料欄中。

建立索引

如要提升效能,請在 items 資料表中新增索引。

CREATE VECTOR INDEX complaint_embed_idx ON items(complaint_embedding)
  USING SCANN DISTANCE_MEASURE=COSINE;

如要進一步瞭解如何建立這類索引,請參閱「建立最近鄰索引」。此外,如要進一步瞭解如何透過設定參數來調整索引,請參閱「查詢和索引嵌入」。

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

您現在可以在 items 資料表上執行語意最相近的查詢。下列查詢會使用 approx_distance 函式完成下列動作:

  • 依據 It was the wrong color 文字的語意相似性,對表格列進行排序。
  • 傳回前十大申訴。

查詢會顯示第一個已排序資料列的 idname 值。

SELECT mysql.ML_EMBEDDING('text-embedding-005', 'It was the wrong color') into @query_vector;

select id, name from items order by approx_distance(complaint_embedding , @query_vector,'distance_measure=cosine') limit 10;

後續步驟