적용 대상: 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
embeddings 벡터 배열을 만드는 데 사용되는 형식으로 정의된 EMBEDDING
의 이름입니다.
자세한 내용은 CREATE EXTERNAL MODEL을 참조하세요.
optional_json_request_body_parameters
유효한 JSON 형식의 추가 매개 변수 목록입니다. 이러한 매개 변수는 '의 엔드포인트 위치로 전송되기 전에 REST 요청 메시지 본문에 EXTERNAL MODEL
추가됩니다. 이러한 매개 변수는 's 엔드포인트가 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
위해 충족해야 하는 두 가지 필수 구성 요소가 있습니다.
sp_invoke_external_endpoint
은 sp_configure 사용하여 데이터베이스에서 사용하도록 설정해야 합니다.
선택적 매개 변수
매개 변수 optional_json_request_body_parameters
AI_GENERATE_EMBEDDINGS
는 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 문으로 embeddings 만들기
다음 예제에서는 함수와 함께 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
사용하여 결과를 벡터 데이터 형식의 테이블에 삽입하는 전체 흐름입니다. 유효한 암호로 바꾸어 <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;