使用 Azure AI 延伸模組建立內嵌
若要執行語義搜尋,您必須比較查詢嵌入與搜尋項目的嵌入。 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器 azure_ai 延伸模組會與 Azure OpenAI 整合,以產生內嵌向量。
azure_ai 和 Azure OpenAI 簡介
適用於 Azure AI 的適用於 PostgreSQL 的 Azure 資料庫彈性延伸模組提供使用者定義的函式,以與 Microsoft Foundry 整合,包括 Azure OpenAI 和 Azure 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和描述,根據差異從小到大(從相似到不同)排序。