使用 Azure AI 延伸模組建立內嵌

已完成

若要執行語義搜尋,您必須比較查詢嵌入與搜尋項目的嵌入。 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器 azure_ai 延伸模組會與 Azure OpenAI 整合,以產生內嵌向量。

此圖顯示“lorem ipsum”輸入文字被傳送至 Azure OpenAI 內嵌 API,結果是數值向量陣列。

azure_ai 和 Azure OpenAI 簡介

適用於 Azure AI 的適用於 PostgreSQL 的 Azure 資料庫彈性延伸模組提供使用者定義的函式,以與 Microsoft Foundry 整合,包括 Azure OpenAIAzure AI 搜尋服務

Azure OpenAI 內嵌 API 會產生輸入文字的內嵌向量。 使用此 API 來設定所搜尋之所有項目的內嵌。 延伸 azure_ai 模組的 azure_openai 架構可讓您輕鬆地從 SQL 呼叫 API 以產生內嵌,無論是初始化專案內嵌,還是即時建立內嵌查詢。 然後,這些內嵌可以用來執行向量相似度搜尋,或者換句話說,語意搜尋。

azure_ai 延伸模組和 Azure OpenAI 搭配使用

若要從 PostgreSQL 呼叫 Azure OpenAI 內嵌 API,您需要啟用和設定 azure_ai 擴充功能、授與 Azure OpenAI 的存取權,以及部署 Azure OpenAI 模型。 如需詳細資訊,請參閱 Azure Database for PostgreSQL 彈性伺服器上的 Azure OpenAI 文件

一旦環境就緒且擴充功能已列入允許,請執行此 SQL:

/* Enable the extension. */
CREATE EXTENSION azure_ai;

您也需要設定 OpenAI 服務資源的 端點和存取金鑰

SELECT azure_ai.set_setting('azure_openai.endpoint', '{your-endpoint-url}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{your-api-key}}');

Azure OpenAI 和 azure_ai 設定完成後,只需在 SQL 查詢中呼叫函式即可輕鬆擷取和儲存內嵌。 假設數據表 listings 具有數據 description 行和資料 listing_vector 行,您可以使用下列查詢來產生並儲存所有清單的內嵌。 將 {your-deployment-name} 替換為您在 Azure OpenAI Studio 中創建的模型的 部署名稱

UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;

向量列 listing_vector 必須具有與語言模型產生的相同維度數量。

若要查看檔案內嵌,請執行下列查詢:

SELECT listing_vector FROM listings LIMIT 1;

結果是浮點數的向量。 您可以先執行 \x ,讓輸出更容易閱讀。

以動態方式產生查詢內嵌

在內嵌您想要搜尋的文件之後,您可以執行語意搜尋查詢。 若要這樣做,您也需要產生查詢文字的內嵌。

延伸 azure_openai 模組的 azure_ai 架構可讓您在 SQL 中產生內嵌。 例如,若要尋找其文字在語意上最類似於查詢「在可步行的鄰近社區尋找地方」的前三個清單,請執行下列 SQL:

SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;

運算子 <=> 會計算兩個向量之間的 餘弦距離 ,也就是語意相似度計量。 向量越接近,語意就越類似;向量越進一步,語意上就越不同。

運算子 ::vector 會將產生的內嵌轉換成 PostgreSQL 向量陣列。

查詢會傳回前三個列表ID和描述,根據差異從小到大(從相似到不同)排序。