적용 대상: SQL Server 2025(17.x)
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric의 SQL 데이터베이스
이 문서에서는 OpenAI 및 벡터와 같은 AI(인공 지능) 옵션을 사용하여 SQL Server 및 Azure SQL Managed Instance SQL 데이터베이스 엔진 지능형 애플리케이션을 빌드하는 방법에 대해 간략하게 설명합니다.
Azure SQL Database 및 Fabric의 SQL Database에 대해서는 인텔리젠트 애플리케이션 및 AI를 참조하세요.
샘플 및 예제는 SQL AI 샘플 리포지토리를 방문하세요.
개요
LLM(대규모 언어 모델)을 사용하면 개발자가 친숙한 사용자 환경을 통해 AI 기반 애플리케이션을 만들 수 있습니다.
애플리케이션에서 LLM을 사용하면 모델이 애플리케이션 데이터베이스에서 적절한 시간에 적절한 데이터에 액세스할 수 있을 때 더 큰 가치와 향상된 사용자 환경이 제공됩니다. 이 프로세스를 RAG(검색 보강 세대)라고 하며 SQL 데이터베이스 엔진 이 새로운 패턴을 지원하는 많은 기능을 갖추고 있어 인텔리전트 애플리케이션을 빌드하는 데 유용한 데이터베이스입니다.
다음 링크는 지능형 애플리케이션을 빌드하기 위한 다양한 옵션의 샘플 코드를 제공합니다.
| 인공지능 옵션 | 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가 실제 워크로드에 안전하게 참여할 수 있는 것을 의미합니다.
당신은 할 수 있어요:
- 엔터티를 한 번 정의
- 역할 및 제약 조건 적용
그러면 플랫폼은 다음을 수행합니다.
- 엔터티, 역할 및 제약 조건을 일관되게 적용합니다.
- SQL 데이터를 통해 에이전트 기반 애플리케이션에 대한 신뢰할 수 있는 기반을 만듭니다.
REST 및 GraphQL을 지원하는 동일한 구성도 MCP를 제어하므로 규칙이나 논리가 중복되지 않습니다. 자세한 내용은 aka.ms/dab/docs 참조하세요.
Azure OpenAI를 사용하여 RAG를 구현하기 위한 주요 개념
이 섹션에는 SQL 데이터베이스 엔진 Azure OpenAI를 사용하여 RAG를 구현하는 데 중요한 주요 개념이 포함되어 있습니다.
RAG(검색 증강 생성)
RAG는 외부 원본에서 추가 데이터를 검색하여 관련 정보 응답을 생성하는 LLM의 기능을 향상시키는 기술입니다. 예를 들어 RAG는 사용자의 질문 또는 프롬프트와 관련된 도메인별 지식이 포함된 문서 또는 문서를 쿼리할 수 있습니다. 그런 다음 LLM은 응답을 생성할 때 이 검색된 데이터를 참조로 사용할 수 있습니다. 예를 들어 SQL 데이터베이스 엔진 사용하는 간단한 RAG 패턴은 다음과 같습니다.
- 테이블에 데이터를 삽입합니다.
- 인스턴스를 Azure AI 검색 연결합니다.
- Azure OpenAI GPT-4 모델을 만들고 Azure AI 검색 연결합니다.
- 애플리케이션 및 인스턴스의 데이터에서 학습된 Azure OpenAI 모델을 사용하여 데이터에 대해 채팅하고 질문합니다.
프롬프트 엔지니어링을 사용하는 RAG 패턴은 모델에 더 많은 컨텍스트 정보를 제공하여 응답 품질을 향상시키는 용도로 사용됩니다. RAG를 사용하면 모델이 생성 프로세스에 관련 외부 원본을 통합하여 보다 광범위한 기술 자료를 적용할 수 있으므로 보다 포괄적이고 정보에 입각한 응답을 제공합니다. grounding LLM에 대한 자세한 내용은 그라운드 LLM - Microsoft Community Hub 참조하세요.
프롬프트 및 프롬프트 엔지니어링
프롬프트는 LLM(큰 언어 모델) 또는 LLM이 빌드할 수 있는 컨텍스트 데이터에 대한 명령으로 사용되는 특정 텍스트 또는 정보입니다. 프롬프트는 질문, 문 또는 코드 조각과 같은 다양한 형식을 사용할 수 있습니다.
LLM에서 응답을 생성하는 데 사용할 수 있는 샘플 프롬프트는 다음과 같습니다.
- 지침: LLM에 지시문 제공
- 기본 콘텐츠: 처리를 위해 LLM에 정보를 제공합니다.
- 예: 모델을 특정 작업 또는 프로세스로 조건화 도움말
- 신호: LLM의 출력을 올바른 방향으로 전달
- 지원 콘텐츠: LLM이 출력을 생성하는 데 사용할 수 있는 추가 정보를 나타냅니다.
시나리오에 대한 좋은 프롬프트를 만드는 프로세스를 프롬프트 엔지니어링이라고 합니다. 프롬프트 엔지니어링에 대한 프롬프트 및 모범 사례에 대한 자세한 내용은 프롬프트 엔지니어링 기술을 참조하세요.
Tokens
토큰은 입력 텍스트를 더 작은 세그먼트로 분할하여 생성된 작은 텍스트 청크입니다. 이러한 세그먼트는 단어 또는 문자 그룹일 수 있으며 한 문자에서 전체 단어까지 길이가 다를 수 있습니다. 예를 들어 단어 hamburger 는 같은 토큰ham으로 나뉘며bur, ger짧고 일반적인 단어 pear 는 단일 토큰으로 간주됩니다.
Azure OpenAI에서 API는 입력 텍스트를 토큰화합니다. 각 API 요청에서 처리되는 토큰 수는 입력, 출력 및 요청 매개 변수의 길이와 같은 요인에 따라 달라집니다. 처리되는 토큰의 수량은 모델의 응답 시간과 처리량에도 영향을 줍니다. 각 모델에는 단일 요청에서 사용할 수 있는 토큰 수와 Azure OpenAI의 응답에 대한 제한이 있습니다. 자세한 내용은 Azure AI Foundry 모델 할당량 및 제한
Vectors
벡터는 일부 데이터에 대한 정보를 나타낼 수 있는 정렬된 숫자 배열(일반적으로 부동 소수)입니다. 예를 들어 이미지를 픽셀 값의 벡터로 표시하거나 텍스트 문자열을 ASCII 값의 벡터로 나타낼 수 있습니다. 데이터를 벡터로 변환하는 프로세스를 벡터화라고 합니다. 자세한 내용은 벡터 예제를 참조하세요.
벡터 데이터 형식 및 벡터 함수를 도입하면 벡터 데이터 작업을 더 쉽게 할 수 있습니다.
임베딩
포함은 데이터의 중요한 기능을 나타내는 벡터입니다. 임베딩은 종종 딥 러닝 모델을 사용하여 학습되며, 기계 학습 및 AI 모델은 이를 기능으로 사용합니다. 포함은 유사한 개념 간의 의미 체계 유사성을 캡처할 수도 있습니다. 예를 들어, 단어 person와 human에 대한 임베딩을 생성할 때, 이 단어들이 의미상 유사하기 때문에 해당 임베딩(벡터 표현)이 값에서 유사할 것으로 예상할 수 있습니다.
Azure OpenAI는 텍스트 데이터에서 포함을 만드는 모델을 제공합니다. 서비스는 텍스트를 토큰으로 분리하고 OpenAI에서 미리 학습된 모델을 사용하여 포함을 생성합니다. 자세한 내용은 Azure AI Foundry 모델의 Azure OpenAI에서 임베딩 이해하기를 참조하세요.
벡터 검색
벡터 검색은 특정 쿼리 벡터와 의미상 유사한 데이터 세트의 모든 벡터를 찾는 프로세스입니다. 따라서 단어 human에 대한 쿼리 벡터는 전체 사전에서 의미상 유사한 단어를 검색하며, person를 가까운 일치로 찾아야 합니다. 이러한 근접성 또는 거리는 코사인 유사성과 같은 유사성 메트릭을 사용하여 측정됩니다. 벡터 간의 유사도가 높을수록 거리는 작아집니다.
수백만 개의 문서에 대해 쿼리를 실행하여 데이터에서 가장 유사한 문서를 찾는 시나리오를 고려해 보세요. Azure OpenAI를 사용하여 데이터에 대한 포함을 만들고 문서를 쿼리할 수 있습니다. 그런 다음 벡터 검색을 수행하여 데이터 세트에서 가장 유사한 문서를 찾을 수 있습니다. 그러나 몇 가지 예제에서 벡터 검색을 수행하는 것은 간단합니다. 수천 또는 수백만 개의 데이터 요소에서 동일한 검색을 수행하는 것은 어려운 일입니다. 또한 대기 시간, 처리량, 정확도 및 비용을 포함하여 철저한 검색과 가장 가까운 인접(ANN) 검색 방법 간에는 장차가 있습니다. 이러한 모든 장차는 애플리케이션의 요구 사항에 따라 달라집니다.
다음 섹션에 설명된 대로 SQL 데이터베이스 엔진 벡터를 효율적으로 저장하고 쿼리할 수 있습니다. 이 뛰어난 성능의 기능을 사용하면 최근접 항목을 정확하게 검색할 수 있습니다. 정확도와 속도 중에서 결정할 필요가 없습니다. 둘 다 사용할 수 있습니다. 통합 솔루션에 데이터와 함께 벡터 포함을 저장하면 데이터 동기화를 관리할 필요가 최소화되고 AI 애플리케이션 개발을 위한 출시 시간을 가속화할 수 있습니다.
Azure OpenAI
포함은 실제 세계를 데이터로 나타내는 프로세스입니다. 텍스트, 이미지 또는 소리를 임베딩으로 변환할 수 있습니다. Azure OpenAI 모델은 실제 정보를 임베딩으로 변환할 수 있습니다. 모델을 REST 엔드포인트로 간주하여 액세스할 수 있으므로, sp_invoke_external_rest_endpoint 시스템 저장 프로시저를 사용하여 SQL 데이터베이스 엔진에서 쉽게 사용할 수 있습니다. 이 절차는 2025년 SQL Server(17.x)부터 사용할 수 있으며 Azure SQL Managed Instance always-up-to-date update policy 사용하여 구성됩니다.
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로 작업할 때 사용하는 통합 옵션 중 하나일 뿐입니다. 사용할 수 있는 모델 중에서 SQL 데이터베이스 엔진 저장된 데이터에 액세스하여 다음 예제와 같이 사용자가 데이터와 상호 작용할 수 있는 솔루션을 만들 수 있습니다.
Azure SQL 및 OpenAI 사용에 대한 추가 예제는 SQL Server 및 Azure SQL Managed Instance 적용되는 다음 문서를 참조하세요.
Azure OpenAI Service(DALL-E) 및 Azure SQL - Azure SQL에서 OpenAI REST 엔드포인트 사용하기
벡터 예제
전용 벡터 데이터 형식은 벡터 데이터를 효율적으로 저장하고 개발자가 벡터 및 유사성 검색 구현을 간소화하는 데 도움이 되는 함수 집합을 포함합니다. 새 VECTOR_DISTANCE 함수를 사용하여 한 줄의 코드에서 두 벡터 사이의 거리를 계산할 수 있습니다. 자세한 내용 및 예제는 SQL 데이터베이스 엔진의 벡터 검색 및 벡터 인덱스를 참조하세요.
다음은 그 예입니다.
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(Retrieval Augmented Generation)
- Azure SQL 및 Azure AI 검색와 함께 벡터 검색
지능형 애플리케이션
다음 다이어그램과 같이 SQL 데이터베이스 엔진 사용하여 추천 및 RAG(검색 증강 세대)와 같은 AI 기능을 포함하는 지능형 애플리케이션을 빌드할 수 있습니다.
세션 추상 데이터를 샘플 데이터 세트로 사용하여 AI 지원 애플리케이션을 빌드하는 방법을 보여 주는 엔드 투 엔드 샘플은 다음을 참조하세요.
비고
LangChain 통합 및 의미 체계 커널 통합은 vector 데이터 형식에 의존합니다. 이는 2025년 SQL Server (17.x)와 Always-up-to-date 또는 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시간 안에 사용자 고유의 데이터에 챗봇을 빌드합니다. UI에 대한 LLM 호출 및 Chainlit를 오케스트레이션하기 위해 LangChain을 사용하여 사용자 고유의 데이터에 RAG 패턴을 사용하여 챗봇을 빌드합니다.
의미 체계 커널 통합
의미 체계 커널 기존 코드를 호출하는 에이전트를 쉽게 빌드하는 데 사용할 수 있는 오픈 소스 SDK입니다. 확장성이 뛰어난 SDK로서 OpenAI, Azure OpenAI, Hugging Face 등의 모델에서 의미 체계 커널 사용할 수 있습니다. 기존 C#, Python 및 Java 코드를 이러한 모델과 결합하여 질문에 답변하고 프로세스를 자동화하는 에이전트를 빌드할 수 있습니다.
SEMANTIC KERNEL AI 지원 솔루션을 빌드하는 데 도움이 되는 방법의 예는 다음과 같습니다.
- 궁극적인 챗봇?: 궁극적인 사용자 환경을 위해 NL2SQL 및 RAG 패턴을 모두 사용하여 사용자 고유의 데이터에 챗봇을 빌드합니다.