벡터 데이터베이스
팁
최신 벡터 데이터베이스 및 RAG 패턴 앱 샘플에 대한 새로운 샘플 갤러리 를 방문하세요.
적용 대상: NoSQL MongoDB vCore PostgreSQL
벡터 데이터베이스는 자연어 처리, 비디오 및 이미지 인식, 추천 시스템, 검색 등을 비롯한 분석 및 생성형 AI 전반의 다양한 도메인 및 상황에서 사용됩니다.
2023년에 있었던 주목할 만한 소프트웨어 동향은 AI 발전의 통합이었습니다. 이러한 통합은 대체로 특수한 독립 실행형 벡터 데이터베이스를 기존 기술 스택에 통합하여 달성되었습니다. 이 문서에서는 벡터 데이터베이스가 무엇인지 설명하고, 특히 다중 모달 데이터를 사용해 작업할 때 이미 사용 중인 NoSQL 또는 관계형 데이터베이스에서 통합 벡터 데이터베이스를 사용하는 등 고려할 수 있는 대체 아키텍처를 제시합니다. 이 방식을 사용하면 비용을 절감할 수 있을 뿐만 아니라 더 높은 데이터 일관성, 확장성 및 성능을 얻을 수 있습니다.
팁
데이터 집약적 애플리케이션에는 데이터 일관성, 확장성 및 성능이 중요합니다. 이것이 바로 OpenAI가 Azure Cosmos DB 위에 ChatGPT 서비스를 빌드하기로 선택한 이유입니다. 또한 사용자는 통합 벡터 데이터베이스뿐만 아니라 한 자릿수 밀리초 응답 시간, 자동적 및 즉각적 확장성, 모든 규모에서의 보장된 속도를 누릴 수 있습니다. 구현 샘플을 확인하고 무료로 시도해 보세요.
벡터 데이터베이스란?
벡터 데이터베이스는 고차원 공간에서 데이터의 수학 표현인 벡터 포함을 저장하고 관리하도록 설계된 데이터베이스입니다. 이 공간에서 각 차원은 데이터의 기능에 해당하며, 정교한 데이터를 나타내기 위해 수만 개의 차원이 사용될 수 있습니다. 이 공간에서 벡터의 위치는 해당 특성을 나타냅니다. 단어, 구 또는 전체 문서, 이미지, 오디오 및 기타 유형의 데이터를 모두 벡터화할 수 있습니다. 이러한 벡터 포함은 유사성 검색, 다중 모달 검색, 권장 사항 엔진, LLM(대규모 언어 모델) 등에 사용됩니다.
벡터 데이터베이스에서 포함은 벡터 거리 또는 유사성에 따라 벡터 검색 알고리즘을 통해 인덱싱되고 쿼리됩니다. 가장 관련성이 높은 데이터를 식별하려면 강력한 메커니즘이 필요합니다. 잘 알려진 벡터 검색 알고리즘에는 HNSW(Hierarchical Navigable Small World), IVF(Inverted File), DiskANN 등이 있습니다.
통합 벡터 데이터베이스와 순수 벡터 데이터베이스
벡터 데이터베이스 구현에는 순수 벡터 데이터베이스와 NoSQL 또는 관계형 데이터베이스의 통합 벡터 데이터베이스라는 두 가지 일반적인 형식이 있습니다.
순수 벡터 데이터베이스는 소량의 메타데이터와 함께 벡터 포함을 효율적으로 저장하고 관리하도록 설계되었습니다. 이는 포함이 파생되는 데이터 원본과 별개입니다.
고성능 NoSQL 또는 관계형 데이터베이스에 통합된 벡터 데이터베이스는 추가 기능을 제공합니다. NoSQL 또는 관계형 데이터베이스의 통합 벡터 데이터베이스는 해당 원본 데이터와 함께 포함을 저장, 인덱싱 및 쿼리할 수 있습니다. 이 방식은 별도의 순수 벡터 데이터베이스에 데이터를 복제하는 데 드는 추가 비용을 제거합니다. 또한 벡터 포함과 원본 데이터를 함께 유지하면 다중 모드 데이터 작업이 더욱 용이해지고 데이터 일관성, 규모 및 성능이 향상됩니다. 스키마 유연성과 통합 벡터 데이터베이스를 사용하는 고성능 데이터베이스는 AI 에이전트에 가장 적합합니다.
벡터 데이터베이스 사용 사례
벡터 데이터베이스는 자연어 처리, 비디오 및 이미지 인식, 추천 시스템, 검색 등을 비롯한 분석 및 생성 AI 전반의 다양한 도메인 및 상황에서 사용됩니다. 예를 들어, 벡터 데이터베이스를 사용하여 다음을 수행할 수 있습니다.
- 콘텐츠, 테마, 감정, 스타일을 기반으로 유사한 이미지, 문서, 노래 식별
- 특성, 기능, 사용자 그룹에 따라 유사한 제품 식별
- 개인의 선호도에 따라 콘텐츠, 제품, 서비스 추천
- 사용자 그룹의 유사성에 따라 콘텐츠, 제품, 서비스 추천
- 복잡한 요구 사항을 충족하기 위해 다양한 선택지에서 가장 적합한 잠재적 옵션 식별
- 주요 패턴 또는 일반 패턴과 다른 데이터 변칙 또는 사기성 활동 식별
- AI 에이전트를 위한 영구 메모리 구현
팁
Microsoft의 통합 벡터 데이터베이스는 벡터 데이터베이스의 일반적인 사용 사례 외에도 그 짧은 대기 시간, 높은 확장성, 고가용성 덕분에 프로덕션 수준 LLM 캐싱에 이상적인 솔루션이기도 합니다.
벡터 데이터베이스를 사용하여 LLM과 사용자 지정 데이터 또는 도메인별 정보를 활용하는 RAG(검색 증강 생성)를 활성화하는 것이 특히 인기가 있습니다. 이 방법을 사용하면 다음과 같은 이점이 있습니다.
- AI 모델에서 사용자 프롬프트에 대한 상황에 맞는 정확한 응답 생성
- LLM의 토큰 제한 극복
- 업데이트된 데이터에 대한 빈번한 미세 튜닝으로 인한 비용 절감
이 프로세스에는 사용자 지정 데이터 원본에서 관련 정보를 추출하고 프롬프트 엔지니어링을 통해 모델 요청에 통합하는 작업이 포함됩니다. LLM에 요청을 보내기 전에 사용자 입력/쿼리/요청도 포함으로 변환되고 벡터 검색 기법을 사용하여 데이터베이스 내에서 가장 유사한 포함 항목을 찾습니다. 이 기술을 사용하면 데이터베이스에서 가장 관련성이 큰 데이터 레코드를 식별할 수 있습니다. 그런 다음 이러한 검색된 레코드는 프롬프트 엔지니어링을 사용하여 LLM 요청에 대한 입력으로 제공됩니다.
벡터 데이터베이스 관련 개념
포함
포함은 기계 학습 모델과 알고리즘이 쉽게 사용할 수 있는 특수한 데이터 표현 형식입니다. 포함은 텍스트 조각의 의미 체계적 의미에 대한 조밀한 정보 표현입니다. 각 포함은 부동 소수점 숫자의 벡터입니다. 따라서 벡터 공간의 두 포함 사이의 거리는 원래 형식의 두 입력 간의 의미 체계 유사성과 상관 관계가 있습니다. 예를 들어 두 텍스트가 비슷한 경우 벡터 표현도 유사해야 합니다. 원본 데이터와 함께 포함을 저장할 수 있는 벡터 데이터베이스 확장은 데이터 일관성, 스케일링 및 성능을 보장합니다. [돌아가기]
벡터 검색
벡터 검색은 속성 필드의 정확한 일치가 아닌 데이터 특성을 기반으로 유사한 항목을 찾는 데 도움이 되는 방법입니다. 이 기술은 유사한 텍스트 검색, 관련 이미지 찾기, 권장 사항 제공 또는 변칙 징후 검색과 같은 애플리케이션에 유용합니다. 이는 Azure OpenAI Embeddings 또는 Hugging Face on Azure와 같은 포함 API를 사용하여 기계 학습 모델을 사용해 만든 데이터의 벡터 표현(숫자 목록)을 통해 작동합니다. 그런 다음 데이터 벡터와 쿼리 벡터 사이의 거리를 측정합니다. 쿼리 벡터에 가장 가까운 데이터 벡터는 의미상 가장 유사한 것으로 확인된 벡터입니다. 네이티브 벡터 검색 기능을 사용하면 다른 애플리케이션 데이터와 함께 직접 고차원 벡터 데이터를 저장, 인덱싱 및 검색을 효율적으로 할 수 있습니다. 이 방법은 데이터를 비용이 더 많이 드는 대체 벡터 데이터베이스로 마이그레이션할 필요성을 제거하고 AI 기반 애플리케이션의 원활한 통합을 제공합니다. [돌아가기]
프롬프트 및 프롬프트 엔지니어링
프롬프트는 LLM에 대한 명령 또는 LLM이 빌드할 수 있는 컨텍스트 데이터로 사용할 수 있는 특정 텍스트 또는 정보를 나타냅니다. 프롬프트는 질문, 문 또는 코드 조각과 같은 다양한 형식을 사용할 수 있습니다. 프롬프트는 다음과 같은 역할을 할 수 있습니다.
- 지침은 LLM에 지시문을 제공합니다.
- 기본 콘텐츠: 처리를 위해 LLM에 정보를 제공합니다.
- 예: 모델을 특정 작업 또는 프로세스로 조건부에 맞게 조정하는 데 도움을 줍니다.
- 큐: LLM의 출력을 올바른 방향으로 지시합니다.
- 콘텐츠 지원: LLM이 출력을 생성하는 데 사용할 수 있는 추가 정보를 나타냅니다.
시나리오에 대한 좋은 프롬프트를 만드는 프로세스를 프롬프트 엔지니어링이라고 합니다. 프롬프트 엔지니어링에 대한 프롬프트와 모범 사례에 관한 자세한 내용은 Azure OpenAI Service 프롬프트 엔지니어링 기술을 참조하세요. [돌아가기]
토큰
토큰은 입력 텍스트를 더 작은 세그먼트로 분할하여 생성된 작은 텍스트 청크입니다. 이러한 세그먼트는 단어 또는 문자 그룹일 수 있으며 한 문자에서 전체 단어까지 길이가 다를 수 있습니다. 예를 들어 단어 hamburger는 ham, bur, ger 등의 토큰으로 나뉘며, pear와 같은 짧고 일반적인 단어는 단일 토큰으로 간주됩니다. ChatGPT, GPT-3.5 또는 GPT-4와 같은 LLM은 처리를 위해 단어를 토큰으로 분리합니다. [돌아가기]
RAG(검색 증강 생성)
RAG(검색 증강 생성)는 그라운딩(grounding) 데이터(예: 벡터 데이터베이스에 저장된 데이터)를 제공하는 벡터 검색과 같은 정보 검색 시스템을 추가하여 ChatGPT, GPT-3.5 또는 GPT-4와 같은 LLM의 기능을 증강하는 아키텍처입니다. 이 접근 방식을 사용하면 LLM은 벡터화된 문서, 이미지, 오디오, 비디오 등에서 나온 사용자 지정 데이터를 기반으로 상황에 맞는 정확한 응답을 생성할 수 있습니다.
예를 들어 Azure Cosmos DB for NoSQL을 사용하는 간단한 RAG 패턴은 다음과 같습니다.
- Azure Cosmos DB NoSQL 벡터 인덱스 미리 보기에 등록
- 컨테이너 벡터 정책과 벡터 인덱스를 사용하여 데이터베이스와 컨테이너를 설정합니다.
- Azure Cosmos DB for NoSQL 데이터베이스 및 컨테이너에 데이터 삽입
- Azure OpenAI Embeddings를 사용하여 데이터 속성에서 포함을 만듭니다.
- Azure Cosmos DB for NoSQL을 연결합니다.
- 포함 속성에 대한 벡터 인덱스를 만듭니다.
- 사용자 프롬프트에 따라 벡터 유사성 검색을 수행하는 함수를 만듭니다.
- Azure OpenAI Completions 모델을 사용하여 데이터에 대한 질문 답변 수행
프롬프트 엔지니어링을 사용하는 RAG 패턴은 모델에 더 많은 컨텍스트 정보를 제공하여 응답 품질을 향상시키는 용도로 사용됩니다. RAG를 사용하면 모델이 생성 프로세스에 관련 외부 원본을 통합하여 보다 광범위한 기술 자료를 적용할 수 있으므로 보다 포괄적이고 정보에 입각한 응답을 제공합니다. “그라운딩” LLM에 대한 자세한 내용은 그라운딩 LLM을 참조하세요. [돌아가기]
다음은 통합 벡터 데이터베이스 기능을 사용하여 데이터에 RAG를 구현하는 여러 가지 방법입니다.
통합 벡터 데이터베이스 기능을 구현하는 방법
다음 Azure Cosmos DB API에 대한 통합 벡터 데이터베이스 기능을 구현할 수 있습니다.
NoSQL API
Azure Cosmos DB for NoSQL은 세계 최초의 서버리스 NoSQL 벡터 데이터베이스입니다. 벡터와 데이터를 통합 벡터 데이터베이스 기능이 포함된 Azure Cosmos DB for NoSQL에 함께 저장합니다. 여기서 Microsoft Research에서 개발한 고성능 벡터 인덱스 알고리즘 도구 모음인 DiskANN을 기반으로 벡터 인덱스를 만들 수 있습니다.
DiskANN을 사용하면 99.999% SLA(HA 지원), 지역 복제, 서버리스에서 한 데이터 저장소의 모든 프로비전된 처리량(RU)으로 원활하게 전환과 같은 Azure Cosmos DB for NoSQL의 모든 이점을 활용하면서 어떤 규모에서든 매우 정확하고 대기 시간이 짧은 쿼리를 수행할 수 있습니다.
링크 및 샘플
- ChatGPT 뒤에 있는 데이터베이스란? - Microsoft Mechanics
- Azure Cosmos DB for NoSQL의 벡터 인덱싱
- VectorDistance 시스템 함수 NoSQL 쿼리
- Azure Cosmos DB NoSQL에서 벡터 데이터베이스 기능을 설정하는 방법
- Python - Notebook 자습서
- C# - AKS 및 의미 체계 커널을 사용하여 사용자 고유의 Copilot 전체 솔루션 가속기 빌드
- C# - 사용자 고유의 Copilot 샘플 앱 및 실습 랩 빌드
- Python - 동영상 챗봇
Azure Cosmos DB for MongoDB
Azure Cosmos DB for MongoDB(vCore 아키텍처)에서 기본적으로 통합된 벡터 데이터베이스를 사용하면 다른 애플리케이션 데이터를 바로 함께 사용하여 고차원 벡터 데이터를 저장, 인덱싱, 검색하는 효율적인 방법이 제공됩니다. 이 방법은 데이터를 비용이 더 많이 드는 대체 벡터 데이터베이스로 마이그레이션할 필요성을 제거하고 AI 기반 애플리케이션의 원활한 통합을 제공합니다.
코드 샘플
- 의미 체계 커널을 사용하여 C#에서 Azure Cosmos DB for MongoDB에 대한 사용자 고유의 Copilot 빌드
- .NET 자습서 - 레시피 챗봇
- C# RAG 패턴 - OpenAI Service를 Cosmos와 통합
- Python RAG 패턴 - Azure 제품 챗봇
- Python Notebook - LangChain 자습서를 통한 벡터 데이터베이스 통합
- Python Notebook - LangChain 자습서를 통한 LLM 캐싱 통합
- Python - LlamaIndex 통합
- Python - 의미 체계 커널 메모리 통합
- Python Notebook - 동영상 챗봇
PostgreSQL용 API
Azure Cosmos DB for PostgreSQL에서 기본적으로 통합된 벡터 데이터베이스를 사용하면 다른 애플리케이션 데이터를 바로 함께 사용하여 고차원 벡터 데이터를 저장, 인덱싱, 검색하는 효율적인 방법이 제공됩니다. 이 방법은 데이터를 비용이 더 많이 드는 대체 벡터 데이터베이스로 마이그레이션할 필요성을 제거하고 AI 기반 애플리케이션의 원활한 통합을 제공합니다.
코드 샘플
- Python: Python Notebook 자습서 - 음식 리뷰 챗봇
다음 단계
90일 평가판 및 Azure AI Advantage를 통한 최대 $6,000의 처리량 크레딧