智慧型應用程式
適用於:Azure SQL 資料庫 Fabric 中的 SQL 資料庫
本文提供使用人工智慧 (AI) 選項的概觀,例如 OpenAI 和向量,以使用 Azure SQL 資料庫 和 Fabric SQL 資料庫建置智慧型手機應用程式,其中共用 Azure SQL 資料庫 的許多功能。
如需範例與例子,請造訪 SQL AI 範例存放庫。
請觀看 Azure SQL 資料庫基本概念系列中的這段影片,取得建置 AI 就緒應用程式的簡短概觀:
概觀
大型語言模型 (LLM) 可讓開發人員建立具有熟悉使用者體驗的 AI 支援的應用程式。
在應用程式中使用 LLM 時,如果模型可以在正確的時間從應用程式的資料庫存取正確的資料,就能帶來更大的價值和改善的使用者體驗。 此程式稱為「擷取增強世代」(RAG),Azure SQL 資料庫 和 Fabric SQL 資料庫有許多功能可支援這個新模式,因此是建置智慧型手機應用程式的絕佳資料庫。
下列連結提供各種選項的範例程式代碼,以建置智慧型應用程式:
AI 選項 | 描述 |
---|---|
Azure OpenAI | 產生 RAG 的內嵌,並與 Azure OpenAI 支援的任何模型整合。 |
向量 | 瞭解如何儲存和查詢資料庫的向量。 |
Azure AI 搜尋服務 | 搭配 Azure AI 搜尋使用您的資料庫,以針對您的數據定型 LLM。 |
智慧型應用程式 | 了解如何使用可在任何案例中複寫的常見模式來建立端對端解決方案。 |
Azure SQL 資料庫中的 Copilot 技能 | 了解這套 AI 輔助體驗,其設計目的是簡化 Azure SQL 資料庫驅動應用程式的設計、作業、最佳化和健康情況。 |
Fabric SQL 資料庫中的 Copilot 技能 | 瞭解一組專為簡化 Fabric SQL 資料庫驅動應用程式設計、作業、優化和健全狀況而設計的 AI 輔助體驗。 |
使用 Azure OpenAI 實作 RAG 的重要概念
本節包含在 Azure SQL 資料庫 或 Fabric SQL 資料庫中使用 Azure OpenAI 實作 RAG 的重要概念。
擷取增強產生 (RAG)
RAG 是一種技術,可藉由從外部來源擷取其他資料,增強 LLM 產生相關且資訊性回應的能力。 例如,RAG 可以查詢包含與使用者問題或提示相關的領域特定知識的文章或文件。 然後,LLM 可以在產生其回應時,使用此擷取的資料作為參考。 例如,使用 Azure SQL 資料庫的簡單 RAG 模式可能是:
- 將數據插入數據表中。
- 將 Azure SQL 資料庫連結到 Azure AI 搜尋。
- 建立 Azure OpenAI GPT4 模型,並將其連線至 Azure AI 搜尋。
- 從您的應用程式和 Azure SQL 資料庫使用經過訓練的 Azure OpenAI 模型,聊天並詢問資料相關問題。
RAG 模式透過快速工程設計,旨在為模型提供更多內容資訊來提升回應品質。 RAG 可讓模型藉由將相關的外部來源併入產生處理程序,套用更廣泛的知識庫,來得到更全面且明智的回應。 如需有關基礎 LLM 的詳細資訊,請參閱基礎 LLM - Microsoft Community 中樞。
提示和提示工程
提示指特定文字或資訊,可作為指揮 LLM 的指令,或是建置 LLM 時依據的內容相關資料。 提示可以採取各種形式,例如問題、陳述式,甚至是程式碼片段。
可用於從 LLM 產生回應的範例提示:
- 指示:向 LLM 提供指示詞
- 主要內容:將資訊提供給 LLM 進行處理
- 範例:協助將模型調節為特定工作或程序
- 指引:將 LLM 的輸出導向正確的方向
- 支援內容:代表 LLM 可用來產生輸出的補充資訊
為案例建立良好提示的程序稱為提示工程。 如需提示和提示工程最佳做法的詳細資訊,請參閱 Azure OpenAI 服務。
語彙基元
權杖是藉由將輸入文字分割成較小區段而產生的小型文字區塊。 這些區段可以是單字或字元群組,長度從單一字元到整個單字不等。 例如,hamburger
這個字會分成 ham
、bur
和 ger
等權杖,而像 pear
這樣短而常見的單字,則會被視為單一權杖。
在 Azure OpenAI 中,提供給 API 的輸入文字會轉換為權杖 (權杖化)。 每個 API 要求中處理的權杖數目取決於輸入、輸出和要求參數的長度等因素。 正在處理的權杖數量也會影響模型的回應時間和輸送量。 每個模型在 Azure OpenAI 的單一要求/回應中可以接受的權杖數目有限制。 若要深入了解,請參閱 Azure OpenAI 服務配額和限制。
向量
向量是數字的排序陣列 (通常是浮點數),可以代表某些資料的相關資訊。 例如,影像可以表示為像素值的向量,文字字串可以表示為向量或 ASCII 值。 將資料轉換成向量的程序稱為向量化。 如需詳細資訊,請參閱 向量。
Embeddings
內嵌是代表資料重要特徵的向量。 嵌入通常是透過使用深度學習模型來學習的,機器學習和 AI 模型將它們用作特徵。 內嵌也可以擷取相似概念之間的語意相似性。 例如,在產生單字 person
和 human
的內嵌時,我們預期它們的內嵌 (向量表示) 在值中類似,因為這些單字在語意上也類似。
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 資料庫中的資料,以建立可讓使用者與資料互動的解決方案,例如下列範例。
如需使用 SQL Database 和 OpenAI 的其他範例,請參閱下列文章:
向量
向量資料類型
在 2024 年 11 月,新的向量數據類型是在 Azure SQL 資料庫 中引進的。
專用 向量類型可讓您有效率且優化地儲存向量 數據,並隨附一組函式,以協助開發人員簡化向量和相似度搜尋實作。 使用新 VECTOR_DISTANCE
函式,可以在一行程式代碼中計算兩個向量之間的距離。 如需向量數據類型和相關函式的詳細資訊,請參閱 SQL 資料庫 引擎中的向量概觀。
例如:
CREATE TABLE [dbo].[wikipedia_articles_embeddings_titles_vector]
(
[article_id] [int] NOT NULL,
[embedding] [vector](1536) NOT NULL,
)
GO
SELECT TOP(10)
*
FROM
[dbo].[wikipedia_articles_embeddings_titles_vector]
ORDER BY
VECTOR_DISTANCE('cosine', @my_reference_vector, embedding)
舊版 SQL Server 中的向量
雖然舊版的 SQL Server 引擎最多且包含 SQL Server 2022,但沒有原生 向量類型,但向量 只不過是已排序的 Tuple,而關係資料庫在管理 Tuple 方面非常出色。 元組是一個正式詞彙,您可以將其視為資料表中的一個資料列。
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 AI 搜尋服務
使用 Azure SQL 資料庫和 Azure AI 搜尋實作 RAG 模式。 可以對儲存在 Azure SQL 資料庫中的資料執行支援的聊天模型,而不需要訓練或微調模型,這要歸功於 Azure AI 搜尋與 Azure OpenAI 和 Azure SQL 資料庫的整合。 在您的資料上執行模型可讓您聊天時有所依據,並以更高的精確度和速度分析您的資料。
智慧型應用程式
Azure SQL 資料庫可用來建置包含 AI 功能的智慧型應用程式,例如推薦程式和擷取增強產生 (RAG),如下圖所示:
如需使用工作階段摘要作為範例資料集,建置具備 AI 功能應用程式的端對端範例,請參閱:
LangChain 整合
LangChain 是一個著名的架構,用於開發由語言模型支援的應用程式。 如需示範如何使用 LangChain 在您自己的數據上建立 Chatbot 的範例,請參閱:
- 使用 Azure SQL、Langchain 和 Chainlit 在 1 小時內在您自己的數據上建置聊天機器人:使用 RAG 模式在您自己的數據上使用 RAG 模式建置聊天機器人,以協調 UI 的 LLM 呼叫和 Chainlit。
- 使用 Azure OpenAI GPT-4 建置您自己的適用於 Azure SQL 的 DB Copilot:建置類似 Copilot 的體驗,以使用自然語言查詢資料庫。
語意核心整合
語意核心是開放原始碼 SDK,讓您輕鬆組建呼叫現有程式碼的代理程式。 語意核心這個 SDK 擴充性強,可與 OpenAI、Azure OpenAI、Hugging Face 等的模型搭配使用! 將現有的 C#、Python 和 Java 程式碼與這些模型結合,您可組建回答問題以及將流程自動化的代理程式。
- 終極聊天機器人?:使用 NL2SQL 和 RAG 模式在您自己的數據上建置聊天機器人,以取得最終用戶體驗。
- OpenAI 內嵌範例:示範如何使用語意核心和核心記憶體,以 SQL Server 作為向量資料庫,在 .NET 應用程式使用內嵌。
- 語意核心和核心記憶體 - SQL 連接器 - 為記憶體提供語意核心的 SQL 資料庫連線。
Azure SQL 資料庫 中的 Microsoft Copilot 技能
Azure SQL 資料庫中的 Microsoft Copilot 技能(預覽版) 是 一组AI 輔助的體驗,其設計目的是簡化 Azure SQL 資料庫驅動應用程式的設計、作業、最佳化和健康情況。 Copilot 為資料庫管理提供自然語言轉換為 SQL 的功能和自助服務,可提高生產力。
Copilot 提供使用者問題的相關解答,利用資料庫內容、文件、動態管理檢視、查詢存放區和其他知識來源來簡化資料庫管理。 例如:
- 資料庫管理員可以獨立管理資料庫並解決問題,或深入了解資料庫的效能和功能。
- 開發人員可以詢問有關資料的問題,就像在文字或對話中一樣,以產生 T-SQL 查詢。 透過所產生查詢的詳細說明,開發人員還可了解如何快速撰寫查詢。
注意
Azure SQL 資料庫中的 Microsoft 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,為客戶提供自我引導式協助,讓他們能夠獨立管理資料庫並解決問題。 |
如需詳細資訊,請參閱 Azure SQL 資料庫中的 Microsoft Copilot 技能(預覽版)的常見問題。
Microsoft Fabric SQL 資料庫中的 Copilot 技能 (預覽)
Microsoft Fabric 中適用於 SQL 資料庫的 Copilot 包含 具有下列功能的整合式 AI 協助:
程序代碼完成:開始在 SQL 查詢編輯器中撰寫 T-SQL,Copilot 會自動產生程式碼建議,以協助完成查詢。 Tab 鍵會接受程式代碼建議,或持續輸入以忽略建議。
快速動作:在 SQL 查詢編輯器的功能區中,[修正] 和 [說明] 選項是快速動作。 醒目提示您選擇的 SQL 查詢,然後選取其中一個快速動作按鈕,以在查詢上執行選取的動作。
修正:出現錯誤訊息時,Copilot 可修正程式碼中的錯誤。 錯誤案例可能包括不正確/不受支援的 T-SQL 程式碼、錯誤的拼字等。 Copilot 還會提供註解,說明變更並建議 SQL 最佳做法。
說明: Copilot 可以使用批注格式提供 SQL 查詢和資料庫架構的自然語言說明。
聊天窗格:使用聊天窗格透過自然語言向 Copilot 提出問題。 Copilot 會根據所詢問的問題響應產生的 SQL 查詢或自然語言。
自然語言到 SQL:從純文字要求產生 T-SQL 程式代碼,並取得問題建議以加速工作流程。
檔型問答:詢問 Copilot 關於一般 SQL 資料庫功能的問題,並以自然語言回應。 Copilot 也有助於尋找與您的要求相關的檔。
適用於 SQL 資料庫的 Copilot 會利用數據表和檢視名稱、數據行名稱、主鍵和外鍵元數據來產生 T-SQL 程式代碼。 適用於 SQL 資料庫的 Copilot 不會使用資料表中的資料,以產生 T-SQL 建議。