この記事では、OpenAI やベクターなどの人工知能 (AI) オプションを使用して、SQL ServerとAzure SQL Managed InstanceでSQL データベース エンジンを使用してインテリジェント なアプリケーションを構築する方法の概要について説明します。
Fabric の Azure SQL Database および SQL データベースに関しては、知能アプリケーションと AIをご覧ください。
サンプルと例については、 SQL AI サンプル リポジトリを参照してください。
概要
大規模言語モデル (LLM) を使用すると、開発者は使い慣れたユーザー エクスペリエンスで AI を利用したアプリケーションを作成できます。
アプリケーションで LLM を使用すると、モデルがアプリケーションのデータベースから適切なデータに適切なタイミングでアクセスできる場合に、価値が高くなり、ユーザー エクスペリエンスが向上します。 このプロセスは、取得拡張生成 (RAG) と呼ばれ、SQL データベース エンジンには、この新しいパターンをサポートする多くの機能があり、インテリジェントなアプリケーションを構築するための優れたデータベースになります。
次のリンクは、インテリジェント なアプリケーションを構築するためのさまざまなオプションのサンプル コードを示しています。
| AI オプション | Description |
|---|---|
| SQL MCP Server | 一連のツールと構成を定義する、データベースの安定した管理インターフェイス。 |
| Azure OpenAI | RAG の埋め込みを生成し、Azure OpenAI でサポートされている任意のモデルと統合します。 |
| ベクトル | ベクターを格納し、ベクター関数をデータベースで使用する方法について説明します。 |
| Azure AI 検索 | データベースをAzure AI 検索と共に使用して、データの LLM をトレーニングします。 |
| インテリジェント アプリケーション | 任意のシナリオでレプリケートできる一般的なパターンを使用して、エンド ツー エンド ソリューションを作成する方法について説明します。 |
AI アプリケーションの SQL MCP Server
SQL MCP Server は、AI エージェントのデータ パスに直接配置されます。
- モデルが要求を生成すると、サーバーはデータベースに対して安定した管理されたインターフェイスを提供します。
- 生のスキーマを公開したり、生成された SQL に依存したりする代わりに、構成に基づいて定義された一連のツールを介してすべてのアクセスがルーティングされます。
この方法では、対話が予測可能な状態に保たれ、すべての操作が定義したアクセス許可と構造に合わせて調整されます。 詳細については、「aka.ms/sql/mcp」 を参照してください。
推論を実行から分離することで、モデルは意図に重点を置き、SQL MCP Server はその意図が有効なクエリになる方法を処理します。 サーフェス領域は制約され、説明されているため、エージェントは使用可能な機能を検出し、入力と出力を理解し、推測せずに動作できます。 この設計により、エラーが軽減され、スキーマのあいまいさを補う複雑なプロンプト エンジニアリングが不要になります。
開発者にとって、このアプローチは、AI が実際のワークロードに安全に参加できることを意味します。
次のようにすることができます。
- エンティティを 1 回定義する
- ロールと制約を適用する
その後、プラットフォームは次の手順を実行します。
- エンティティ、ロール、制約を一貫して適用する
- SQL データに対するエージェント駆動型アプリケーションの信頼性の高い基盤を作成します。
REST と GraphQL を強化するのと同じ構成でも MCP が管理されるため、ルールやロジックの重複はありません。 詳細については、「aka.ms/dab/docs」 を参照してください。
Azure OpenAI を使用して RAG を実装するための主要な概念
このセクションには、SQL データベース エンジンで openAI Azure RAG を実装するために重要な主要な概念が含まれています。
検索拡張生成 (RAG)
RAG は、外部ソースから追加のデータを取得することで、関連する有益な応答を生成する LLM の機能を強化する手法です。 たとえば、RAG では、ユーザーの質問またはプロンプトに関連するドメイン固有の知識を含む記事やドキュメントに対してクエリを実行できます。 LLM は、応答を生成するときに、この取得したデータを参照として使用できます。 たとえば、SQL データベース エンジンを使用した単純な RAG パターンは次のようになります。
- テーブルにデータを挿入します。
- インスタンスをAzure AI 検索にリンクします。
- Azure OpenAI GPT-4 モデルを作成し、Azure AI 検索に接続します。
- アプリケーションとインスタンス内のデータからトレーニング済みの Azure OpenAI モデルを使用して、データに関するチャットと質問を行います。
RAG パターンは、プロンプト エンジニアリングを使用して、モデルにより多くのコンテキスト情報を提供することで応答品質を向上させる役割を果たします。 RAG を使用することで、関連する外部ソースを生成プロセスに組み込むことで、モデルがより広範なナレッジ ベースを適用できるため、より包括的で情報に基づいた応答が得られます。 grounding LLM の詳細については、「Grounding LLMs - Microsoft Community Hub」を参照してください。
プロンプトとプロンプト エンジニアリング
プロンプトは、大規模言語モデル (LLM) に対する命令として、または LLM が構築できるコンテキスト データとして機能する特定のテキストまたは情報です。 プロンプトは、質問、ステートメント、コード スニペットなど、さまざまな形式を取る可能性があります。
LLM からの応答の生成に使用できるプロンプトの例を次に示します。
- 手順: LLM にディレクティブを指定する
- 主なコンテンツ: 処理のために LLM に情報を提供します
- 例: 特定のタスクまたはプロセスに対してモデルの条件を設定する
- キュー: LLM の出力を正しい方向に向けます
- サポート コンテンツ: LLM が出力の生成に使用できる補足情報を表します
シナリオに適したプロンプトを作成するプロセスは、 プロンプト エンジニアリングと呼ばれます。 プロンプト エンジニアリングのプロンプトとベスト プラクティスの詳細については、「 プロンプト エンジニアリング手法」を参照してください。
Tokens
トークンは、入力テキストをより小さなセグメントに分割することによって生成されるテキストの小さなチャンクです。 これらのセグメントは、単語、または、1 文字から単語全体までの異なる長さを持つ文字のグループから成ります。 たとえば、 hamburger という単語は ham、 bur、 ger などのトークンに分割され、 pear のような短くて一般的な単語は 1 つのトークンと見なされます。
Azure OpenAI では、API によって入力テキストがトークン化されます。 各 API 要求で処理されるトークンの数は、入力、出力、要求パラメーターの長さなどの要因によって異なります。 また、処理されるトークンの量は、モデルの応答時間とスループットにも影響します。 各モデルには、Azure OpenAI により、1 つのリクエストとレスポンスで使用できるトークンの数に制限があります。 詳細については、「Azure AI Foundry モデルのクォータと制限に関する Azure OpenAI」を参照してください。
Vectors
ベクトルは、一部のデータに関する情報を表すことができる数値 (通常は浮動小数点数) の順序付けられた配列です。 たとえば、画像をピクセル値のベクターとして表したり、テキストの文字列を ASCII 値のベクターとして表したりできます。 データをベクターに変換するプロセスは、 ベクター化と呼ばれます。 詳細については、「ベクターの 例」を参照してください。
ベクター データの操作は、 ベクター データ型 と ベクター関数の導入により簡単です。
埋め込み
埋め込みとは、データの重要な特徴を表すベクトルです。 埋め込みは多くの場合、ディープ ラーニング モデルを使用して学習され、機械学習と AI モデルではそれらを特徴として使用します。 埋め込みでは、類似の概念間のセマンティック類似性をキャプチャすることもできます。 たとえば、単語 person と humanの埋め込みを生成する場合、単語も意味的に似ているため、それらの埋め込み (ベクター表現) が値に似ていると予想できます。
Azure OpenAI には、テキスト データから埋め込みを作成するモデルが用意されています。 このサービスは、OpenAI によって事前トレーニングされたモデルを使用して、テキストをトークンに分割し、埋め込みを生成します。 詳細については、Azure AI FoundryモデルにおけるAzure OpenAIの埋め込みの理解についてのページをご覧ください。
ベクトル検索
ベクター検索は、特定のクエリ ベクターと意味的に似たデータセット内のすべてのベクターを検索するプロセスです。 したがって、単語 human のクエリ ベクターは、意味的に類似した単語について辞書全体を検索し、 person 単語を近い一致として検索する必要があります。 この近接度 (距離) は、コサイン類似性などの類似性メトリックを使用して測定されます。 ベクトルが近いほど類似性が高くなり、それらの間の距離が小さくなります。
何百万ものドキュメントに対してクエリを実行して、データ内の最も類似したドキュメントを見つけるシナリオを考えてみましょう。 OpenAI Azure使用して、データの埋め込みを作成し、ドキュメントに対してクエリを実行できます。 次に、ベクター検索を実行して、データセットから最も類似したドキュメントを見つけることができます。 ただし、いくつかの例でベクター検索を実行するのは簡単です。 数千または数百万のデータ ポイントで同じ検索を実行することは困難になります。 また、待機時間、スループット、精度、コストなど、包括的な検索と近似最近隣 (ANN) 検索方法の間にはトレードオフがあります。 これらのトレードオフはすべて、アプリケーションの要件によって異なります。
次のセクションで説明するように、SQL データベース エンジンにベクターを効率的に格納し、クエリを実行できます。 この機能を使用すると、優れたパフォーマンスで最も近い近隣の検索を行えます。 精度と速度を決定する必要はありません。両方を持つことができます。 統合ソリューションにベクター埋め込みをデータと共に格納することで、データ同期を管理する必要性が最小限に抑え、AI アプリケーション開発の市場投入までの時間が短縮されます。
Azure OpenAI
埋め込みは、現実世界をデータとして表すプロセスです。 テキスト、画像、またはサウンドを埋め込み形式に変換できます。 Azure OpenAI モデルを使用すると、実際の情報を埋め込みに変換できます。 REST エンドポイントとしてモデルにアクセスできるため、sp_invoke_external_rest_endpoint システム ストアド プロシージャを使用して、SQL データベース エンジンからモデルを簡単に使用できます。 この手順は、SQL Server 2025 (17.x) 以降で使用でき、Azure SQL Managed Instance Always-up-to-date 更新ポリシーで構成されています。
DECLARE @retval AS INT,
@response AS NVARCHAR (MAX),
@payload AS NVARCHAR (MAX);
SET @payload = JSON_OBJECT('input':@text);
EXECUTE
@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 AS VECTOR(1536) = JSON_QUERY(@response, '$.result.data[0].embedding');
REST サービスの呼び出しを使用して埋め込みを取得することは、SQL Managed Instanceと OpenAI を操作するときに使用できる統合オプションの 1 つにすぎません。 利用可能なモデルは、SQL データベース エンジンに格納されているデータにアクセスして、次の例のように、ユーザーがデータを操作できるソリューションを作成できます。
Azure SQLと OpenAI の使用に関するその他の例については、次の記事を参照してください。この記事は、SQL ServerとAzure SQL Managed Instanceにも当てはまります。
Azure OpenAI Service (DALL-E) とAzure SQL Azure SQL
ベクターの例
専用 ベクター データ型は、ベクター データを効率的に格納し、開発者がベクターと類似性の検索の実装を合理化するのに役立つ関数のセットを含みます。 新しい VECTOR_DISTANCE 関数を使用して、1 行のコードで 2 つのベクトル間の距離を計算できます。 詳細と例については、SQL データベース エンジンVector 検索とベクター インデックス>を参照してください。
例えば次が挙げられます。
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 パターンを実装します。 Azure AI 検索を Azure OpenAI と SQL データベース エンジンと統合することで、モデルをトレーニングまたは微調整することなく、SQL データベース エンジンに格納されているデータに対してサポートされているチャット モデルを実行できます。 データに対してモデルを実行すると、データの上でチャットし、より高い精度と速度で分析できます。
Azure OpenAI と SQL データベース エンジン とのAzure AI 検索の統合の詳細については、次の記事を参照してください。 これらの記事は、SQL ServerとAzure SQL Managed Instanceにも適用されます。
- Azure OpenAI をデータ上で利用
- Azure AI 検索におけるリトリーバル拡張型生成(RAG)
Azure SQL と Azure AI 検索
インテリジェント アプリケーション
次の図に示すように、SQL データベース エンジンを使用して、レコメンダーや取得拡張生成 (RAG) などの AI 機能を含むインテリジェントなアプリケーションを構築できます。
セッション抽象をサンプル データセットとして使用して AI 対応アプリケーションを構築する方法を示すエンド ツー エンドのサンプルについては、次を参照してください。
注
LangChain 統合と Semantic Kernel 統合は、ベクターデータ型に依存します。これは、SQL Server 2025 (17.x) 以降で利用可能であり、常に最新または SQL Server 2025 更新ポリシーで構成された Azure SQL Managed Instance、Azure SQL Database、および Microsoft Fabric の SQL データベースで使用できます。
LangChain の統合
LangChain は、言語モデルを利用したアプリケーションを開発するためのよく知られたフレームワークです。 LangChain を使用して独自のデータでチャットボットを作成する方法を示す例については、次を参照してください。
- langchain-sqlserver PyPI パッケージ。
LangChain でAzure SQLを使用する例をいくつか次に示します。
エンド・ツー・エンドの例:
- Azure SQL、Langchain、Chainlit を使用して 1 時間で独自のデータを使ったチャットボットを構築: LangChain を使用して LLM 呼び出しを調整し、Chainlit を使用して UI を構築することで、RAG パターンを活用して独自のデータでチャットボットを作成します。
Semantic Kernel統合
Semantic Kernelはオープンソースの SDK で、既存のコードを呼び出すエージェントを簡単に構築できます。 拡張性の高い SDK として、OpenAI、Azure OpenAI、Hugging Face などのモデルでSemantic Kernelを使用できます。 既存の C#、Python、Java コードをこれらのモデルと組み合わせることで、質問に回答し、プロセスを自動化するエージェントを構築できます。
AI 対応ソリューションの構築に役立つSemantic Kernelの簡単な例を次に示します。
- 究極のチャットボット?: NL2SQL と RAG の両方のパターンを使用して、独自のデータでチャットボットを構築し、究極のユーザー エクスペリエンスを実現します。