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