暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DBA夜读·第五季第10期|AI模型与SQL集成:企业AI应用构建实战

绩隐金 2026-04-13
35

第五季·《SQL Server 2025 Unveiled》 本季围绕Bob Ward的最新著作,系统学习SQL Server 2025的前沿特性——从AI集成到Microsoft Fabric,从REST API到事件流,从增强的高可用到智能查询处理。

【上期回顾】

上一期我们学习了Microsoft Fabric深度集成:

  • Fabric镜像使用Change Feed技术,变更直接写入OneLake,零中间存储

  • 与SQL Server 2016-2022的CDC不同,Change Feed无SQL Agent依赖、自动处理schema变更

  • 每个镜像数据库自动提供SQL Analytics Endpoint,可用T-SQL查询只读副本

  • 镜像计算免费,存储有免费额度,成本效益显著

  • 当前限制:仅限本地Windows、需要Azure Arc、Full Recovery Mode

本期我们将进入SQL Server 2025最激动人心的部分——AI模型与SQL的原生集成。从向量搜索到外部模型调用,从本地模型部署到RAG应用构建,SQL Server 2025让数据库成为企业AI应用的统一平台。

【第一部分】AI集成全景:从向量到模型

1.1 SQL Server 2025的AI就绪战略

SQL Server 2025被微软定义为“AI就绪的企业级数据库”。这不仅仅是一句口号,而是通过三个层面的深度集成来实现的:

这三层能力的协同,使得开发者可以在不离开SQL Server环境的情况下,构建端到端的AI应用。

1.2 核心AI功能速览

功能类别
核心特性
引入方式
适用场景
向量存储与搜索
VECTOR数据类型、DiskANN索引
PREVIEW_FEATURES开启
语义搜索、RAG、推荐系统
外部模型调用
sp_invoke_external_rest_endpoint
默认可用
云端AI服务集成
本地模型托管
CREATE EXTERNAL MODEL + ONNX
PREVIEW_FEATURES开启
离线推理、数据隐私
嵌入生成
AI_GENERATE_EMBEDDINGS
PREVIEW_FEATURES开启
文本向量化
文本分块
AI_GENERATE_CHUNKS
PREVIEW_FEATURES开启
文档预处理

1.3 预览功能的启用

部分AI功能处于预览阶段,需要通过数据库级配置启用:

sql

-- 启用预览功能(使用AI向量、ONNX模型等)
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES =ON;
-- 验证启用状态
SELECT name, value_in_use 
FROM sys.database_scoped_configurations 
WHERE name ='PREVIEW_FEATURES';
-- 查看向量索引信息(预览功能启用后可见)
SELECT FROM sys.vector_indexes;

⚠️ 重要提醒:预览功能不建议在生产环境使用。根据微软官方发布计划,正式版(GA)预计在2025年底或2026年初发布,届时这些功能将默认可用。

【第二部分】向量搜索:语义检索的核心

2.1 VECTOR数据类型

SQL Server 2025引入了原生的VECTOR数据类型,用于存储AI模型生成的文本嵌入(embeddings)。

sql

-- 创建包含向量列的表
CREATE TABLE dbo.ProductEmbeddings (
    ProductID INT PRIMARY KEY,
    ProductName NVARCHAR(200),
    Description NVARCHAR(MAX),
    Embedding VECTOR(1536, float32)
-- 1536维向量,float32精度);
-- 插入向量数据(从AI模型获取的嵌入)
INSERT INTO dbo.ProductEmbeddings 
(ProductID, ProductName, Description, Embedding)
VALUES(1,'超轻跑鞋','专为马拉松设计的轻量跑鞋,缓震性能卓越','[''0.012'', ''-0.023'', ''0.045'', ...]'
-- 实际1536个浮点数
);

向量维度说明

  • 维度数量取决于生成嵌入的AI模型

  • OpenAI text-embedding-3-small: 1536维

  • OpenAI text-embedding-3-large: 3072维

  • 本地模型(如mxbai-embed-large-v1): 1024维

2.2 向量距离计算:VECTOR_DISTANCE

VECTOR_DISTANCE
函数计算两个向量之间的相似度,支持多种距离度量:

sql

-- 计算余弦距离(最常用)
DECLARE @searchVector 
VECTOR(1536, float32)='[0.015, -0.018, 0.032, ...]';
SELECT
    ProductID,
    ProductName,
    VECTOR_DISTANCE('cosine', Embedding,@searchVectorAS CosineDistance
FROM dbo.ProductEmbeddings
ORDER BY CosineDistance
OFFSET ROWS FETCH NEXT 10 ROWS ONLY;

距离度量对比

度量方式
函数标识
取值范围
适用场景
余弦距离'cosine'
0-2(0=相同,2=相反)
文本相似度、语义搜索
欧氏距离'euclidean'
0-∞(0=相同)
图像嵌入、聚类
点积'dot'
-∞-∞
某些专用嵌入模型

2.3 DiskANN向量索引

对于大规模向量数据(百万级以上),DiskANN索引提供高效的近似最近邻搜索:

sql

-- 创建DiskANN向量索引
CREATE VECTOR INDEX IX_Product_Embedding 
ON dbo.ProductEmbeddings (Embedding)
WITH(
    metric ='cosine',type='diskANN',
    dimensions =1536,
    build_probe_count =20
-- 构建时的探测数量
);
-- 使用向量索引的查询(优化器自动选择)
SELECT TOP 10
    ProductID,
    ProductName,
    VECTOR_DISTANCE('cosine', Embedding,@searchVectorAS Similarity
FROM dbo.ProductEmbeddings
ORDER BY Similarity;

DiskANN的优势

  • 将向量索引存储在磁盘而非内存,支持百亿级向量

  • 构建速度快,支持增量更新

  • 微软内部用于Outlook邮件搜索、Bing搜索等场景

2.4 混合搜索:向量 + 传统过滤

SQL Server 2025支持将向量搜索与传统关系查询结合:

sql

-- 混合搜索:语义相似 + 价格过滤 + 类别过滤
DECLARE @searchVector VECTOR(1536, float32)='[0.015, -0.018, ...]';
SELECT
    p.ProductID,
    p.ProductName,
    p.Price,
    c.CategoryName,
    VECTOR_DISTANCE('cosine', pe.Embedding,@searchVectorAS SemanticScore
FROM dbo.Products p
INNER JOIN dbo.ProductEmbeddings pe ON p.ProductID = pe.ProductID
INNER JOIN dbo.Categories c ON p.CategoryID = c.CategoryID
WHERE p.Price BETWEEN 50 AND 200 AND c.CategoryName ='Electronics' AND VECTOR_DISTANCE('cosine', pe.Embedding,@searchVector)<0.5
ORDER BY SemanticScore;

【第三部分】外部AI模型调用:sp_invoke_external_rest_endpoint

3.1 功能概述

sp_invoke_external_rest_endpoint
是SQL Server 2025中最强大的AI集成功能之一,允许从T-SQL直接调用外部REST API服务。这一功能此前仅在Azure SQL Database中可用,现在已下放到本地SQL Server 2025。

核心价值

  • 无需中间层,直接在数据库层调用AI服务

  • 支持Azure OpenAI、Ollama、NVIDIA NIM等多种AI服务

  • 可在存储过程、触发器中集成AI能力

3.2 配置外部模型

在调用外部模型之前,需要在SQL Server中将其注册为一等实体:

sql

-- 注册外部模型(使用CREATE EXTERNAL MODEL)
CREATE EXTERNAL MODEL AzureGPT4o WITH(
    MODEL_TYPE ='OPENAI',
    ENDPOINT ='https://your-resource.openai.azure.com/openai/deployments/gpt-4o/chat/completions',
    API_KEY ='your-api-key');
-- 注册本地Ollama模型
CREATE EXTERNAL MODEL LocalLlama3
WITH(
    MODEL_TYPE ='OLLAMA',
    ENDPOINT ='http://localhost:11434/api/generate',
    MODEL_NAME ='llama3');

3.3 实战案例:AI生成产品描述

这是一个完整的AI集成示例,展示如何使用Azure OpenAI为产品生成描述:

步骤1:准备产品和描述表

sql

-- 创建产品表和描述表
CREATE TABLE dbo.Products (
    ProductID INT PRIMARY KEY,
    ProductName NVARCHAR(200),
    CategoryID INT,
    Brand NVARCHAR(100),
    Color NVARCHAR(50),
    Gender NVARCHAR(20),
    Season NVARCHAR(20),
    Price DECIMAL(10,2),
    Currency NVARCHAR(3));
CREATE TABLE dbo.ProductDescriptions (
    ProductID INTPRIMARYKEY,
    Description NVARCHAR(MAX),
    GeneratedDate DATETIME2 DEFAULT GETDATE(),Language NVARCHAR(10));

步骤2:创建存储过程调用AI生成描述

sql

CREATE OR ALTER PROCEDURE dbo.GenerateProductDescription 
@ProductID INT,
@ApiKey NVARCHAR(200),
@EndpointUrl NVARCHAR(500),
@Language NVARCHAR(20)='English'
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ProductData NVARCHAR(MAX);
DECLARE @Prompt NVARCHAR(MAX);
DECLARE @Payload NVARCHAR(MAX);
DECLARE @Response NVARCHAR(MAX);
DECLARE @Description NVARCHAR(MAX);
-- 1. 获取产品数据
SELECT @ProductData=(SELECT
            p.ProductName,
            c.CategoryName,
            p.Brand,
            p.Color,
            p.Gender,
            p.Season,
            p.Price,
            p.Currency
FROM dbo.Products p
INNER JOIN dbo.Categories c ON p.CategoryID = c.CategoryID
WHERE p.ProductID =@ProductID
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER);
-- 2. 构建提示词
SET @Prompt='Generate a compelling product description for the following product.
         Use a persuasive marketing tone. The description should be ' +@Language+'.
        Product details: ' +@ProductData;
-- 3. 构建API请求载荷
SET @Payload= JSON_OBJECT('messages': JSON_ARRAY(
            JSON_OBJECT('role''user','content'@Prompt)),'max_tokens'500,'temperature'0.7);
-- 4. 调用AI模型
EXEC sp_invoke_external_rest_endpoint
@url=@EndpointUrl,
@method='POST',
@headers= JSON_OBJECT('api-key'@ApiKey,'Content-Type''application/json'),
@payload=@Payload,
@response=@Response OUTPUT;
-- 5. 从响应中提取描述
SET @Description= JSON_VALUE(@Response,'$.choices[0].message.content');
-- 6. 存储生成的描述
MERGE dbo.ProductDescriptions AS target
USING(VALUES(@ProductID,@Description,@Language)AS source (ProductID, Description,Language)
ON target.ProductID = source.ProductID AND target.Language= source.Language
WHEN MATCHED THEN UPDATE SET Description = source.Description, GeneratedDate = GETDATE()
WHEN NOT MATCHED THEN INSERT(ProductID, Description,Language)
VALUES(source.ProductID, source.Description, source.Language);
-- 7. 返回结果
SELECT @Description AS GeneratedDescription;
END;

步骤3:执行调用

sql

-- 为产品ID=2354生成英文描述
EXEC dbo.GenerateProductDescription 
@ProductID=2354,
@ApiKey='your-openai-api-key',
@EndpointUrl='https://your-resource.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-15-preview',
@Language='English';
-- 生成中文描述
EXEC dbo.GenerateProductDescription
@ProductID=2354,
@ApiKey='your-openai-api-key',
@EndpointUrl='https://your-resource.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-02-15-preview',
@Language='Chinese';

示例输出(针对紫红色泳裤产品):

"Make a bold splash this summer with these vibrant magenta swim shorts from River Island. Designed for the modern man, they combine style and comfort, ensuring you stand out at the beach or poolside. Don't just swim—make a statement. Grab yours now and own the summer vibe!"

3.4 与NVIDIA NIM集成

NVIDIA NIM提供了GPU加速的AI模型推理服务,SQL Server 2025可直接调用:

sql

-- 注册NVIDIA NIM端点
CREATE EXTERNAL MODEL NemotronEmbed
WITH(
    MODEL_TYPE ='OPENAI',
-- NIM兼容OpenAI API
    ENDPOINT ='http://nim-container:8000/v1/embeddings',
    API_KEY ='not-required-for-local');
-- 使用NIM生成嵌入
DECLARE @embedding VECTOR(1024, float32);
EXEC dbo.AI_GENERATE_EMBEDDINGS 
@model='NemotronEmbed',
@text='Product description here',
@embedding=@embedding OUTPUT;

【第四部分】本地AI模型:Ollama集成与数据隐私

4.1 为什么选择本地模型

对于处理敏感数据的企业,将数据发送到云端AI服务可能存在合规风险。SQL Server 2025支持通过Ollama集成本地AI模型,实现完全离线、数据不离开网络边界的AI能力。

本地模型 vs 云端模型对比

维度
云端模型(Azure OpenAI)
本地模型(Ollama)
数据隐私
数据发送到云端
数据完全不离开本地
网络要求
需要互联网
完全离线可用
延迟
网络延迟
硬件决定(GPU加速)
模型选择
微软托管
开源模型任意选择
成本
API调用费用
硬件成本+电费
合规性
需评估数据跨境
满足严格合规要求

4.2 Ollama安装与配置

Ollama是一个开源的本地模型运行工具,支持Llama 3、Mistral、Phi-3、Gemma等主流模型。

Windows安装步骤

powershell

# 1. 下载Ollama Windows安装程序
# 访问 https://ollama.com/download/windows
# 2. 运行OllamaSetup.exe完成安装
# 3. 验证安装ollama --version
# 4. 下载模型(首次需要联网,之后可离线)
ollama pull llama3.2:3b  
# 轻量模型,适合CPU运行
ollama pull mistral:7b   
# 平衡性能和准确性
ollama pull phi3:mini    
# 微软小模型,效率高
# 5. 运行模型
ollama run llama3.2:3b

Linux/Ubuntu部署(推荐生产环境)

bash

# 使用Docker部署Ollama(推荐)
docker run -d--gpus all \
-v ollama:/root/.ollama \
-p11434:11434 \
--name ollama \
  ollama/ollama
# 拉取模型
docker exec-it ollama ollama pull llama3.2:3b
# 验证API
curl http://localhost:11434/api/generate -d'{  "model": "llama3.2:3b",  "prompt": "Hello"}'

4.3 SQL Server调用Ollama

sql

-- 创建调用Ollama的存储过程
CREATE OR ALTER PROCEDURE dbo.CallLocalLLM
@Prompt NVARCHAR(MAX),
@Response NVARCHAR(MAX) OUTPUT 
AS
BEGIN
DECLARE @Payload NVARCHAR(MAX);
DECLARE @Url NVARCHAR(500)='http://localhost:11434/api/generate';
SET @Payload= JSON_OBJECT('model''llama3.2:3b','prompt'@Prompt,'stream''false');
EXEC sp_invoke_external_rest_endpoint@url=@Url,@method='POST',@payload=@Payload,@response=@Response OUTPUT;
-- 提取响应内容
SET @Response= JSON_VALUE(@Response,'$.response');
END;

4.4 本地模型+RAG:私有数据分析

一个强大的应用场景是将本地模型与SQL Server中的专有数据结合,构建私有的RAG应用:

实现思路

  1. 使用嵌入模型将业务数据向量化,存储在SQL Server中

  2. 用户提问时,将问题转为向量,搜索最相关的数据

  3. 将相关数据作为上下文,调用本地LLM生成回答

  4. 整个过程不离开企业网络边界,确保数据安全

【第五部分】RAG应用构建实战

5.1 RAG架构概述

检索增强生成(RAG)是目前企业AI应用的主流架构。SQL Server 2025的向量能力使其成为RAG应用的理想数据平台。

5.2 完整示例:T-SQL助手

这是一个基于SQL Server 2025向量功能构建的T-SQL脚本助手示例:

步骤1:创建脚本表和向量存储

sql

-- 创建脚本存储表
CREATE TABLE dbo.TSQLScripts (
    ScriptID INT IDENTITY PRIMARY KEY,
    ScriptPath NVARCHAR(500),
    ScriptName NVARCHAR(200),
    ScriptContent NVARCHAR(MAX),
    ChunkNumber INT,
    ChunkContent NVARCHAR(MAX),
    Embedding VECTOR(1024, float32)
-- 1024维向量
);
-- 创建向量索引(百万级数据时使用)
CREATE VECTOR INDEX IX_TSQLScripts_Embedding 
ON dbo.TSQLScripts (Embedding)
WITH(metric ='cosine',type='diskANN', dimensions =1024);

步骤2:生成并存储嵌入

python

# Python脚本:使用SentenceTransformers生成嵌入并存入SQL Server
from sentence_transformers 
import SentenceTransformer
import pymssql
# 加载嵌入模型
model = SentenceTransformer('mixedbread-ai/mxbai-embed-large-v1')
# 连接SQL Server
conn = pymssql.connect(server='localhost', database='AIWorkshop')cursor = conn.cursor()
# 读取脚本内容并生成嵌入
cursor.execute("SELECT ScriptID, ChunkContent FROM dbo.TSQLScripts WHERE Embedding IS NULL")
rows = cursor.fetchall()
for script_id, content in rows:
    embedding = model.encode(content).tolist()
    embedding_str ='['+','.join(map(str, embedding))+']'
    cursor.execute("UPDATE dbo.TSQLScripts SET Embedding = %s WHERE ScriptID = %d",(embedding_str, script_id))
    conn.commit()

步骤3:相似度搜索存储过程

sql

CREATE OR ALTER PROCEDURE dbo.SearchTSQLScripts @UserQuestion NVARCHAR(500),@TopN INT=5ASBEGIN
-- 注意:嵌入生成在应用层完成,此处接收已生成的向量
-- 实际实现中,可以在SQL中调用AI_GENERATE_EMBEDDINGS(需预览功能)
DECLARE @QuestionEmbedding VECTOR(1024, float32)@UserQuestionEmbedding;
SELECT TOP(@TopN)
        ScriptName,
        ChunkContent,
        VECTOR_DISTANCE('cosine', Embedding,@QuestionEmbeddingAS SimilarityScore
FROM dbo.TSQLScripts
ORDER BY SimilarityScore;
END;

5.3 与LangChain集成

SQL Server 2025与LangChain等AI开发框架深度集成:

python

from langchain.vectorstores 
import SQLServerVectorStore
from langchain.embeddings 
import OpenAIEmbeddings
# 使用SQL Server作为向量存储
vector_store = SQLServerVectorStore(
    connection_string="mssql+pyodbc://...",
    table_name="ProductEmbeddings",
    embedding_function=OpenAIEmbeddings(),
    vector_dimensions=1536)
# 相似度搜索
results = vector_store.similarity_search_with_score("comfortable running shoes for marathon",    k=5)

【第六部分】嵌入生成与文本分块

6.1 AI_GENERATE_EMBEDDINGS

SQL Server 2025预览版提供了原生嵌入生成功能:

sql

-- 使用AI_GENERATE_EMBEDDINGS生成嵌入(需预览功能)
DECLARE@embedding VECTOR(1536, float32);
EXEC dbo.AI_GENERATE_EMBEDDINGS @model='azure-openai-embedding',@text='SQL Server 2025 AI features',@embedding=@embedding OUTPUT;

6.2 AI_GENERATE_CHUNKS

对于长文档,需要先进行文本分块:

sql

-- 文本分块示例
DECLARE @chunks TABLE(ChunkNumber INT, ChunkContent NVARCHAR(MAX));
INSERT INTO @chunks
EXEC dbo.AI_GENERATE_CHUNKS @text=@LongDocument,@chunk_size=1000,
-- 字符数
@overlap=200;
-- 重叠字符数
-- 为每个分块生成嵌入并存储

【第七部分】AI集成的安全与治理

7.1 企业级安全考量

SQL Server 2025在提供AI能力的同时,也注重安全性:

安全层面
能力
说明
数据隐私
本地模型支持
敏感数据可不离开网络边界
访问控制
RLS、TDE
限制哪些用户可以调用AI功能
加密通信
TLS 1.3
调用外部API时端到端加密
审计
SQL Server审计
记录所有AI模型调用
模型治理
CREATE EXTERNAL MODEL
集中管理允许的模型

7.2 最小权限配置

sql

-- 创建专用角色,限制AI功能访问
CREATE ROLE AIExecutor;
-- 授予调用外部端点的权限
GRANT EXECUTE ON dbo.GenerateProductDescription TO AIExecutor;
GRANT EXECUTE ON dbo.CallLocalLLM TO AIExecutor;
-- 禁止直接调用sp_invoke_external_rest_endpoint
DENY EXECUTE ON sys.sp_invoke_external_rest_endpoint TO public;

【第八部分】本章小结

核心知识点速查

功能
核心语法
适用场景
状态
VECTOR数据类型
VECTOR(n, float32)
存储嵌入
预览
VECTOR_DISTANCE
VECTOR_DISTANCE('cosine', v1, v2)
向量相似度
预览
DiskANN索引
CREATE VECTOR INDEX
大规模向量搜索
预览
sp_invoke_external_rest_endpoint
EXEC sp_invoke_external_rest_endpoint
调用外部AI
GA
CREATE EXTERNAL MODEL
CREATE EXTERNAL MODEL
注册AI模型
预览
AI_GENERATE_EMBEDDINGS
EXEC AI_GENERATE_EMBEDDINGS
生成嵌入
预览
AI_GENERATE_CHUNKS
EXEC AI_GENERATE_CHUNKS
文本分块
预览
Ollama集成
sp_invoke_external_rest_endpoint
 + 本地端点
本地AI
生产就绪

AI功能选型决策树

最佳实践清单

  1. 预览功能:生产环境等待正式版,测试环境可提前验证

  2. 嵌入模型选择:根据语言和精度需求选择(OpenAI 1536维,本地模型1024维)

  3. 向量索引:百万级以上数据使用DiskANN,小数据集可直接计算

  4. 混合搜索:结合传统过滤和向量搜索,提高相关性

  5. 本地模型:敏感数据场景优先考虑Ollama + 本地LLM

  6. 安全审计:记录所有AI模型调用,满足合规要求

  7. 成本优化:本地模型无API调用费,适合高频场景

【下期预告】

第11期:安全与治理——Microsoft Entra、数据保护、合规

我们将深入:

  • Microsoft Entra ID集成与托管身份

  • 透明数据加密(TDE)增强

  • 行级安全(RLS)与动态数据脱敏

  • SQL Server审计与合规报告

  • AI应用的安全治理框架


*本文为学习笔记,内容基于《SQL Server 2025 Unveiled:The Enterprise AI-Ready Database with Microsoft Fabric Integration》第7、8章及相关技术社区资料(dbi services、NVIDIA开发者博客、SQL Authority、Argon Systems、SQLBits 2026等)提炼总结,作者Bob Ward,Apress出版,2026年。*


文章转载自绩隐金,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论