使用 AI 框架开发智能应用程序
构建生产就绪型 AI 应用程序不仅需要 AI 功能,还需要一种包含实时数据流式处理、自然语言界面、开发人员生产力工具和云集成的方法。 SQL Server 2025 提供了一个平台,用于开发从本地部署扩展到云原生体系结构的应用程序。
这种集成方法意味着,可以在使用企业功能实现安全性、性能和可靠性的同时,使用工具和框架生成 AI 应用程序。 无论你是构建由 AI 见解提供支持的实时建议引擎、对话式 AI 助手还是分析仪表板,SQL Server 2025 都提供了所需的基础。
生成对话式 AI 接口
自然语言界面使企业数据可供用户访问,而无需 SQL 知识或技术专业知识。
设计对话查询模式
对话查询模式使用户能够使用自然语言提问,并通过使用 GPT-4 等 AI 模型将查询转换为 SQL 来接收数据驱动的答案。
实现自然语言转换为 SQL(NL2SQL)功能的能力:
-- Create a stored procedure that interprets natural language queries
CREATE PROCEDURE sp_ConversationalQuery
@user_question NVARCHAR(MAX),
@context NVARCHAR(MAX) OUTPUT,
@sql_query NVARCHAR(MAX) OUTPUT
AS
BEGIN
-- Build a prompt for the AI model to generate SQL
DECLARE @prompt NVARCHAR(MAX) = CONCAT(
'You are a SQL expert. Given the following database schema and user question, generate a SQL query.',
CHAR(10), CHAR(10),
'Schema:', CHAR(10),
'products (product_id INT, product_name NVARCHAR(100), price DECIMAL(10,2), category NVARCHAR(50))',
CHAR(10),
'sales (sale_id INT, product_id INT, quantity INT, sale_date DATE)',
CHAR(10), CHAR(10),
'Question: ', @user_question,
CHAR(10),
'Generate only the SQL query, no explanations.'
);
-- Call GPT-4 to generate SQL
DECLARE @request NVARCHAR(MAX) = JSON_OBJECT(
'messages': JSON_ARRAY(
JSON_OBJECT('role': 'system', 'content': 'You are a SQL query generator.'),
JSON_OBJECT('role': 'user', 'content': @prompt)
),
'max_tokens': 500
);
DECLARE @response NVARCHAR(MAX);
EXEC sp_invoke_external_rest_endpoint
@url = N'https://myopenai.openai.azure.com/openai/deployments/gpt-4/chat/completions?api-version=2024-02-15-preview',
@method = 'POST',
@credential = [MyAzureOpenAICredential],
@payload = @request,
@response = @response OUTPUT;
-- Extract the generated SQL
SET @sql_query = JSON_VALUE(@response, '$.result.choices[0].message.content');
SET @context = 'Query generated successfully';
END;
此 存储过程 使用 GPT-4 将自然语言问题翻译成 SQL 查询,从而允许对数据进行对话访问。
实施安全防护措施
安全防护措施可防止 AI 生成的 SQL 查询执行不正确的作,例如删除或修改数据,确保仅对数据库进行只读访问。
添加验证以确保生成的 SQL 安全:
CREATE PROCEDURE sp_SafeConversationalQuery
@user_question NVARCHAR(MAX),
@results NVARCHAR(MAX) OUTPUT
AS
BEGIN
DECLARE @sql_query NVARCHAR(MAX);
DECLARE @context NVARCHAR(MAX);
-- Generate SQL from natural language
EXEC sp_ConversationalQuery @user_question, @context OUTPUT, @sql_query OUTPUT;
-- Validate the generated SQL
IF @sql_query LIKE '%DROP%'
OR @sql_query LIKE '%DELETE%'
OR @sql_query LIKE '%UPDATE%'
OR @sql_query LIKE '%INSERT%'
OR @sql_query LIKE '%ALTER%'
OR @sql_query LIKE '%CREATE%'
BEGIN
SET @results = JSON_OBJECT('error': 'Generated query contains potentially unsafe operations');
RETURN;
END;
-- Execute the query safely (read-only)
BEGIN TRY
EXEC sp_executesql @sql_query;
END TRY
BEGIN CATCH
SET @results = JSON_OBJECT(
'error': ERROR_MESSAGE(),
'query': @sql_query
);
END CATCH;
END;
此包装器添加了安全检查以防止破坏性作,确保用户只能查询数据,而不能对其进行修改。
创建多轮次对话
多轮对话允许用户与您的数据展开自然的上下文对话,支持在维护对话历史记录的基础上提出后续问题,而无需重复上下文。
以下示例构建了一个对话式 AI,该 AI 能够在多次交互中保持上下文,从而能够回答后续问题并与你的数据进行自然对话:
CREATE TABLE conversation_history (
conversation_id UNIQUEIDENTIFIER DEFAULT NEWID(),
user_id NVARCHAR(100),
turn_number INT,
user_message NVARCHAR(MAX),
assistant_message NVARCHAR(MAX),
timestamp DATETIME2 DEFAULT GETDATE(),
PRIMARY KEY (conversation_id, turn_number)
);
CREATE PROCEDURE sp_ConversationalChat
@conversation_id UNIQUEIDENTIFIER,
@user_id NVARCHAR(100),
@user_message NVARCHAR(MAX),
@response NVARCHAR(MAX) OUTPUT
AS
BEGIN
-- Get conversation history
DECLARE @history NVARCHAR(MAX);
SELECT @history = STRING_AGG(
JSON_OBJECT(
'role': CASE WHEN turn_number % 2 = 1 THEN 'user' ELSE 'assistant' END,
'content': CASE WHEN turn_number % 2 = 1 THEN user_message ELSE assistant_message END
),
','
)
FROM conversation_history
WHERE conversation_id = @conversation_id
ORDER BY turn_number;
-- Build messages array with history
DECLARE @messages NVARCHAR(MAX) = CONCAT('[', @history, ',',
JSON_OBJECT('role': 'user', 'content': @user_message), ']');
-- Call GPT-4 with conversation context
DECLARE @chat_request NVARCHAR(MAX) = JSON_OBJECT('messages': @messages);
EXEC sp_invoke_external_rest_endpoint
@url = N'https://myopenai.openai.azure.com/openai/deployments/gpt-4/chat/completions?api-version=2024-02-15-preview',
@method = 'POST',
@credential = [MyAzureOpenAICredential],
@payload = @chat_request,
@response = @response OUTPUT;
-- Extract and store the response
DECLARE @assistant_response NVARCHAR(MAX) = JSON_VALUE(@response, '$.result.choices[0].message.content');
-- Save to conversation history
DECLARE @next_turn INT = (SELECT ISNULL(MAX(turn_number), 0) + 1 FROM conversation_history WHERE conversation_id = @conversation_id);
INSERT INTO conversation_history (conversation_id, user_id, turn_number, user_message, assistant_message)
VALUES (@conversation_id, @user_id, @next_turn, @user_message, @assistant_response);
SET @response = @assistant_response;
END;
使用 AI 工具提高开发人员工作效率
SQL Server 2025 与新式开发工具集成,以加速 AI 应用程序开发。
将适用于 Visual Studio Code 的 MSSQL 扩展与 GitHub Copilot 配合使用
Visual Studio Code 的 MSSQL 扩展包括 GitHub Copilot 集成,为数据库开发提供 AI 支持的帮助。
注释
GitHub Copilot 与 MSSQL 扩展的集成目前为预览版。 特性和功能可能会更改。 有关最新信息,请参阅 MSSQL 扩展文档。
GitHub Copilot 集成工具为数据库开发任务提供代码辅助。
- 查询生成: 使用自然语言描述所需内容,获取 T-SQL 代码
- 查询优化: 获取有关提高查询性能的建议
- 架构探索: 询问有关数据库架构的问题
- 迁移帮助: 生成用于架构更改和数据迁移的脚本
- 解释: 使用 AI 生成的解释了解复杂的查询
以下示例演示 GitHub Copilot 如何从自然语言注释生成完整的存储过程:
-- Type a comment describing what you want
-- Generate a stored procedure that finds products similar to a given product using vector search
-- GitHub Copilot suggests:
CREATE PROCEDURE sp_FindSimilarProducts
@product_id INT,
@top_n INT = 5
AS
BEGIN
DECLARE @query_embedding VECTOR(1536);
-- Get the embedding of the reference product
SELECT @query_embedding = embedding
FROM products
WHERE product_id = @product_id;
-- Find similar products
SELECT TOP (@top_n)
product_id,
product_name,
category,
price,
VECTOR_DISTANCE('cosine', @query_embedding, embedding) AS similarity_score
FROM products
WHERE product_id != @product_id
ORDER BY similarity_score;
END;
将 Entity Framework Core 与 AI 功能配合使用
Entity Framework Core 可用于使用 SQL Server 生成 AI 应用程序。 可以使用原始 SQL 查询来处理 SQL Server 的 VECTOR 数据类型和 AI 函数:
由于 Entity Framework Core 本身不支持 VECTOR 数据类型,因此此示例用于 FromSqlRaw 直接执行 T-SQL,同时受益于 EF Core 的异步作和对象映射。 该方法将嵌入到 JSON 的查询序列化、使用 VECTOR_DISTANCE矢量相似性搜索,并返回具有类似嵌入的产品,非常适合建议系统和语义搜索。
using Microsoft.EntityFrameworkCore;
using System.Text.Json;
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
}
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
// Query with vector similarity using raw SQL
public async Task<List<Product>> FindSimilarProducts(float[] queryEmbedding, int topN = 5)
{
var embeddingJson = JsonSerializer.Serialize(queryEmbedding);
var similarProducts = await _context.Products
.FromSqlRaw(@"
SELECT TOP {0}
product_id,
product_name,
description,
price
FROM products
WHERE VECTOR_DISTANCE('cosine', CAST({1} AS VECTOR(1536)), embedding) < 0.5
ORDER BY VECTOR_DISTANCE('cosine', CAST({1} AS VECTOR(1536)), embedding)
", topN, embeddingJson)
.ToListAsync();
return similarProducts;
}
与 Microsoft Fabric 集成
Microsoft Fabric 提供了一个统一的分析平台,用于补充 SQL Server 的 AI 功能。 SQL Server 2025 支持 数据库镜像到 Microsoft Fabric,无需传统 ETL 管道的复杂性即可对作数据进行近实时分析。
关系图显示镜像到 Microsoft Fabric 的 SQL Server 2025 数据库。 在左侧,SQL Server 2025 数据库持续将数据复制到 Microsoft Fabric OneLake。 该图演示了零 ETL 体系结构,其中操作数据流向分析平台。
配置 Fabric 镜像
Fabric 镜像是通过 Microsoft Fabric 门户使用可视化界面进行配置的。 镜像功能以 Delta Lake 格式将数据持续复制到 Fabric 的 OneLake,使其可用于分析,而不会影响作运营工作负载。
注释
有关分步配置说明,请参阅 教程:从 SQL Server 配置 Microsoft Fabric 镜像数据库。
Fabric 镜像的一些优点包括:
- 准实时分析: 数据更改会持续复制,延迟最小
- Zero-ETL 体系结构: 无需生成和维护复杂的数据管道
- 打开数据格式: 数据以 Delta Lake 格式存储在 OneLake 中,以便实现广泛的工具兼容性
- AI 就绪分析:与 Fabric 的 AI 和机器学习功能直接集成
- SQL 分析终结点: 使用熟悉的 T-SQL 语法查询镜像数据
- 无操作影响: 镜像使用更改跟踪,而不会影响生产工作负荷
优化镜像性能
配置镜像后,可以使用 SQL Server 的资源 调控器 来管理其对作工作负荷的性能影响:
下面的代码示例创建一个资源调控器配置,用于限制 Fabric 镜像作使用的 CPU 和内存资源。
-- Create resource pool for mirroring
CREATE RESOURCE POOL FabricMirrorPool
WITH (
MIN_CPU_PERCENT = 5,
MAX_CPU_PERCENT = 20,
MIN_MEMORY_PERCENT = 5,
MAX_MEMORY_PERCENT = 20
);
-- Create workload group for mirroring
CREATE WORKLOAD GROUP FabricMirrorGroup
WITH (
IMPORTANCE = MEDIUM
)
USING FabricMirrorPool;
-- Apply classifier function
CREATE FUNCTION dbo.FabricMirrorClassifier()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @workload_group SYSNAME = 'default';
IF APP_NAME() LIKE '%Fabric Mirror%'
SET @workload_group = 'FabricMirrorGroup';
RETURN @workload_group;
END;
-- Enable resource governor
ALTER RESOURCE GOVERNOR
WITH (CLASSIFIER_FUNCTION = dbo.FabricMirrorClassifier);
ALTER RESOURCE GOVERNOR RECONFIGURE;
在此示例中,资源池 FabricMirrorPool 限制镜像在 CPU 和内存的 5-20% 之间使用,从而阻止它影响生产工作负荷。 分类器函数根据应用程序名称标识镜像会话,并将其路由到专用工作负荷组,确保作和分析工作负荷的资源分配和可预测的性能一致。
资源调控器可确保 Fabric 镜像不会影响操作工作负荷。
优化 AI 应用程序性能
性能对于生产 AI 应用程序至关重要。
优化矢量搜索查询
使用查询提示和索引优化:
优化矢量搜索性能对于生产 AI 应用程序至关重要,其中响应时间直接影响用户体验。
以下示例演示了两种关键优化技术:创建以特定数据子集(如产品类别)为目标的筛选 矢量索引 ,并使用 查询提示 来控制执行行为。
筛选的索引 idx_electronics_embedding 通过仅为相关矢量编制索引、减少搜索空间并提高查询速度,从而加速电子类别中的搜索。 该 MAXDOP 4 提示将并行处理限制为四个线程,将性能与资源消耗平衡,这对于防止矢量搜索垄断服务器资源和影响其他工作负荷至关重要。
-- Create filtered vector index for specific categories
CREATE VECTOR INDEX idx_electronics_embedding
ON products(embedding)
WHERE category = 'Electronics';
-- Use query hints for better performance
DECLARE @query_embedding VECTOR(1536) = AI_GENERATE_EMBEDDINGS(@user_query USE MODEL Ada2Embeddings);
SELECT TOP 10
product_id,
product_name,
VECTOR_DISTANCE('cosine', @query_embedding, embedding) AS score
FROM products WITH (INDEX(idx_electronics_embedding))
WHERE category = 'Electronics'
ORDER BY score
OPTION (MAXDOP 4);
可以使用索引和查询提示来优化特定方案的矢量搜索。
遵循这些做法并使用 SQL Server 2025 的 AI 功能,可以构建、部署和运营生产就绪型应用程序,这些应用程序可提供真正的业务价值,同时维护企业安全、性能和可靠性标准。