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 を構築し、フォローアップの質問とデータとの自然な対話を可能にします。
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 アプリケーション開発を高速化します。
GitHub Copilot で Visual Studio Code に MSSQL 拡張機能を使用する
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;
AI 機能で Entity Framework Core を使用する
Entity Framework Core を使用して、SQL Server を使用して AI アプリケーションを構築できます。 生の SQL クエリを使用して、SQL Server の VECTOR データ型と AI 関数を操作できます。
Entity Framework Core では VECTOR データ型がネイティブにサポートされていないため、この例では、EF Core の非同期操作とオブジェクト マッピングの恩恵を受けながら、 FromSqlRaw を使用して T-SQL を直接実行します。 このメソッドは、クエリの埋め込みを 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 アーキテクチャを示しています。
ファブリック ミラーリングの構成
ファブリック ミラーリングは、ビジュアル インターフェイスを使用して Microsoft Fabric ポータルを使用して構成されます。 ミラーリング機能は、データを継続的に Delta Lake 形式で Fabric の OneLake にレプリケートし、運用ワークロードに影響を与えることなく分析に使用できるようにします。
注
詳細な構成手順については、「 チュートリアル: SQL Server から Microsoft 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 アプリケーションにとって重要です。
次の例では、2 つの主要な最適化手法を示します。特定のデータ サブセット (製品カテゴリなど) を対象とするフィルター 処理されたベクター インデックス を作成し、 クエリ ヒント を使用して実行動作を制御します。
フィルター選択されたインデックス idx_electronics_embedding は、関連するベクトルのみをインデックス化し、検索領域を減らし、クエリ速度を向上させることで、Electronics カテゴリ内の検索を高速化します。
MAXDOP 4 ヒントは並列処理を 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 機能を使用することで、セキュリティ、パフォーマンス、信頼性に関するエンタープライズ標準を維持しながら、実際のビジネス価値を実現する運用対応アプリケーションを構築、展開、運用できます。