將 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 OpenAI 和 Azure AI 語言服務 整合到您的資料庫中。
必要條件
Azure 訂用帳戶 - 建立免費帳戶。
在所需的 Azure 訂用帳戶中授與 Azure OpenAI 的存取權。 目前,應用程式會授與此服務的存取權。 您可以填妥 https://aka.ms/oai/access 的表單,以申請 Azure OpenAI 的存取權。
已部署第 2 版模型的 Azure OpenAI 資源
text-embedding-ada-002
。 此模型目前僅適用於 特定區域。 如果您沒有資源,建立資源的程序記載於 Azure OpenAI 資源部署指南中。Azure AI 語言服務。 如果您沒有資源,您可以依照快速入門中針對摘要檔所提供的指示,在 Azure 入口網站 中建立語言資源。 您可以使用免費定價層 (
Free F0
) 來試用服務,並在稍後升級至生產環境的付費層。Azure 訂用帳戶中的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。 如果您沒有資源,請參閱建立 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的實例。
在 psql
Azure Cloud Shell 中使用 聯機到資料庫
在網頁瀏覽器中開啟 Azure Cloud Shell。 選取 [Bash] 作為環境,如果出現提示,請選取您用於 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫的訂用帳戶,然後選取 [建立記憶體]。
若要擷取資料庫連線詳細數據:
從左側導覽功能表中,選取 [設定] 底下的 [連線],然後複製 [連線詳細數據] 區塊。
將複製的環境變數宣告行貼到您在上面開啟的 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
模組可讓您將 Azure OpenAI 和 Azure 認知服務整合到您的資料庫中。 若要在您的資料庫中啟用擴充功能,請遵循下列步驟:
檢查延伸模組中包含的 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
之前:
使用您的 Azure OpenAI 服務端點和金鑰來設定延伸模組。
流覽至 Azure 入口網站 中的 Azure OpenAI 資源,然後從左側功能表中選取 [資源管理] 底下的 [金鑰和端點] 專案。
複製您的端點和存取金鑰。 您可以使用
KEY1
或KEY2
。 隨時持有兩個金鑰可讓您安全地輪替和重新產生金鑰,而不會造成服務中斷。
在下列命令中,以您從 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_name
Azure OpenAI 帳戶中部署內嵌模型時指派的 。 若要擷取此值,請移至 Azure 入口網站 中的 Azure OpenAI 資源。 從該處,在左側導覽功能表中,在 [資源管理] 底下,選取 [模型部署] 專案以開啟 Azure OpenAI Studio。 在 Azure OpenAI Studio 的 [部署] 索引標籤上,複製與text-embedding-ada-002
模型部署相關聯的 [部署名稱] 值。
使用這項資訊,執行查詢來更新數據表中的每個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 入口網站 中的語言服務資源,以擷取這些值,然後選取 [密鑰和端點] 專案。 複製您的端點和存取金鑰。 您可以使用 KEY1
或 KEY2
。
在下列命令中,以您從 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_cognitive
azure_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_error
為 false
。 如果該旗標保留為的預設值 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 功能整合到您的資料庫中。