使用 Azure SQL 資料庫的智慧型應用程式

適用於:Azure SQL 資料庫

本文概述如何使用人工智慧 (AI) 選項 (例如 OpenAI 和向量),透過 Azure SQL 資料庫建置智慧型應用程式。

如需範例與例子,請造訪 SQL AI 範例存放庫

請觀看 Azure SQL 資料庫基本概念系列中的這段影片,取得建置 AI 就緒應用程式的簡短概觀:

概觀

大型語言模型 (LLM) 可讓開發人員建立具有熟悉使用者體驗的 AI 支援的應用程式。

在應用程式中使用 LLM 時,如果模型可以在正確的時間從應用程式的資料庫存取正確的資料,就能帶來更大的價值和改善的使用者體驗。 此處理程序稱為擷取擴增產生 (RAG),Azure SQL 資料庫擁有許多支援這種新模式的功能,使其成為建置智慧型應用程式的絕佳資料庫。

下列連結提供各種 Azure SQL 資料庫選項的範例程式碼,以建置智慧型應用程式:

AI 選項 描述
Azure OpenAI 產生 RAG 的內嵌,並與 Azure OpenAI 支援的任何模型整合。
向量 了解如何在 Azure SQL 資料庫中儲存和查詢向量。
Azure AI 搜尋服務 使用 Azure SQL 資料庫搭配 Azure AI 搜尋來根據您的資料訓練 LLM。
智慧型應用程式 了解如何使用可在任何案例中複寫的常見模式來建立端對端解決方案。
Copilot for Azure SQL Database 了解這套 AI 輔助體驗,其設計目的是簡化 Azure SQL 資料庫驅動應用程式的設計、作業、最佳化和健康情況。

重要概念

本節包含對於使用 Azure SQL 資料庫和 Azure OpenAI 實作 RAG 至關重要的關鍵概念。

擷取增強產生 (RAG)

RAG 是一種技術,可藉由從外部來源擷取其他資料,增強 LLM 產生相關且資訊性回應的能力。 例如,RAG 可以查詢包含與使用者問題或提示相關的領域特定知識的文章或文件。 然後,LLM 可以在產生其回應時,使用此擷取的資料作為參考。 例如,使用 Azure SQL 資料庫的簡單 RAG 模式可能是:

  1. 將資料插入 Azure SQL 資料庫資料表。
  2. 將 Azure SQL 資料庫連結到 Azure AI 搜尋。
  3. 建立 Azure OpenAI GPT4 模型,並將其連線至 Azure AI 搜尋。
  4. 從您的應用程式和 Azure SQL 資料庫使用經過訓練的 Azure OpenAI 模型,聊天並詢問資料相關問題。

RAG 模式透過快速工程設計,旨在為模型提供更多內容資訊來提升回應品質。 RAG 可讓模型藉由將相關的外部來源併入產生處理程序,套用更廣泛的知識庫,來得到更全面且明智的回應。 如需有關基礎 LLM 的詳細資訊,請參閱基礎 LLM - Microsoft Community 中樞

提示和提示工程

提示指特定文字或資訊,可作為指揮 LLM 的指令,或是建置 LLM 時依據的內容相關資料。 提示可以採取各種形式,例如問題、陳述式,甚至是程式碼片段。

可用於從 LLM 產生回應的範例提示:

  • 指示:向 LLM 提供指示詞
  • 主要內容:將資訊提供給 LLM 進行處理
  • 範例:協助將模型調節為特定工作或程序
  • 指引:將 LLM 的輸出導向正確的方向
  • 支援內容:代表 LLM 可用來產生輸出的補充資訊

為案例建立良好提示的程序稱為提示工程。 如需提示和提示工程最佳做法的詳細資訊,請參閱 Azure OpenAI 服務

語彙基元

權杖是藉由將輸入文字分割成較小區段而產生的小型文字區塊。 這些區段可以是單字或字元群組,長度從單一字元到整個單字不等。 例如,hamburger 這個字會分成 hamburger 等權杖,而像 pear 這樣短而常見的單字,則會被視為單一權杖。

在 Azure OpenAI 中,提供給 API 的輸入文字會轉換為權杖 (權杖化)。 每個 API 要求中處理的權杖數目取決於輸入、輸出和要求參數的長度等因素。 正在處理的權杖數量也會影響模型的回應時間和輸送量。 每個模型在 Azure OpenAI 的單一要求/回應中可以接受的權杖數目有限制。 若要深入了解,請參閱 Azure OpenAI 服務配額和限制

向量

向量是數字的排序陣列 (通常是浮點數),可以代表某些資料的相關資訊。 例如,影像可以表示為像素值的向量,文字字串可以表示為向量或 ASCII 值。 將資料轉換成向量的程序稱為向量化

Embeddings

內嵌是代表資料重要特徵的向量。 嵌入通常是透過使用深度學習模型來學習的,機器學習和 AI 模型將它們用作特徵。 內嵌也可以擷取相似概念之間的語意相似性。 例如,在產生單字 personhuman 的內嵌時,我們預期它們的內嵌 (向量表示) 在值中類似,因為這些單字在語意上也類似。

Azure OpenAI 具有從文字資料建立內嵌的模型。 服務會將文字分成權杖,並使用 OpenAI 預先訓練的模型產生內嵌。 若要深入了解,請參閱使用 Azure OpenAI 建立內嵌

向量搜尋是指在資料集中尋找與特定查詢向量語意相似的所有向量的過程。 因此,單字 human 的查詢向量會搜尋整個字典中語意上類似的單字,而且應該將單字 person 視為接近的符合項。 這種接近度或距離是使用相似度計量 (例如餘弦相似度) 測量的。 相似度越接近的向量,它們之間的距離越小。

考慮這樣一個案例:您對數百萬個文件執行查詢以查找資料中最相似的文件。 您可以使用 Azure OpenAI 為您的資料和查詢文件建立內嵌。 然後,您可以執行向量搜尋,以從資料集尋找最類似的文件。 然而,在幾個範例中執行向量搜尋是微不足道的。 在數千個或數百萬個資料點上執行相同的搜尋會變得具有挑戰性。 詳盡搜尋與最接近像素 (ANN) 搜尋方法之間也有取捨,包括延遲、輸送量、正確性和成本,這全都取決於您應用程式的需求。

由於 Azure SQL 資料庫內嵌可以高效地儲存和查詢,用於資料行存放區索引支援,允許精確的最接近像素搜尋且效能出色,因此您不需要在精確度與速度之間做選擇:魚和熊掌可以兼得。 將向量內嵌與整合式解決方案中的資料一起儲存,可將管理資料同步處理的需求降至最低,加速 AI 應用程式開發的上市時間。

Azure OpenAI

內嵌是以資料表示真實世界的過程。 文字、影像或音效可以轉換為內嵌。 Azure OpenAI 模型能夠將真實世界的資訊轉換成內嵌。 這些模型可用作 REST 端點,因此可以使用 sp_invoke_external_rest_endpoint 系統預存程序從 Azure SQL 資料庫輕鬆取用:

DECLARE @retval INT, @response NVARCHAR(MAX);
DECLARE @payload NVARCHAR(MAX);

SET @payload = JSON_OBJECT('input': @text);

EXEC @retval = sp_invoke_external_rest_endpoint @url = 'https://<openai-url>/openai/deployments/<model-name>/embeddings?api-version=2023-03-15-preview',
    @method = 'POST',
    @credential = [https://<openai-url>/openai/deployments/<model-name>],
    @payload = @payload,
    @response = @response OUTPUT;

SELECT CAST([key] AS INT) AS [vector_value_id],
    CAST([value] AS FLOAT) AS [vector_value]
FROM OPENJSON(JSON_QUERY(@response, '$.result.data[0].embedding'));

使用 REST 服務的呼叫來取得內嵌,只是您在使用 SQL Database 和 OpenAI 時擁有的整合選項之一。 您可以讓任何可用的模型存取儲存在 Azure SQL 資料庫中的資料,以建立可讓使用者與資料互動的解決方案,例如下列範例。

AI Bot 使用 Azure SQL 資料庫儲存資料回答問題的螢幕擷取畫面。

如需使用 SQL Database 和 OpenAI 的其他範例,請參閱下列文章:

向量

雖然 Azure SQL 資料庫沒有原生向量類型,但向量只不過是經過排序的元組,而關聯式資料庫在管理元組方面非常出色。 元組是一個正式詞彙,您可以將其視為資料表中的一個資料列。

Azure SQL 資料庫也支援資料行存放區索引和批次模式執行。 以向量為基礎的方法用於批次模式處理,表示批次中的每個資料行都有自己的記憶體位置,儲存為向量。 這可讓您更快速、更有效率地批次處理資料。

以下範例顯示向量可如何儲存在 SQL Database:

CREATE TABLE [dbo].[wikipedia_articles_embeddings_titles_vector]
(
    [article_id] [int] NOT NULL,
    [vector_value_id] [int] NOT NULL,
    [vector_value] [float] NOT NULL
)
GO

CREATE CLUSTERED COLUMNSTORE INDEX ixc
    ON dbo.wikipedia_articles_embeddings_titles_vector
    ORDER (article_id);
GO

如需使用一個公共子集的 Wikipedia 文章並已使用 OpenAI 產生內嵌的範例,請參閱使用 Azure SQL 資料庫和 OpenAI 的向量相似度搜尋

在 Azure SQL 資料庫中運用向量搜尋的另一個選項是,使用整合向量化功能與 Azure AI 整合:使用 Azure SQL 資料庫和 Azure AI 搜尋技術的向量搜尋

使用 Azure SQL 資料庫和 Azure AI 搜尋實作 RAG 模式。 可以對儲存在 Azure SQL 資料庫中的資料執行支援的聊天模型,而不需要訓練或微調模型,這要歸功於 Azure AI 搜尋與 Azure OpenAI 和 Azure SQL 資料庫的整合。 在您的資料上執行模型可讓您聊天時有所依據,並以更高的精確度和速度分析您的資料。

智慧型應用程式

Azure SQL 資料庫可用來建置包含 AI 功能的智慧型應用程式,例如推薦程式和擷取增強產生 (RAG),如下圖所示:

使用 Azure SQL 資料庫建置智慧型應用程式的不同 AI 功能圖表。

如需使用工作階段摘要作為範例資料集,建置具備 AI 功能應用程式的端對端範例,請參閱:

LangChain 整合

LangChain 是一個著名的架構,用於開發由語言模型支援的應用程式。

如需示範如何使用 LangChain 對自己的資料建立聊天機器人的範例,請參閱使用 Azure OpenAI GPT-4 建置自己的適用於 Azure SQL 的 DB Copilot

語意核心整合

語意核心是開放原始碼 SDK,讓您輕鬆組建呼叫現有程式碼的代理程式。 語意核心這個 SDK 擴充性強,可與 OpenAI、Azure OpenAI、Hugging Face 等的模型搭配使用! 將現有的 C#、Python 和 Java 程式碼與這些模型結合,您可組建回答問題以及將流程自動化的代理程式。

Copilot for Azure SQL Database (預覽版)

Azure SQL 資料庫中的 Copilot (預覽版) 是 AI 輔助的體驗,其設計目的是簡化 Azure SQL 資料庫驅動應用程式的設計、作業、最佳化和健康情況。 Copilot 為資料庫管理提供自然語言轉換為 SQL 的功能和自助服務,可提高生產力。

Copilot 提供使用者問題的相關解答,利用資料庫內容、文件、動態管理檢視、查詢存放區和其他知識來源來簡化資料庫管理。 例如:

  • 資料庫管理員可以獨立管理資料庫並解決問題,或深入了解資料庫的效能和功能。
  • 開發人員可以詢問有關資料的問題,就像在文字或對話中一樣,以產生 T-SQL 查詢。 透過所產生查詢的詳細說明,開發人員還可了解如何快速撰寫查詢。

注意

Azure SQL 資料庫中的 Copilot 目前為提供給少數早期採用者的預覽版。 若要註冊此程式,請造訪要求存取 Copilot in Azure SQL Database:預覽版。 Copilot for Azure SQL Database 預覽版包含兩項 Azure 入口網站體驗:

入口網站位置 體驗
Azure 入口網站查詢編輯器 自然語言到 SQL 轉換:這項體驗在適用於 Azure SQL 資料庫的 Azure 入口網站查詢編輯器中,它會將自然語言查詢轉譯成 SQL,讓資料庫互動更直覺化。 如需自然語言轉換為 SQL 功能的教學課程和範例,請參閱在 Azure 入口網站查詢編輯器將自然語言轉換為 SQL (預覽版)
Microsoft Copilot for Azure Azure Copilot 整合:這項體驗將 Azure SQL 技能新增至 Microsoft Copilot for Azure,為客戶提供自我引導式協助,讓他們能夠獨立管理資料庫並解決問題。

如需詳細資訊,請參閱 Copilot in Microsoft Azure SQL (預覽版) 的常見問題