適用対象: SQL Server 2025 (17.x) プレビュー
AI_GENERATE_EMBEDDINGS
は、データベースに格納されている事前に作成された AI モデル定義を使用して埋め込み (ベクター配列) を作成する組み込み関数です。
構文
AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )
論争
ソース
任意の文字型の 式 ( 例: nvarchar、 varchar、 nchar、 char)。
model_identifier
埋め込みベクター配列の作成に使用される型として定義された EMBEDDING
の名前。
詳細については、「 CREATE EXTERNAL MODEL」を参照してください。
optional_json_request_body_parameters
有効な JSON 形式の追加パラメーターの一覧。 これらのパラメーターは、 EXTERNAL MODEL
のエンドポイントの場所に送信される前に、REST 要求メッセージ本文に追加されます。 これらのパラメーターは、 EXTERNAL MODEL
のエンドポイントがサポートし、受け入れる内容に依存しません。
戻り値の型
AI_GENERATE_EMBEDDINGS
は、JSON として返される生成された埋め込みベクター配列である行を持つ単一列テーブルを返します。
戻り値の形式
返される JSON の形式は次のとおりです。
[
0.0023929428,
0.00034713413,
-0.0023142276,
-0.025654867,
-0.011492423,
0.0010358924,
-0.014836246,
0.0035484824,
0.000045630233,
-0.027581815,
0.023816079,
0.005012586,
-0.027732948,
-0.010088143,
...
-0.014571763
]
注釈
[前提条件]
AI_GENERATE_EMBEDDINGS
を使用するには、次の 2 つの前提条件を満たす必要があります。
sp_invoke_external_endpoint
は、 sp_configureを使用してデータベースで有効にする必要があります。
省略可能なパラメーター
optional_json_request_body_parameters
内のパラメーター AI_GENERATE_EMBEDDINGS
は、埋め込み要求メッセージの本文にエンドポイント パラメーターを追加する必要がある場合に使用されます。 省略可能なパラメーターを追加すると、そのパラメーターがモデル定義で定義されている場合、実行時に値がオーバーライドされます。
たとえば、 EXTERNAL MODEL に 1536 に設定 dimensions
のパラメーターが含まれている場合は、実行時に optional_json_request_body_parameters
で新しい値を指定してパラメーターを渡します。 json_object('dimensions':755)
、モデルの dimensions
パラメーターはオーバーライドされます。
optional_json_request_body_parameters
に渡される値は有効な JSON である必要があります。
埋め込みエンドポイントを作成する
埋め込みエンドポイントの作成の詳細については、 Azure OpenAI、 OpenAI、または Ollama のプロセスを確認してください。
拡張イベント (XEvent)
AI_GENERATE_EMBEDDINGS
には、トラブルシューティング用に有効にできる拡張イベント (ai_generate_embeddings_summary
) があります。 これには、状態コード、発生したエラー、使用されるモデル名、埋め込みエンドポイントで使用されるトークン数など、REST 要求と応答に関する情報が含まれています。 拡張イベント external_rest_endpoint_summary
には、REST 要求のトラブルシューティングとデバッグに使用できる追加情報が含まれています。
例示
A。 SELECT ステートメントを使用して埋め込みを作成する
次の例は、ベクター配列の結果を返す select ステートメントで AI_GENERATE_EMBEDDINGS
関数を使用する方法を示しています。
SELECT id,
AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel)
FROM myTable;
B. AI_GENERATE_CHUNKSを使用して SELECT ステートメントで埋め込みを作成する
次の例では、AI_GENERATE_EMBEDDINGS
関数と共に AI_GENERATE_CHUNKS
関数を使用して、ベクター配列の結果を返す select ステートメントを使用して、指定したチャンク サイズで分割されたテキストを渡す方法を示します。
SELECT
id,
title,
large_text,
AI_GENERATE_EMBEDDINGS(c.chunk_text USE MODEL MyAzureOpenAiModel)
FROM
myTable
CROSS APPLY
AI_GENERATE_CHUNKS(source = large_text, chunk_type = N'FIXED' , chunk_size = 10) c;
C. テーブルの更新を使用して埋め込みを作成する
次の例は、テーブル更新ステートメントで AI_GENERATE_EMBEDDINGS
関数を使用して、ベクター配列の結果をベクター データ型の列に返す方法を示しています。
UPDATE t
SET myEmbeddings = AI_GENERATE_EMBEDDINGS(t.text USE MODEL MyAzureOpenAiModel)
FROM myTable AS t;
D. SELECT ステートメントと PARAMETERS を使用して埋め込みを作成する
次の例は、select ステートメントで AI_GENERATE_EMBEDDINGS
関数を使用し、オプションのパラメーターをエンドポイントに渡す方法を示しています。これは、ベクター配列の結果を返します。
SELECT id,
AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS '{"dimensions" : 768 }')
FROM myTable;
E. チャンク、AI_GENERATE_EMBEDDINGS、モデルの作成を含む完全な例
この例は、 CREATE EXTERNAL MODEL の作成、 AI_GENERATE_EMBEDDINGS
の使用、 AI_GENERATE_CHUNKSを使用 した ベクター データ型のテーブルへの結果の挿入からの完全なフローです。
<password>
を有効なパスワードに置き換えることを忘れないでください。
-- Turn external REST endpoint invocation ON in the database
EXECUTE sp_configure 'external rest endpoint enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO
-- Create a master key for the database
IF NOT EXISTS (SELECT *
FROM sys.symmetric_keys
WHERE [name] = '##MS_DatabaseMasterKey##')
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'<password>';
END
GO
-- Create access credentials to Azure OpenAI using a key:
CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.openai.azure.com/]
WITH IDENTITY = 'HTTPEndpointHeaders', secret = '{"api-key":"YOUR_AZURE_OPENAI_KEY"}';
GO
-- Create an external model to call the Azure OpenAI embeddings REST endpoint
CREATE EXTERNAL MODEL MyAzureOpenAiModel
WITH (
LOCATION = 'https://my-azure-openai-endpoint.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-05-15',
API_FORMAT = 'Azure OpenAI',
MODEL_TYPE = EMBEDDINGS,
MODEL = 'text-embedding-ada-002',
CREDENTIAL = [https://my-azure-openai-endpoint.openai.azure.com/]
);
-- Create a table with text to chunk and insert data
CREATE TABLE textchunk
(
text_id INT IDENTITY (1, 1) PRIMARY KEY,
text_to_chunk NVARCHAR (MAX)
);
GO
INSERT INTO textchunk (text_to_chunk)
VALUES
('All day long we seemed to dawdle through a country which was full of beauty of every kind. Sometimes we saw little towns or castles on the top of steep hills such as we see in old missals; sometimes we ran by rivers and streams which seemed from the wide stony margin on each side of them to be subject to great floods.'),
('My Friend, Welcome to the Carpathians. I am anxiously expecting you. Sleep well to-night. At three to-morrow the diligence will start for Bukovina; a place on it is kept for you. At the Borgo Pass my carriage will await you and will bring you to me. I trust that your journey from London has been a happy one, and that you will enjoy your stay in my beautiful land. Your friend, DRACULA')
GO
-- Create a new table to hold the chunked text and vector embeddings
CREATE TABLE text_embeddings
(
embeddings_id INT IDENTITY (1, 1) PRIMARY KEY,
chunked_text NVARCHAR (MAX),
vector_embeddings VECTOR (1536)
);
-- Insert the chunked text and vector embeddings into the text_embeddings table using AI_GENERATE_CHUNKS and AI_GENERATE_EMBEDDINGS
INSERT INTO text_embeddings (chunked_text, vector_embeddings)
SELECT c.chunk, AI_GENERATE_EMBEDDINGS(c.chunk USE MODEL MyAzureOpenAiModel)
FROM textchunk t
CROSS APPLY
AI_GENERATE_CHUNKS(source = t.text_to_chunk, chunk_type = N'FIXED', chunk_size = 100) c;
-- View the results
SELECT * FROM text_embeddings;