共用方式為


將 Azure AI 功能整合到 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器

適用於: 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器

azure_ai延伸模組藉由整合 Azure AI 服務的強大功能,在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫中,新增使用大型語言模型 (LLM) 並建置產生式 AI 應用程式的能力。 產生 AI 是一種人工智慧形式,其中 LLM 會定型,以根據自然語言輸入產生原始內容。 azure_ai使用延伸模組可讓您直接從資料庫使用產生 AI 的自然語言查詢處理功能。

本教學課程示範如何使用azure_ai擴充功能,將豐富的 AI 功能新增至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。 其涵蓋使用延伸模組將 Azure OpenAIAzure AI 語言服務 整合到您的資料庫中。

必要條件

psql Azure Cloud Shell 中使用 聯機到資料庫

在網頁瀏覽器中開啟 Azure Cloud Shell。 選取 [Bash] 作為環境,如果出現提示,請選取您用於 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫的訂用帳戶,然後選取 [建立記憶體]。

若要擷取資料庫連線詳細數據:

  1. 流覽至 Azure 入口網站中的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資源。

  2. 從左側導覽功能表中,選取 [設定] 底下的 [連線],然後複製 [連線詳細數據] 區塊。

  3. 將複製的環境變數宣告行貼到您在上面開啟的 Azure Cloud Shell 終端機中,將 {your-password} 令牌取代為您在建立資料庫時設定的密碼。

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    

    在提示字元中輸入下列命令,以使用 psql 命令行公用程式 連線到您的資料庫。

    psql
    

安裝 azure_ai 擴充功能

Azure AI 延伸模組和 OpenAI

延伸 azure_ai 模組可讓您將 Azure OpenAI 和 Azure 認知服務整合到您的資料庫中。 若要在您的資料庫中啟用擴充功能,請遵循下列步驟:

  1. 將延伸模組新增至您的allowlist,如 [允許擴充功能] 中所述

  2. 在您打算使用 azure_ai 擴充功能的資料庫中,依照建立延伸模組中所述 安裝它

檢查延伸模組中包含的 azure_ai 物件

檢閱延伸模組中包含的 azure_ai 物件,可以進一步瞭解其提供的功能。 您可以從命令提示字元使用\dx中繼命令psql來列出延伸模組中包含的物件。

\dx+ azure_ai

中繼命令輸出顯示延伸 azure_ai 模組會建立三個架構、多個使用者定義函式 (UDF),以及資料庫中的數個複合類型。 下表列出擴充功能所新增的架構,並說明每個架構。

結構描述 Description
azure_ai 組態數據表和UDF用來與其互動的主體架構。
azure_openai 包含啟用呼叫 Azure OpenAI 端點的 UDF。
azure_cognitive 提供與整合資料庫與 Azure 認知服務相關的 UDF 和複合類型。

函式和類型全都與其中一個架構相關聯。 若要檢閱架構中 azure_ai 定義的函式,請使用 \df 中繼命令,指定應該顯示其函式的架構。 \x auto命令前\df的命令會自動切換展開的顯示器,讓命令的輸出更容易在 Azure Cloud Shell 中檢視。

\x auto
\df+ azure_ai.*

函式 azure_ai.set_setting() 可讓您設定 Azure AI 服務的端點和重要值。 它會接受 索引鍵要指派的值 。 函 azure_ai.get_setting() 式可讓您擷取您使用 set_setting() 函式設定的值。 它會接受 您想要檢視之設定的索引鍵 。 針對這兩種方法,索引鍵必須是下列其中一項:

關鍵 描述
azure_openai.endpoint 支援的 OpenAI 端點 (例如 , https://example.openai.azure.com)。
azure_openai.subscription_key OpenAI 資源的訂用帳戶密鑰。
azure_cognitive.endpoint 支援的認知服務端點 (例如 , https://example.cognitiveservices.azure.com)。
azure_cognitive.subscription_key 認知服務資源的訂用帳戶密鑰。

重要

因為 Azure AI 服務的連線資訊,包括 API 金鑰,會儲存在資料庫中的組態數據表中,擴充功能會定義稱為 azure_ai_settings_manager 的角色,azure_ai以確保這項資訊受到保護,而且只能供指派該角色的使用者存取。 此角色可讓您讀取和寫入與延伸模組相關的設定。 只有超級使用者和 azure_ai_settings_manager 角色的成員可以叫用 azure_ai.get_setting()azure_ai.set_setting() 函式。 在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中,所有系統管理員用戶都會獲指派azure_ai_settings_manager角色。

使用 Azure OpenAI 產生向量內嵌

延伸 azure_ai 模組的 azure_openai 架構可讓您使用 Azure OpenAI 來建立文字值的向量內嵌。 使用此架構,您可以 直接從資料庫產生 Azure OpenAI 的內嵌,以建立輸入文字的向量表示法,然後可用於向量相似性搜尋,並由機器學習模型取用。

內嵌是一種使用機器學習模型來評估相關信息接近程度的技術。 這項技術可讓您有效率地識別數據之間的關聯性和相似性,讓演算法能夠識別模式並做出精確的預測。

設定 Azure OpenAI 端點和金鑰

使用函式 azure_openai 之前:

  1. 使用您的 Azure OpenAI 服務端點和金鑰來設定延伸模組。

  2. 流覽至 Azure 入口網站 中的 Azure OpenAI 資源,然後從左側功能表中選取 [資源管理] 底下的 [金鑰和端點] 專案。

  3. 複製您的端點和存取金鑰。 您可以使用 KEY1KEY2。 隨時持有兩個金鑰可讓您安全地輪替和重新產生金鑰,而不會造成服務中斷。

在下列命令中,以您從 Azure 入口網站 擷取的值取代 {endpoint}{api-key} 令牌,然後從psql命令提示字元執行命令,將值新增至組態數據表。

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

確認在組態資料表中寫入的設定:

SELECT azure_ai.get_setting('azure_openai.endpoint');
SELECT azure_ai.get_setting('azure_openai.subscription_key');

延伸 azure_ai 模組現在已連線到您的 Azure OpenAI 帳戶,並準備好產生向量內嵌。

以範例資料填入資料庫

本教學課程使用 BillSum 數據集一小部分,其提供國會和加州州法案 美國 清單,以提供產生向量的範例文字數據。 bill_sum_data.csv您可以從 Azure 範例 GitHub 存放庫下載包含這些資料的檔案。

若要在資料庫中裝載範例數據,請建立名為 的 bill_summaries數據表。

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

從命令提示字元使用 PostgreSQL COPY 命令psql,將 CSV bill_summaries 中的範例數據載入資料表,並指定 CSV 檔案的第一個數據列是標頭數據列。

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

啟用向量支援

延伸 azure_ai 模組可讓您產生輸入文字的內嵌。 若要讓產生的向量與資料庫中其餘的數據一起儲存,您必須遵循資料庫檔中啟用向量支援的指引來安裝pgvector延伸模組。

將向量新增至資料庫后,使用vector數據類型將新的數據行新增至bill_summaries數據表,以將內嵌儲存在數據表中。 此 text-embedding-ada-002 模型會產生具有1536個維度的向量,因此您必須指定 1536 為向量大小。

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

產生和儲存向量

bill_summaries 資料表現在已準備好儲存內嵌。 您可以使用 azure_openai.create_embeddings() 函式來建立 bill_text 欄位的向量,並將其插入 bill_summaries 資料表中新建立的 bill_vector 資料行。

使用 函 create_embeddings() 式之前,請執行下列命令來檢查它並檢閱必要的自變數:

\df+ azure_openai.*

Argument data types命令輸出\df+ azure_openai.*中的 屬性會顯示函式預期的自變數清單。

Argument 類型 預設 描述
deployment_name text Azure OpenAI Studio 中包含 text-embeddings-ada-002 模型的部署名稱。
input text 用來建立內嵌的輸入文字。
timeout_ms integer 3600000 逾時 (以毫秒為單位),此時間後停止作業。
throw_on_error boolean true 指出函式是否應該在錯誤時擲回例外狀況的旗標,導致包裝交易的復原。

第一個自變數是在 deployment_nameAzure OpenAI 帳戶中部署內嵌模型時指派的 。 若要擷取此值,請移至 Azure 入口網站 中的 Azure OpenAI 資源。 從該處,在左側導覽功能表中,在 [資源管理] 底下,選取 [模型部署] 專案以開啟 Azure OpenAI Studio。 在 Azure OpenAI Studio 的 [部署] 索引標籤上,複製text-embedding-ada-002模型部署相關聯的 [部署名稱] 值。

內嵌 AI 整合部署的螢幕快照。

使用這項資訊,執行查詢來更新數據表中的每個bill_summaries記錄,並使用 azure_openai.create_embeddings() 函式將字段產生的向量內嵌bill_text插入bill_vector數據行。 將 取代{your-deployment-name}為您從 [Azure OpenAI Studio 部署] 索引標籤複製的 [部署名稱] 值,然後執行下列命令:

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

執行下列查詢,以檢視針對數據表中第一筆記錄產生的內嵌。 如果輸出難以讀取,您可以先執行 \x

SELECT bill_vector FROM bill_summaries LIMIT 1;

每個內嵌都是浮點數的向量,因此向量空間中兩個內嵌之間的距離會與原始格式兩個輸入之間的語意相似性相互關聯。

向量相似度是用來測量兩個項目相似程度的方法,方法是將其表示為數字序列的向量。 向量通常用來使用 LLM 執行搜尋。 向量相似度通常是使用距離計量來計算,例如 Euclidean 距離或餘弦相似度。 Euclidean 距離測量 n 維空間中兩個向量之間的直線距離,而餘弦相似度則測量兩個向量之間角度的餘弦值。

若要在欄位上建立索引,bill_summaries以使用餘弦距離和 HNSW 來啟用更有效率的搜尋vector,其簡稱為階層式導覽小型世界。 HNSW 允許 pgvector 使用最新的圖表型演算法來近似最接近的鄰近查詢。

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

現在,您已準備好對資料庫執行 餘弦相似度 搜尋查詢。

在下列查詢中,會針對輸入問題產生內嵌,然後轉換成向量陣列 (::vector),以便與儲存在數據表中的 bill_summaries 向量進行比較。

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

查詢會<=>使用向量運算符,代表用來計算多維度空間中兩個向量之間的距離的「餘弦距離」運算符。

整合 Azure 認知服務

延伸模組架構azure_ai中包含的 azure_cognitive Azure AI 服務整合提供一組豐富的 AI 語言功能,可直接從數據庫存取。 這些功能包括情感分析、語言偵測、關鍵片語擷取、實體辨識和文字摘要。 透過 Azure AI 語言服務啟用這些功能的存取權。

若要檢閱可透過延伸模組存取的完整 Azure AI 功能,請檢視整合 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器與 Azure 認知服務

設定 Azure AI 語言服務端點和金鑰

如同函式 azure_openai ,若要使用 azure_ai 擴充功能成功對 Azure AI 服務進行呼叫,您必須提供 Azure AI 語言服務的端點和密鑰。 從左側/功能表的 [資源管理] 底下,流覽至 Azure 入口網站 中的語言服務資源,以擷取這些值,然後選取 [密鑰和端點] 專案。 複製您的端點和存取金鑰。 您可以使用 KEY1KEY2

在下列命令中,以您從 Azure 入口網站 擷取的值取代 {endpoint}{api-key} 令牌,然後從psql命令提示字元執行命令,將值新增至組態數據表。

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

摘要帳單

為了示範擴充功能的azure_cognitiveazure_ai一些功能,您可以產生每個帳單的摘要。 架構 azure_cognitive 提供函式來摘要文字與 summarize_abstractive summarize_extractive。 抽象摘要會產生摘要,從輸入文字擷取主要概念,但可能不會使用相同的單字。 擷取摘要會藉由從輸入文字擷取重要句子來組合摘要。

若要使用 Azure AI 語言服務產生新原始內容的能力,您可以使用 函 summarize_abstractive 式來建立文字輸入的摘要。 \df再次使用中繼命令psql,這次會特別查看 函azure_cognitive.summarize_abstractive式。

\df azure_cognitive.summarize_abstractive

Argument data types命令輸出\df azure_cognitive.summarize_abstractive中的 屬性會顯示函式預期的自變數清單。

Argument 類型 預設 描述
text text 要摘要的輸入文字。
language text 撰寫輸入文字之語言的雙字母 ISO 639-1 表示法。 檢查語言支援,以了解允許的值。
timeout_ms integer 3600000 逾時 (以毫秒為單位),此時間後停止作業。
throw_on_error boolean true 指出函式是否應該在錯誤時擲回例外狀況的旗標,導致包裝交易的復原。
sentence_count integer 3 要包含在所產生摘要中的句子數目上限。
disable_service_logs boolean false 語言服務會記錄您的輸入文字 48 小時,只允許針對問題進行疑難解答。 將此屬性設定為 true 後,輸入記錄會停用,並可能會限制我們調查所發生問題的能力。 如需詳細資訊,請參閱 認知服務合規性和隱私權注意事項,以及 https://aka.ms/cs-compliance 位於的Microsoft負責任 AI 原則 https://www.microsoft.com/ai/responsible-ai

summarize_abstractive 式函式需要下列自變數: azure_cognitive.summarize_abstractive(text TEXT, language TEXT)

下列針對數據表的 bill_summaries 查詢會使用 summarize_abstractive 函式來產生帳單文字的新一句摘要,讓您能夠將產生 AI 的強大功能直接納入查詢中。

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

函式也可以用來將數據寫入資料庫數據表中。 bill_summaries修改數據表以加入新的資料行,以將單句摘要儲存在資料庫中。

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

接下來,使用摘要更新數據表。 函 summarize_abstractive 式會傳回文字陣列 (text[])。 函式會將傳 array_to_string 回值轉換為其字串表示。 在下列查詢中, throw_on_error 自變數已設定為 false。 此設定可讓摘要程式在發生錯誤時繼續。

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

在輸出中,您可能會注意到有關無法產生適當摘要之無效檔的警告。 此警告會導致在上述查詢中會設定 throw_on_errorfalse 。 如果該旗標保留為的預設值 true,則查詢會失敗,而且不會將任何摘要寫入資料庫。 若要檢視擲回警告的記錄,請執行下列命令:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

然後,您可以查詢 bill_summaries 數據表,以檢視數據表中其他記錄的延伸模組所產生的 azure_ai 新句子摘要。

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

推論

恭喜您,您剛瞭解如何使用 azure_ai 擴充功能,將大型語言模型和產生的 AI 功能整合到您的資料庫中。