
AI 애플리케이션 및 에이전트를 위한 완전 관리형 NoSQL 및 벡터 데이터베이스
다중 지역 구성 시 업계 최고 수준의 가용성 보장
읽기 쓰기 모두 99번째 백분위수에서 한 자리 밀리초 속도
대량의 JSON 및 벡터 데이터 처리에 최적화된 아키텍처
벡터 데이터베이스 기능을 포함하여 RAG(검색 증강 생성) 아키텍처 지원
고성능 분산 처리가 필요한 시나리오에 이상적
데이터 구조가 자주 변하는 IoT, 전자 상거래 플랫폼 최적화
여러 지역에 걸쳐 수평으로 확장하도록 설계
성능 및 스토리지 요구 사항에 맞춰 분할 및 크기 조정을 자동으로 처리
전 세계 어디서나 데이터에 대한 짧은 대기 시간 액세스 보장
처리량을 미리 예측하고 예약
지속적이고 예측 가능한 트래픽에 최적
처리량을 예측할 수 없다면 선택
사용한 만큼만 지출
간헐적이거나 예측 불가능한 트래픽에 최적


엔터프라이즈 AI 운영, 모델작성, 애플리케이션 개발을 위한 통합 Azure PaaS 솔루션

LLM의 기능을 정보 검색 시스템과 결합하여 미리 학습된 데이터에만 의존하지 않고 실시간 정보를 바탕으로 응답을 생성하는 기술


AI 모델이 텍스트 입력을 받으면 텍스트를 토큰으로 분해
이 상태에서 의미가 부여된 벡터 상태가 되지는 않음

모델은 여러 계층(Layer)을 통해 데이터를 처리하며 텍스트내의 패턴과 관계를 캡처
Reverse Capability: 필요한 경우, 출력된 임베딩을 다시 역변환하여 사람이 읽을 수 있는 텍스트로 생성 가능
Azure OpenAI 임베딩
Hugging Face

각 임베딩은 부동 소수점 숫자의 배열
데이터 타입은 주로 float32 float16
이 숫자의 나열은 무작위가 아니라, 고차원 공간에서의 정확한 좌표를 나타냄
데이터베이스에 저장되는 실제 데이터

벡터 배열 내의 부동 소수점 숫자가 들어있는 각 상자는 하나의 차원에 해당
각 차원은 인간이 이해할 수 있는 데이터의 특정 기능(Feature)또는 특성(Characteristic)을 나타냄

수천 개의 차원을 시각적으로 표현하기 위해 3차원 공간으로 축소하여 표현
유사한 벡터(공간적 근접성)과 크게 다른 벡터 간의 관계를 보여줌
데이터베이스는 거리르 계산하여 검색을 수행

고차원 공간에서 데이터의 수학적 표현인 벡터 임베딩을 저장하고 관리하도록 설계된 시스템

기계 학습 모델이 이해할 수 있는 부동 소수점 숫자의 배열(벡터)
의미가 비슷할수록, 벡터 공간상에서 두 임베딩 사이의 거리(Distance) 가 가까워짐
정확한 키워드 일치가 아닌, 의미적 유사성을 통해 데이터를 찾음


*QuantizedFlat 및 DiskANN은 양자화 정확도를 보장하기 위해 최소 1000개 이상의 벡터가 필요. 그 미만일 경우 전체 스캔이 발생하여 비용 증가
{
"vectorEmbeddings": [
{
"path": "/vector1",
"datatype": "float16",
"distanceFunction": "dotproduct",
"dimensions": 100
}
]
}
{
"indexingMode": "consistent",
"includedPaths": [{ "path": "/*" }],
"excludedPaths": [
{ "path": "/_etag/?" },
{ "path": "/vector1/*" }
],
"vectorIndexes": [
{ "path": "/vector1", "type": "diskANN" }
]
}
벡터 간의 유사성 또는 유사도를 측정하는 수학적 수식
NoSQL 및 벡터 검색 환경에서 이 측정은 두 데이터가 얼마나 밀접하게 관련되어 있는지 결정하는 핵심 매커니즘

좌표 사이의 절대 차이를 합산하여 거리 측정
남북 이동 블록 수 + 동서 이동 블록 수
두 점 사이를 잇는 가장 짧은 직선거리 측정
장애물이 없는 공간에서의 직접적인 이동 거리를 의미

다차원 공간에 투영된 두 벡터 사이의 각도의 코사인을 측정
벡터의 크기보단 방향을 중시
두 데이터가 물리적으로 떨어져있어도, 같은 방향을 가리킨다면 주제적으로 유사할 수 있음

하나의 긴 문서(큰 벡터)와 하나의 짧은 문서(작은 벡터)가 있을 때, 문서의 길이 차이 때문에 유클리드 거리로는 두 점이 매우 멀리 떨어져 있을 수 있음. 그러나 두 문서가 비슷한 주제를 다루고 있다면 벡터 사이의 각도는 작아 코사인 유사성은 높게 측정됨

두 벡터를 곱하여 단일 숫자(Scalar)을 반환하는 연산
두 벡터의 크기(Magnitude)와 그 사이의 각도 코사인을 결합
한 벡터가 다른 벡터의 방향으로 얼마나 강력하게 이동(push)하거나 투영(project)되는지를 결정

K값(참조할 이웃의 수)설정에 따라 모델의 성능이 달라짐


정확도와 효율성 사이의 균형을 제공하는 알고리즘
모든 거리를 계산하는 대신, 데이터 구조를 미리 파악하여 검색 범위를 좁힘
100% 정확한 이웃을 보장하지 않지만, 실용적인 목적에 충분히 부합하는 근사치를 빠르게 찾아냄
인공 신경망과 다른 것



태양광 발전량 예측 정보 제공 RAG 시스템 구축
Cosmos DB, Azure OpenAI, Gradio

리소스 그룹에서 만들기 후 Azure Cosmos DB 선택

Azure Cosmos DB for NoSQL 선택













이후 Vector Embedding을 수정하고싶다면 불가능하므로 컨테이너를 삭제한 뒤 다시 생성해야 한다.



계정 선택에서 Azure 구독이 되어있는 계정 선택
배포 메뉴 클릭

모델 배포 버튼 클릭

gpt-4o-mini 선택

배포





git clone https://토큰@깃헙주소
local.settings.json 추가
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python"
}
}
키 및 엔드포인트 메뉴 클릭

키 1의 복사 버튼 클릭

엔드포인트의 복사 버튼 클릭
local.settings.json 파일에 OPENAI_ENDPOINT OPENAI_KEY OPENAI_API_VERSION 입력
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"OPENAI_ENDPOINT": "엔드포인트",
"OPENAI_KEY": "키1복사값",
"OPENAI_API_VERSION": "2025-01-01-preview"
}
}
local.settings.json 파일에 OPENAI_GPT_MODEL OPENAI_EMBEDDINGS_DEPLOYMENT 정보 입력
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"OPENAI_ENDPOINT": "엔드포인트",
"OPENAI_KEY": "키1복사값",
"OPENAI_API_VERSION": "2025-01-01-preview",
"OPENAI_GPT_MODEL": "gpt모델이름",
"OPENAI_EMBEDDINGS_DEPLOYMENT": "text embedding 모델 이름"
}
}
CosmosDB 페이지에서 키 메뉴 선택

키 페이지에서 URI 복사 버튼 클릭

PRIMARY KEY 복사 버튼 클릭
local.settings.json 파일에 COSMOSDB_ENDPOINT COSMOSDB_KEY 정보 입력
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"OPENAI_ENDPOINT": "엔드포인트",
"OPENAI_KEY": "키1복사값",
"OPENAI_API_VERSION": "2025-01-01-preview",
"OPENAI_GPT_MODEL": "gpt모델이름",
"OPENAI_EMBEDDINGS_DEPLOYMENT": "text embedding 모델 이름",
"COSMOSDB_ENDPOINT": "엔드포인트",
"COSMOSDB_KEY": "키복사값"
}
}

local.settings.json파일에 COSMOSDB_DATABASE COSMOSDB_CONTAINER 정보 입력{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"OPENAI_ENDPOINT": "엔드포인트",
"OPENAI_KEY": "키1복사값",
"OPENAI_API_VERSION": "2025-01-01-preview",
"OPENAI_GPT_MODEL": "gpt모델이름",
"OPENAI_EMBEDDINGS_DEPLOYMENT": "text embedding 모델 이름",
"COSMOSDB_ENDPOINT": "엔드포인트",
"COSMOSDB_KEY": "키복사값",
"COSMOSDB_DATABASE": "데이터베이스 이름",
"COSMOSDB_CONTAINER": "컨테이너 이름"
function을 위한 리소스그룹 생성

함수 앱 생성


주의: 사진과 같이 안전한 이름 켜두면 챗봇 실행에서 엔드포인트를 못잡으니, 꺼주도록 하자


