MongoDB Atlas Stream Processing 및 Vector Search를 사용하여 통합 인터페이스를 통해 임베딩을 지속적으로 업데이트, 저장, 검색 .
사용 사례: Gen AI
제품: MongoDB Atlas, MongoDB Atlas Vector Search, MongoDB Atlas Stream Processing
파트너: Confluent, Amazon Web Services
솔루션 개요
모든 사람에게 적용되는 AI 접근 방식 이상의 권장 사항을 제공할 때 관련 컨텍스트를 사용할 수 있도록 모델에 최신 데이터를 제공하는 것이 중요합니다. RAG(검색 강화 생성) 시스템을 활성화 조직에서 대규모 언어 모델 (LLM) 및 기타 기본 모델을 자체 데이터의 진실에 기반을 둘 수 있습니다. 그러나 기본 데이터를 유지 관리하는 것은 복잡합니다. 모델이 정확한 답변을 제공하도록 하려면 사용 가능한 최신 정보를 나타내도록 RAG 시스템의 핵심을 형성하는 벡터 임베딩을 지속적으로 업데이트 해야 합니다.
또한 다양한 모델이 다양한 목적과 데이터 유형에 최적화되어 있기 때문에 임베딩 모델을 선택하면 AI 출력의 품질에 영향을 미칩니다. 예시 를 들어, 특정 언어 로 훈련된 임베딩 모델은 여러 언어에 걸쳐 훈련된 범용 모델보다 해당 언어 에 대해 더 문맥적으로 적합한 임베딩을 생성합니다.
이 솔루션은 MongoDB Atlas 의 네이티브 스트림 처리 및 벡터 검색 기능을 활용하여 개발자가 단일 인터페이스 내에서 임베딩을 지속적으로 업데이트, 저장 및 검색 수 있도록 합니다.
이 솔루션은 다음을 포함한 많은 산업 및 사용 사례와 관련이 있습니다.
- 금융 서비스: 금융 문서, 법률 정책 및 계약은 여러 언어를 사용하는 경우가 많으며 국가 규정에 따라 다릅니다. AI 기반 인터페이스를 통해 대출 담당자에게 최신 관련 데이터를 사용하여 대출을 빠르게 생성할 수 있도록 지원하면 은행 워크플로를 최적화할 수 있습니다. 
- 의료 및 보험: 환자 기록을 업데이트 보험 정책을 인수하는 데 도움이 되는 RAG 시스템은 최신 정보에 액세스 할 수 있어야 합니다. 
- 소매: 최신 컨텍스트 데이터는 RAG 시스템이 올바른 임베딩 모델을 선택하여 사용하는 언어 에 관계없이 고객에게 개인화된 경험을 제공하는 데 매우 중요합니다. 
참조 아키텍처
이 솔루션은 다음 구성 요소를 사용합니다.
- MongoDB Atlas Cluster: 텍스트, 관련 메타데이터, 문서의 해당 벡터 임베딩 등 다양한 데이터 유형을 유연하게 저장 수 있습니다. Atlas 의 벡터 인덱스 데이터베이스 내에서 효율적인 시맨틱 검색 쿼리를 직접 지원하며, 이는 MongoDB 애그리게이션 프레임워크와 함께 사용할 수 있습니다. 
- Confluent Kafka Cluster: 생산자로부터 문서 업데이트와 새 문서를 수신하고 Atlas Stream Processing 에서 추가 처리 할 수 있도록 합니다. 
- Atlas Stream Processing : MongoDB 에서 생성된 이벤트 스트림을 구독하고, 관련 정보를 필터링하고, 이벤트를 변환하고, 해당 Kafka 주제 로 내보냅니다. 또한 Kafka 클러스터 를 구독하여 업데이트를 프로세스 하고 변경 사항을 데이터베이스 에 다시 전파합니다. 
- 메타데이터 서비스: - 임베딩 생성기: Kafka 입력 주제를 구독하는 Python 스크립트 . 수신된 각 메시지에 대해 특수 머신 러닝 모델을 사용하여 임베딩을 생성합니다. 
- 태그 추출기: 수신 데이터를 분석하여 관련 구조화된 메타데이터 식별하여 인덱싱, 검색 또는 분석을 위해 문서 보강하는 Python 스크립트 . 
 
그림 1. MongoDB를 사용한 확장 가능한 벡터 업데이트 참조 아키텍처입니다.
데이터 모델 접근 방식
데모 솔루션에서 데이터 모델 노래에 대한 모든 관련 정보를 캡슐화하는 문서 컬렉션 입니다. MongoDB의 문서 데이터 모델 다양한 데이터 유형을 임베딩과 함께 저장하므로 쉽고 빠르게 데이터를 검색할 수 있습니다.
샘플 데이터 에는 가져올 수 있는 두 개의 데이터 세트( archive_lyrics_small1 및 archive_lyrics_small2)가 있습니다. 이러한 데이터 세트의 문서 구조는 다음과 같습니다.
{    "title": "Hurricane",    "artist": "Bob Dylan",    "year": 1976,    "lyrics": "...",    "language": "en",    "genre": "rock",    "duration": 61,    "lyrics_embeddings_en": [...],    "tags": ["man", "story", "night"]   // only in archive_lyrics_small1 } 
이 솔루션에서 Atlas Stream Processing 출력 주제 에 다음 데이터 필드를 사용합니다.
- lyrics_embeddings_en/- lyrics_embeddings_es: 언어별 가사 임베딩 벡터
- tags:- archive_lyrics_small1데이터 세트에서만 가사에 자주 나오는 단어를 나열합니다.
솔루션 빌드
Github 리포지토리 에는 이 솔루션을 복제하기 위한 자세한 지침이 포함되어 있으므로 MongoDB Atlas 사용하여 임베딩을 비동기적으로 확장하다 로 업데이트 할 수 있습니다.
README 은(는) 다음 단계를 안내합니다.
데이터 세트 로드
중요
아직 Atlas 계정이 없다면 지금 가입하여 클러스터 생성하세요.
제공된 스크립트 사용하여 mongoimport로데이터를 로드합니다.
Confluent에서 Kafka Cluster 구성하기
Confluent 설명서 의 지침에 따라 Kafka Cluster를 생성하세요.
Confluent의 Cluster Settings 탭 에서 부트스트랩 URL 복사하고 Kafka REST API 사용하여 클러스터 에 연결하기 위한 API 키를 만듭니다.
Confluent의 Topics 탭 에서 SpanishInputTopic, EnglishInputTopic, OutputTopic 주제를 생성합니다.
Stream Processing 연결 레지스트리를 구성합니다.
연결 레지스트리에서 Confluent 부트스트랩 URL 사용하여 Atlas Stream Processing 인스턴스 와 Kafka Cluster 간의 새 연결을 구성합니다.
Atlas Stream Processing 인스턴스를 Atlas cluster 에 연결합니다.
Atlas Stream Processing 구성
스트림 처리 인스턴스에 연결하기 위한 연결 문자열 복사합니다.
MongoDB Shell (mongosh) 을 사용하여 스트림 처리 인스턴스에서 파이프라인 및 연결을 구성합니다.
Atlas Vector Search 인덱스 생성
lyrics_embeddings_es에 대한 Atlas Vector Search 인덱스 생성하고 구성합니다. 검색 인덱스 다음과 같이 구조화해야 합니다.
{    "fields": [       {          "type": "vector",          "path": "lyrics_embeddings_es",          "numDimensions": 768,          "similarity": "cosine"       }    ] } 
lyrics_embeddings_en에 대한 Atlas Vector Search 인덱스 생성하고 구성합니다. 검색 인덱스 다음과 같이 구조화해야 합니다.
{    "fields": [       {          "type": "vector",          "path": "lyrics_embeddings_en",          "numDimensions": 384,          "similarity": "cosine"       }    ] } 
벡터 검색을 사용하여 대규모 문서 검색 및 분석하기
채팅 인터페이스에서 Atlas Vector Search 사용하여 시맨틱 쿼리를 실행 하려면 제공된 query_client.py 스크립트 사용하세요.
주요 학습 사항
- 임베딩 관련성 유지: 시맨틱 검색이 정확하게 유지되도록 데이터 임베딩을 정기적으로 업데이트 . 
- 언어-모델 쌍 최적화: LLM이 데이터 언어 와 밀접하게 정렬되어 검색 결과의 관련성과 정밀도를 향상시킵니다. 
- 유연한 임베딩 수용: MongoDB의 유연한 데이터 모델을 사용하면 길이나 생성에 사용된 모델에 관계없이 데이터와 함께 직접 임베딩을 저장 수 있습니다. 
- 적절한 유사성 함수 선택: 시맨틱 검색의 효과는 선택한 유사성 함수에 따라 달라집니다. 특정 사용 사례에 맞게 선택을 조정하세요. 
- 비동기 임베딩 생성: 임베딩을 비동기적으로 생성하여 애플리케이션 성능을 유지하고 생성 함수를 수평으로 확장하다 . 
작성자
David Sanchez, MongoDB