在 AI 应用程序中使用 SQL 数据库

适用于:✅Microsoft Fabric 中的 SQL 数据库

本文介绍如何在Fabric中使用 SQL 数据库构建 AI 驱动的应用程序,这些应用程序将事务数据与大型语言模型(LLM)、矢量搜索或检索扩充生成(RAG)模式相结合。

Fabric 中的 SQL 数据库为智能应用提供了关系型基础:支持 ACID 事务、低延迟查询、原生 vector 数据类型和函数,并与更广泛的 Fabric 分析和 AI 平台紧密集成。

为什么使用适用于 AI 应用程序的 Fabric中的 SQL 数据库?

构建智能应用程序需要一个数据库,该数据库可以与矢量嵌入一起存储操作数据,以低延迟提供事务查询和相似性查询,并与 AI 业务流程框架集成。 Fabric中的 SQL 数据库满足以下要求:

  • 原生向量支持:SQL 数据库引擎的原生向量数据类型向量标量函数可让你直接在 T-SQL 中存储嵌入向量并执行相似性搜索,而无需单独的向量数据库。
  • RAG 就绪体系结构:将结构化业务数据与矢量嵌入合并到同一数据库中,以便检索查询可以将关系上下文(客户记录、订单历史记录、产品目录)与语义搜索结果联接到单个查询中。
  • Framework 集成:通过现有的SQL Server连接器连接到 LangChain语义内核,以生成协调的 AI 工作流。
  • Fabric 平台集成:无需将数据移出平台,即可从 Fabric Notebooks、数据科学工作负载和 Copilot 体验中访问 SQL 数据。
  • Enterprise 治理:Microsoft Entra ID身份验证、工作区级安全性和客户管理的密钥加密适用于与任何其他操作工作负荷相同的 AI 工作负荷。

Tip

有关使用 Fabric SQL 数据库处理数据并生成向量嵌入的真实客户案例,请参阅 客户案例:Eastman 统一数据,借助 Microsoft Fabric 构建 AI 驱动的未来

检索增强生成 (RAG)

RAG 通过在生成答案之前从数据库检索相关数据来增强 LLM 响应。 应用程序并非仅依赖模型的训练数据,而是通过查询您的运营数据,使回答基于当前的特定领域事实。 如需全面了解,请参阅检索增强生成(RAG)

Fabric中具有 SQL 数据库的典型 RAG 模式遵循以下步骤:

  1. 区块:将大型数据源(文档、知识库文章、产品目录)分解为可管理的片段,并将其转换为纯文本。
  2. Embed:使用 Azure OpenAI 或其他嵌入模型为每个区块生成矢量嵌入。
  3. 存储:将嵌入内容插入到包含 矢量 列的表中,以及源文本和任何关系元数据。
  4. 检索:当用户提出问题时,使用同一模型嵌入查询,然后使用 VECTOR_DISTANCE 查找最相似的区块。 与关系表联接以扩充上下文。
  5. 扩充:将检索的区块与用户的原始问题合并到提示中,指示 LLM 如何使用上下文。
  6. 生成:将增强后的提示发送给 LLM,由其生成基于检索到的数据的响应。

事务数据库中的混合矢量搜索

由于嵌入和关系数据位于同一数据库中,因此可以在同一查询中按关系属性(日期范围、类别、访问权限)进行筛选,从而提高相关性和安全性。 可以将矢量搜索与传统的 SQL 筛选器(WHERE)组合在一起,以获取在事务关系和向量函数上筛选的结果。 例如:

-- Hybrid search: vector similarity filtered by product category
SELECT TOP (5) p.product_name, p.description
, cosine_distance = VECTOR_DISTANCE('cosine', @query_embedding, p.embedding)
FROM dbo.products AS p
WHERE p.category = 'Electronics'
ORDER BY VECTOR_DISTANCE('cosine', @query_embedding, p.embedding);

此模式适用于产品建议、知识库搜索和客户支持方案,其中结果需要语义上相关且受业务规则约束。

还可以使用较新的 VECTOR_SEARCH T-SQL 语法进行查询,以查找近似近邻结果。 例如:

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);

SELECT TOP (10) WITH APPROXIMATE
    t.id,
    t.title,
    r.distance
FROM VECTOR_SEARCH(
        TABLE = dbo.wikipedia_articles_embeddings AS t,
        COLUMN = content_vector,
        SIMILAR_TO = @qv,
        METRIC = 'cosine'
    ) AS r
ORDER BY r.distance;

具有 Fabric MCP 服务器的 AI 代理

Fabric为 AI 代理提供开源Fabric本地 MCP 和 Fabric 远程 MCP 服务器。 这些服务器提供直接身份验证以及针对预定义操作的说明,例如工作区管理、条目的 CRUD 和定义,以及权限管理。

这两个Fabric MCP 服务器选项都适用于任何 MCP 兼容的客户端,包括GitHub Copilot、Cursor、Claude Desktop 等。 例如,适用于 Visual Studio Code 的 Fabric MCP 服务器扩展可与Microsoft Fabric 扩展和 GitHub Copilot 对话助手 扩展配合使用。 通过使用这些扩展,可以访问GitHub Copilot聊天中的 Fabric MCP 工具,并使用代理来管理Fabric项,例如创建和管理Fabric SQL 数据库。

  • Fabric 本地 MCP 服务器在您的计算机本地运行,因此 AI 代理无需访问您的环境,即可获得生成代码和创作项目所需的上下文。
  • Fabric远程 MCP 服务器是一个云托管的服务器,允许 AI 代理在Fabric环境中执行已准备好、经过身份验证的操作,无需本地设置。

AI 工具使用 Fabric MCP 服务器编写具有正确 API 的代码,并在已信任的正确 RBAC 边界内编写代码。

例如,在快速完成 Fabric 本地 MCP 服务器的设置后,你可以在 Visual Studio Code 的 GitHub Copilot Chat 中以代理模式提出基础设施相关问题并分配任务。 例如:

List all SQL databases and mirrored SQL databases in the Fabric workspace "DemoSQLdb".

您的代理使用已知的 Fabric API 命令返回所有属于这些类型的 Fabric 项目。

Create a new SQL database in Fabric named "ContosoTest" in the Fabric workspace "DemoSQLdb".

代理使用已知的Fabric API 命令为你创建数据库项,并具有默认设置。

使用 SQL MCP Server 的 AI 代理

SQL MCP 服务器提供模型上下文协议接口,AI 代理可以使用该接口通过受管理的工具 API 与数据库交互,而不是生成原始 SQL。 服务器:

  • 提供一组由您的配置支持的预定义工具。
  • 一致地强制实施权限和约束。
  • 允许代理在没有架构猜测的情况下发现可用的功能。

此模式可用于生成自治代理,这些代理可以在多步骤工作流中查询和更新操作数据。

SQL MCP 服务器使用 数据 API 生成器的 实体抽象、RBAC、缓存和遥测来提供生产就绪的图面,该图面在 REST、GraphQL 和 MCP 中的工作方式相同。 配置一次,引擎处理其余部分。

适用于 Visual Studio Code 的 MSSQL 扩展包括适用于 Data API builder 的集成 UI,因此无需编写配置文件或离开Visual Studio Code即可为 SQL 数据库表创建 REST、GraphQL 和 MCP 终结点。 你可以选择要公开哪些表、配置 CRUD 权限、选择 API 类型、预览生成的配置,以及部署由数据 API 生成器提供支持的本地后端,所有这些表都来自可视化界面。

使用 Azure OpenAI 进行扩充

SQL 数据库引擎提供内置的 T-SQL 函数,用于直接在数据库中生成嵌入和分块文本,而无需外部代码或管道。

注册嵌入模型

使用 CREATE EXTERNAL MODEL 将 Azure OpenAI 嵌入终结点注册为数据库对象。 此示例使用 text-embedding-ada-002 部署,并采用 Microsoft Entra 托管标识身份验证。 首先,使用托管标识创建 Azure OpenAI 的访问凭据:

CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
    WITH IDENTITY = 'Managed Identity',
    SECRET = '{"resourceid":"https://cognitiveservices.azure.com"}';
GO

然后,创建外部模型:

CREATE EXTERNAL MODEL MyEmbeddingModel
WITH (
    LOCATION = 'https://my-openai.cognitiveservices.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2024-02-01',
    API_FORMAT = 'Azure OpenAI',
    MODEL_TYPE = EMBEDDINGS,
    MODEL = 'text-embedding-ada-002',
    CREDENTIAL = [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
);

有关更多身份验证选项(包括 API 密钥),请参阅 CREATE EXTERNAL MODEL

内联生成嵌入

使用 AI_GENERATE_EMBEDDINGS 直接在 T-SQL 查询、插入和更新中生成矢量嵌入。

-- Generate embeddings for existing rows
UPDATE t
SET t.embedding = AI_GENERATE_EMBEDDINGS(t.description USE MODEL MyEmbeddingModel)
FROM dbo.products AS t;

在单个语句中分块和嵌入

AI_GENERATE_CHUNKSAI_GENERATE_EMBEDDINGS 将大文本拆分为区块,并将其嵌入单个 T-SQL 语句中。

INSERT INTO dbo.document_embeddings (chunked_text, embedding)
SELECT c.chunk,
       AI_GENERATE_EMBEDDINGS(c.chunk USE MODEL MyEmbeddingModel)
FROM dbo.documents AS d
CROSS APPLY AI_GENERATE_CHUNKS(
    SOURCE = d.content,
    CHUNK_TYPE = FIXED,
    CHUNK_SIZE = 100
) AS c;

使用 sp_invoke_external_rest_endpoint 进行直接 REST 调用

对于AI_GENERATE_EMBEDDINGS未涵盖的场景(例如调用补全或聊天终结点),请使用sp_invoke_external_rest_endpoint直接从 T-SQL 调用任何 Azure OpenAI REST API。 有关详细信息,请参阅 Azure OpenAI 集成

与 Fabric AI 工作负载集成

Fabric中的 SQL 数据库连接到平台更广泛的 AI 功能:

集成 使用
Fabric 笔记本 从 PySpark 或Python笔记本查询 SQL 数据库,以便进行数据准备、模型训练和批处理评分。
Fabric 数据科学 将 SQL 数据用作机器学习试验的输入,然后将预测写回到数据库以供操作使用。
SQL 数据库中的 Copilot 使用自然语言直接在Fabric门户查询编辑器中生成、解释和优化 T-SQL 查询。
适用于 GraphQL 的 API 通过 GraphQL 端点公开经 AI 增强的数据,供应用程序使用。
数据管道和数据流 Gen2 大规模协调嵌入生成和扩充工作流。

Fabric SQL 数据库用例情景

若要详细了解 Fabric SQL 数据库的最佳用例,请参阅: