适用于:SQL Server 2025(17.x) 预览版
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 预览版中的 SQL 数据库
本文概述了如何使用人工智能(AI)选项(如 OpenAI 和矢量)在 SQL Server 和 Azure SQL 托管实例中使用 SQL 数据库引擎生成智能应用程序。
对于 Azure SQL 数据库,请查看 Azure SQL 数据库。
有关示例和示例,请访问 SQL AI 示例存储库。
概述
大型语言模型(LLM)使开发人员能够创建具有熟悉用户体验的 AI 驱动的应用程序。
在应用程序中使用 LLM 可带来更大的价值和改进的用户体验,当模型可以在正确的时间从应用程序的数据库访问正确的数据时。 此过程称为“检索扩充生成”(RAG),SQL 数据库引擎具有许多支持这种新模式的功能,使其成为生成智能应用程序的绝佳数据库。
以下链接提供了用于生成智能应用程序的各种选项的示例代码:
| AI 选项 | Description |
|---|---|
| Azure OpenAI | 为 RAG 生成嵌入内容,并与 Azure OpenAI 支持的任何模型集成。 |
| 向量 | 了解如何在数据库中存储矢量和使用向量函数。 |
| Azure AI 搜索 | 结合使用数据库和 Azure AI 搜索来训练 LLM 数据。 |
| 智能应用程序 | 了解如何使用可在任何方案中复制的常见模式创建端到端解决方案。 |
使用 Azure OpenAI 实现 RAG 的关键概念
本部分包括在 SQL 数据库引擎中使用 Azure OpenAI 实现 RAG 的关键概念。
检索增强生成 (RAG)
RAG 是一种技术,通过从外部源检索其他数据,增强了 LLM 生成相关和信息性响应的能力。 例如,RAG 可以查询包含与用户问题或提示相关的特定于域的知识的文章或文档。 然后,LLM 可以在生成其响应时将此检索的数据用作引用。 例如,使用 SQL 数据库引擎的简单 RAG 模式可以是:
- 将数据插入表中。
- 将实例链接到 Azure AI 搜索。
- 创建 Azure OpenAI GPT4 模型并将其连接到 Azure AI 搜索。
- 使用已训练的 Azure OpenAI 模型从应用程序和实例中的数据聊天并询问有关数据的问题。
具有提示工程的 RAG 模式通过向模型提供更多上下文信息来提高响应质量。 RAG 使模型能够通过将相关的外部源合并到生成过程中来应用更广泛的知识库,从而生成更全面且更明智的响应。 有关 地面 LLM 的详细信息,请参阅 “地面 LLM - Microsoft社区中心”。
提示和提示工程
提示是指作为 LLM 指令的特定文本或信息,或作为 LLM 可构建的上下文数据。 提示可以采用各种形式,例如问题、语句甚至代码片段。
可用于从 LLM 生成响应的示例提示:
- 说明:向 LLM 提供指令
- 主要内容:向 LLM 提供信息以供处理
- 示例:帮助将模型条件设置为特定任务或进程
- 提示:将 LLM 的输出定向到正确的方向
- 支持内容:表示 LLM 可用于生成输出的补充信息
为方案创建良好提示的过程称为 提示工程。 有关提示工程的提示和最佳做法的详细信息,请参阅 Azure OpenAI 服务。
Tokens
标记是通过将输入文本拆分为较小的段而生成的小文本块。 这些段可以是单词或字符组,长度从单个字符到整个单词不等。 例如,单词hamburger将划分为标记,hamburger而像这样的简短和常用词pear将被视为单个标记。
在 Azure OpenAI 中,提供给 API 的输入文本转换为令牌(标记化)。 每个 API 请求中处理的令牌数取决于输入、输出和请求参数的长度等因素。 正在处理的令牌数量也会影响模型的响应时间和吞吐量。 每个模型在 Azure OpenAI 的单个请求/响应中可以采用的令牌数有限制。 若要了解详细信息,请参阅 Azure OpenAI 服务配额和限制。
Vectors
矢量是数字的有序数组 (通常是浮点),可以表示有关某些数据的信息。 例如,图像可以表示为像素值的向量,也可以将文本字符串表示为 ASCII 值的向量。 将数据转换为向量的过程称为 向量化。 有关详细信息,请参阅 Vector 示例。
嵌入
嵌入是表示数据重要特征的矢量。 嵌入通常是通过使用深度学习模型来学习的,机器学习和 AI 模型利用嵌入作为特征。 嵌入还可以捕获相似概念之间的语义相似性。 例如,在为单词“person”和“human”生成嵌入时,我们期望它们的嵌入 (矢量表示形式) 值相似,因为这两个单词在语义上也相似。
Azure OpenAI 拥有从文本数据创建嵌入的模型。 该服务将文本分解为标记,并使用 OpenAI 预先训练的模型生成嵌入。 要了解详细信息,请参阅使用 Azure OpenAI 创建嵌入。
矢量搜索
矢量搜索是指在语义上类似于特定查询矢量的数据集中查找所有矢量的过程。 因此,单词 human 的查询向量将在整个字典中搜索语义上相似的单词,并应将单词 person 查找为接近匹配项。 这种接近度或距离是使用相似性指标(如余弦相似性)测量的。 较近的向量相近,较小的是它们之间的距离。
假设你运行查询超过数百万个文档来查找数据中最相似的文档。 可以使用 Azure OpenAI 为数据和查询文档创建嵌入内容。 然后,可以执行矢量搜索,从数据集中查找最相似的文档。 但是,在几个示例中执行矢量搜索是微不足道的。 跨数千个或数百万个数据点执行相同的搜索会变得具有挑战性。 详尽搜索与最接近的邻居(ANN)搜索方法之间也有权衡,包括延迟、吞吐量、准确性和成本,所有这些都取决于应用程序的要求。
SQL 数据库引擎中的向量可以有效地存储和查询,如下一部分所述,允许最接近的邻居搜索具有出色的性能。 你不必在准确性和速度之间做出决定:可以同时拥有这两者。 将矢量嵌入与集成解决方案中的数据一起存储,可最大程度地减少管理数据同步的需要,并加快 AI 应用程序开发的上市时间。
Azure OpenAI
嵌入是指将现实世界表示为数据的过程。 文本、图像或声音可以转换为嵌入内容。 Azure OpenAI 模型能够将实际信息转换为嵌入。 模型可用作 REST 终结点,因此可以通过使用系统存储过程 sp_invoke_external_rest_endpoint 来从 SQL 数据库引擎调用。从 SQL Server 2025(17.x)预览版开始,以及配置了Always-up-to-date 更新策略的 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;
DECLARE @e VECTOR(1536) = JSON_QUERY(@response, '$.result.data[0].embedding');
使用对 REST 服务的调用获取嵌入只是使用 SQL 托管实例和 OpenAI 时拥有的集成选项之一。 可以让任何 可用模型 访问 SQL 数据库引擎中存储的数据,以创建用户可以与数据交互的解决方案,例如以下示例:
有关使用 Azure SQL 和 OpenAI 的其他示例,请参阅以下文章,这些文章也适用于 SQL Server 和 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)
Azure AI 搜索
使用 SQL 数据库引擎和 Azure AI 搜索实现 RAG 模式。 可以在 SQL 数据库引擎中存储的数据上运行支持的聊天模型,而无需训练或微调模型,这要归功于 Azure AI 搜索与 Azure OpenAI 和 SQL 数据库引擎的集成。 通过对数据运行模型,可以基于数据进行聊天和分析,其准确性和速度更高。
若要详细了解 Azure AI 搜索与 Azure OpenAI 和 SQL 数据库引擎的集成,请参阅以下文章,这些文章也适用于 SQL Server 和 Azure SQL 托管实例:
智能应用程序
SQL 数据库引擎可用于生成包括 AI 功能的智能应用程序,如推荐器和检索扩充生成(RAG),如下图所示:
有关使用会话抽象作为示例数据集生成支持 AI 的应用程序的端到端示例,请参阅:
注释
LangChain 集成和语义内核集成依赖于 矢量数据类型,该数据类型从 SQL Server 2025 (17.x) 预览版开始提供,在配置了 Always-up-to-date 更新策略的 Azure SQL 托管实例中。
LangChain 集成
LangChain 是一个众所周知的框架,用于开发由语言模型提供支持的应用程序。 有关演示如何使用 LangChain 在自己的数据上创建聊天机器人的示例,请参阅:
- langchain-sqlserver PyPI 包
将 Azure SQL 与 LangChain 配合使用的几个示例:
端到端示例:
- 使用 Azure SQL、Langchain 和 Chainlit 在 1 小时内基于自己的数据构建聊天机器人:使用 Langchain 在自己的数据上使用 RAG 模式构建聊天机器人,以便协调 LLM 调用和 UI 的 Chainlit。
语义内核集成
语义内核是一种开源 SDK ,可用于轻松生成可调用现有代码的代理。 作为高度可扩展的 SDK,可以将语义内核与 OpenAI、Azure OpenAI、Hugging Face 等模型配合使用。 通过将现有 C#、Python 和 Java 代码与这些模型相结合,可以生成回答问题和自动化过程的代理。
下面是语义内核帮助构建支持 AI 的解决方案的一个示例:
- 终极聊天机器人?:使用 NL2SQL 和 RAG 模式基于自己的数据构建聊天机器人,实现最终用户体验。