次の方法で共有


インテリジェントなアプリケーションと AI

適用対象:Azure SQL DatabaseFabricのSQLデータベース

この記事では、OpenAI やベクターなどの人工知能 (AI) オプションを使用して、Azure SQL Database および Fabric SQL database の SQL データベース エンジン を使用してインテリジェント なアプリケーションを構築する方法の概要について説明します。

AI 対応アプリケーションの構築の簡単な概要については、Azure SQL Database essentials シリーズ のビデオをご覧ください。

サンプルと例については、 SQL AI サンプル リポジトリを参照してください。

概要

大規模言語モデル (LLM) を使用すると、開発者は使い慣れたユーザー エクスペリエンスで AI 搭載アプリケーションを作成できます。

アプリケーションで LLM を使用すると、モデルがアプリケーションのデータベースから適切なタイミングで、適切なデータにアクセスできる時、価値が高くなり、ユーザー エクスペリエンスが向上します。 このプロセスは、取得拡張生成 (RAG) と呼ばれます。 Azure SQL DatabaseおよびFabric SQL データベースには、この新しいパターンをサポートする多くの機能があり、インテリジェント なアプリケーションを構築するための優れたデータベースになります。

以下のリンクは、インテリジェントなアプリケーションを構築するためのさまざまなオプションのサンプル コードを示しています。

AI オプション 説明
SQL MCP Server 一連のツールと構成を定義する、データベースの安定した管理インターフェイス。
Azure OpenAI RAG の埋め込みを生成し、Azure OpenAI でサポートされている任意のモデルと統合します。
ベクトル ベクターを格納し、ベクター関数をデータベースで使用する方法について説明します。
Azure AI 検索 データベースをAzure AI 検索と共に使用して、データの LLM をトレーニングします。
インテリジェントなアプリケーション 任意のシナリオで再現できる一般的なパターンを使用して、エンド ツー エンド ソリューションを作成する方法について説明します。
Azure SQL Database の Copilot スキル Azure SQL Database駆動型アプリケーションの設計、運用、最適化、正常性を効率化するために設計された AI 支援エクスペリエンスのセットについて説明します。
Fabric SQL データベースにおける Copilot のスキル FABRIC SQL データベース駆動型アプリケーションの設計、操作、最適化、正常性を効率化するために設計された AI 支援エクスペリエンスのセットについて説明します。

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 を実装するための主要な概念

このセクションには、AZURE SQL DATABASE または FABRIC SQL データベースで Azure OpenAI を使用して RAG を実装するために重要な主要な概念が含まれています。

検索拡張生成 (RAG)

RAG は、外部ソースから追加のデータを取得することで、関連する有益な応答を生成する LLM の機能を強化する手法です。 たとえば、RAG では、ユーザーの質問またはプロンプトに関連する ドメイン 固有の知識を含む記事やドキュメントに対してクエリを実行できます。 LLM は、その応答を生成するときに、この取得したデータをリファレンスとして使用できます。 たとえば、Azure SQL Databaseを使用する単純な RAG パターンは次のようになります。

  1. データをテーブルに挿入します。
  2. Azure SQL DatabaseをAzure AI 検索にリンクします。
  3. Azure OpenAI GPT-4 モデルを作成し、Azure AI 検索に接続します。
  4. アプリケーションと Azure SQL Database のトレーニング済みの Azure OpenAI モデルを使用して、データに関するチャットや質問を行います。

RAG パターンは、プロンプト エンジニアリングと共に、モデルにより多くのコンテキスト情報を提供することで応答品質を向上させます。 RAG を使用することで、関連する外部ソースを生成プロセスに組み込むことで、モデルがより広範なナレッジ ベースを適用できるため、より包括的で情報に基づいた応答が得られます。 grounding LLM の詳細については、「Grounding LLMs - Microsoft Community Hub」を参照してください。

プロンプトとプロンプト エンジニアリング

プロンプトは、大規模言語モデル (LLM) に対する命令として、または LLM が構築できるコンテキスト データとして機能する特定のテキストまたは情報です。 プロンプトは、質問、ステートメント、コード スニペットなど、さまざまな形式を取る可能性があります。

LLM からの応答の生成に使用できるプロンプトの例を次に示します。

  • 命令: LLM に対しディレクティブを提供します
  • プライマリ コンテンツ: 処理のために LLM に情報を提供します
  • : 特定のタスクまたはプロセスにモデルを条件付けするのに役立ちます
  • キュー: LLM の出力を正しい方向に方向付けます
  • サポート コンテンツ: LLM が出力の生成に使用できる補足情報を表します

シナリオに適したプロンプトを作成するプロセスは、プロンプト エンジニアリングと呼ばれます。 プロンプトエンジニアリングのプロンプトとベスト プラクティスの詳細については、「Azure OpenAI Serviceを参照してください。

トークン

トークンは、入力テキストをより小さなセグメントに分割することによって生成されるテキストの小さなチャンクです。 これらのセグメントは、単語、または、1 文字から単語全体までの異なる長さを持つ文字のグループから成ります。 たとえば、 hamburger という単語は hamburger などのトークンに分割され、 pear のような短くて一般的な単語は 1 つのトークンと見なされます。

Azure OpenAI では、API によって入力テキストがトークン化されます。 各 API 要求で処理されるトークンの合計数は、入力、出力、および要求パラメーターの長さによって異なります。 処理されるトークンの量は、モデルの応答時間とスループットにも影響します。 各モデルには、Azure OpenAI により、1 つのリクエストとレスポンスで使用できるトークンの数に制限があります。 詳細については、「Azure OpenAI Service クォータと制限を参照してください。

ベクトル

ベクトルは、一部のデータに関する情報を表すことができる数値 (通常は浮動小数点数) の順序付けられた配列です。 たとえば、画像をピクセル値のベクターとして表したり、テキストの文字列を ASCII 値のベクターとして表したりできます。 データをベクトルに変換するプロセスを「ベクター化」と呼びます。 詳細については、「ベクターの 」を参照してください。

ベクター データの操作は、 ベクター データ型ベクター関数の導入により簡単です。

埋め込み

埋め込みは、データの重要な特徴量を表すベクトルです。 埋め込みは多くの場合、ディープ ラーニング モデルを使用して学習され、機械学習と AI モデルではそれらを特徴として使用します。 埋め込みでは、同様の概念間のセマンティック類似性を把握することもできます。 たとえば、単語 personhumanの埋め込みを生成する場合、単語も意味的に似ているため、それらの埋め込み (ベクター表現) が値に似ていると予想できます。

Azure OpenAI には、テキスト データから埋め込みを作成するモデルが用意されています。 このサービスは、OpenAI によって事前トレーニングされたモデルを使用して、テキストをトークンに分割し、埋め込みを生成します。 詳細については、「Azure OpenAI を使用した埋め込みの作成を参照してください。

ベクトルと埋め込みについてよく寄せられる質問に対する回答の一覧については、次を参照してください。

ベクター検索は、特定のクエリ ベクターと意味的に似たデータセット内のすべてのベクターを検索するプロセスです。 したがって、単語 human のクエリ ベクターは、意味的に類似した単語について辞書全体を検索し、 person 単語を近い一致として検索する必要があります。 コサイン類似性などの類似度メトリックは、この近接度または距離を測定します。 ベクトルが近いほど類似性が高くなり、それらの間の距離が小さくなります。

何百万ものドキュメントに対してクエリを実行して、データ内の最も類似したドキュメントを見つけるシナリオを考えてみましょう。 OpenAI Azure使用して、データの埋め込みを作成し、ドキュメントに対してクエリを実行できます。 次に、ベクトル検索を実行して、データセットから最も類似したドキュメントを見つけることができます。 ただし、少数の例に対しベクトル検索を実行するのは簡単です。 この同じ検索を数千または数百万のデータ ポイントに対して実行することは困難になります。 また、待機時間、スループット、精度、コストなど、包括的な検索と近似最近隣 (ANN) 検索方法の間にはトレードオフがあります。 これらのトレードオフはすべて、アプリケーションの要件によって異なります。

Azure SQL Databaseにベクターを効率的に格納してクエリを実行できるため、パフォーマンスに優れた正確なニアレスト ネイバー検索が可能になります。 精度と速度のどちらか一方を犠牲にする必要は無く、両方を実現できます。 統合ソリューションにデータと共にベクトル埋め込みを格納することで、データ同期を管理する必要性が最小限に抑えられ、AI アプリ開発の市場投入までの時間が短縮されます。

ベクターと埋め込みの詳細については、次を参照してください。

Azure OpenAI

埋め込みは、現実世界をデータとして表すプロセスです。 テキスト、画像、またはサウンドを埋め込み形式に変換できます。 Azure OpenAI モデルを使用すると、実際の情報を埋め込みに変換できます。 REST エンドポイントとしてモデルにアクセスできるため、sp_invoke_external_rest_endpoint システム ストアド プロシージャを使用してAzure SQL Databaseから簡単に使用できます。

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;

SELECT CAST([key] AS INT) AS [vector_value_id],
    CAST([value] AS FLOAT) AS [vector_value]
FROM OPENJSON(JSON_QUERY(@response, '$.result.data[0].embedding'));

REST サービスの呼び出しを使用して埋め込みを取得することは、SQL Database と OpenAI を連携するときに有する統合オプションの 1 つに過ぎません。 次の例のように、利用可能なモデルAzure SQL Databaseに格納されているデータにアクセスして、ユーザーがデータを操作できるソリューションを作成できます。

Azure SQL Database に格納されているデータを使用して質問に回答する AI ボットのスクリーンショット

SQL Database と OpenAI の使用に関するその他の例については、次の記事を参照してください。

ベクターの例

専用 のベクター データ型を使用すると、ベクター データの効率的で最適化された格納が可能になります。 開発者がベクトルと類似性検索の実装を合理化するのに役立つ一連の関数が付属しています。 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 SQL DatabaseとAzure AI 検索を使用して RAG パターンを実装します。 Azure OpenAI および Azure SQL Database とのAzure AI 検索の統合により、モデルをトレーニングまたは微調整することなく、Azure SQL Databaseに格納されているデータに対してサポートされているチャット モデルを実行できます。 データに対してモデルを実行することで、より高い精度と速度でデータの上にチャットし、分析することができます。

インテリジェントなアプリケーション

次の図に示すように、Azure SQL Databaseを使用して、レコメンダーや取得拡張生成 (RAG) などの AI 機能を含むインテリジェントなアプリケーションを構築できます。

 Azure SQL Database を使用してインテリジェントなアプリケーションを構築するためのさまざまな AI 機能のダイアグラム

セッション抽象をサンプル データセットとして使用して AI 対応アプリケーションを構築するエンド ツー エンドのサンプルについては、次を参照してください。

インテリジェント アプリケーションの詳細については、次を参照してください。

LangChain の統合

LangChain は、言語モデルを搭載したアプリケーションを開発するための有名なフレームワークです。 LangChain を使用して独自のデータにチャットボットを作成する方法を示す例については、次を参照してください。

LangChain でのAzure SQLの使用に関するいくつかのサンプル:

エンド ツー エンドの例:

Semantic Kernel統合

Semantic Kernelはオープンソースの SDK で、既存のコードを呼び出すエージェントを簡単に構築できます。 拡張性の高い SDK として、OpenAI、Azure OpenAI、Hugging Face などのモデルでSemantic Kernelを使用できます。 既存の C#、Python、Java コードをこれらのモデルと組み合わせることで、質問に回答し、プロセスを自動化するエージェントを構築できます。

AI 対応ソリューションの構築に役立つSemantic Kernelを簡単に示す例を次に示します。

  • 究極のチャットボット?: NL2SQL と RAG の両方のパターンを使用して独自のデータでチャットボットを構築し、究極のユーザー エクスペリエンスを実現します。

Azure SQL Database における Microsoft Copilot のスキル

Azure SQL Database (プレビュー) のMicrosoft Copilotは、Azure SQL Database駆動型アプリケーションの設計、運用、最適化、正常性を合理化するように設計された AI 支援エクスペリエンスのセットです。

Copilotは、ユーザーの質問に関連する回答を提供し、データベース コンテキスト、ドキュメント、動的管理ビュー、クエリ ストア、その他のナレッジ ソースを使用してデータベース管理を簡素化します。 次に例を示します。

  • データベース管理者は、データベースを独力で管理して問題を解決したり、データベースのパフォーマンスや機能をより詳細に把握したりできます。
  • 開発者は、テキストまたは会話の場合と同様にデータについて質問して、T-SQL クエリを生成することができます。 開発者は、生成されたクエリの詳細な説明によって、クエリをより速く記述する方法を習得することもできます。

Azure SQL DatabaseのMicrosoft Copilotスキルは現在、限られた数の早期導入者に対してプレビュー段階にあります。 このプログラムにサインアップするには、Azure SQL Database: Preview の Request Access to Copilotにアクセスしてください。

Fabric SQL データベースのMicrosoft Copilot (プレビュー)

Microsoft FabricCopilotには>次の機能を備えた統合 AI 支援が含まれています。

  • Code completion: SQLクエリエディターでT-SQLを書き始めると、Copilotがクエリの完了を助けるコード候補を自動生成します。 Tab キーを押してコード候補を受け入れるか、入力を続けて無視します。

  • クイック アクション: SQL クエリ エディターのリボンにある [修正][説明] オプションがクイック アクションです。 SQL クエリを強調表示し、クイック アクション ボタンのいずれかを選択して、選択したアクションをクエリに対して実行します。

    • Fix: Copilot は、エラー メッセージが発生した場合にコード内のエラーを修正します。 エラー シナリオには、不適切な T-SQL コードやサポートされていない T-SQL コード、間違ったスペルなどが含まれる場合があります。 Copilotには、変更を説明し、SQL のベスト プラクティスを提案するコメントも用意されています。

    • Explain: Copilot では、SQL クエリとデータベース スキーマの自然言語の説明がコメント形式で提供されます。

  • チャット ウィンドウ: チャット ウィンドウを使用して、自然言語でCopilotする質問をします。 Copilotは、質問に基づいて生成された SQL クエリまたは自然言語で応答します。

    • 自然言語から SQL: プレーン テキストのリクエストから T-SQL コードを生成し、質問の提案を得ることで、ワークフローを高速化できます。

    • ドキュメントベースの Q&A: Copilotに一般的なSQLデータベース機能について質問すると、自然言語で回答が得られます。 Copilotは、要求に関連するドキュメントを見つけるのにも役立ちます。

SQL データベースのCopilotでは、テーブルとビューの名前、列名、主キー、外部キーのメタデータを使用して T-SQL コードを生成します。 SQL データベースのCopilotでは、テーブル内のデータを使用して T-SQL 候補が生成されることはありません。