AWS 기술 블로그
Amazon OpenSearch Service의 AI Search Flow를 활용한 손쉬운 AI 기반 검색 기능 구현
“이 게시글은 AWS Big Data Blog의 “Amazon OpenSearch Service launches flow builder to empower rapid AI search innovation by Dylan Tong” 글을 편집, 번역하였습니다.
이제 Amazon OpenSearch Service의 OpenSearch 2.19+ 도메인에서 AI Search Flow 빌더에 액세스하여 AI 검색 애플리케이션을 더 빠르게 구축할 수 있습니다. 시각적 디자이너를 통해 색인과 검색 중에 수행되는 AI 기반 데이터 전처리 파이프라인인 커스텀 AI Search Flow를 구성할 수 있습니다. 사용자 지정 미들웨어를 구축하고 유지 관리할 필요 없이 OpenSearch에서 이러한 AI Search Flow를 구축하고 실행하여 OpenSearch 기반 AI 검색 애플리케이션을 구동할 수 있습니다.
애플리케이션은 점점 더 AI와 검색을 활용하여 사용자 상호작용, 콘텐츠 발견 및 자동화를 재창조하고 개선하여 비즈니스 성과를 향상시키고 있습니다. 이러한 혁신은 AI Search Flow를 실행하여 Semantic, 교차 언어 및 콘텐츠 이해를 통해 관련 정보를 발견하고, 개별 행동에 맞게 정보 순위를 조정하며, 정확한 답변을 찾기 위한 안내 대화를 가능하게 합니다. 그러나 검색 엔진은 네이티브 AI 향상 검색 지원에 제한이 있어, 개발자들은 기능적 격차를 메우기 위해 검색 엔진을 보완하는 미들웨어를 개발합니다. 이 미들웨어는 사용 사례, 데이터셋 및 요구 사항에 맞게 조정된 다양한 조합으로 데이터 변환, 검색 쿼리 및 AI 를 통한 쿼리를 색인된 데이터와 연결하는 데이터 플로우를 실행하는 사용자 지정 코드로 구성됩니다.
OpenSearch용 새로운 AI Search Flow 빌더를 통해 OpenSearch에서 AI Search Flow를 설계하고 실행할 수 있는 협업 환경을 갖출 수 있습니다. OpenSearch Dashboards의 AI Search Flows 메뉴에서 시각적 디자이너를 찾을 수 있으며, Semantic 검색, 멀티모달 또는 하이브리드 검색, 검색 증강 생성(RAG)과 같은 인기 있는 사용 사례에 대한 사전 구성된 플로우 템플릿을 시작하여 빠르게 시작할 수 있습니다. 구성을 통해 Amazon Bedrock, Amazon SageMaker, Amazon Comprehend, OpenAI, DeepSeek, Cohere와 같은 AI 제공업체를 통해 검색 및 인덱스 프로세스를 강화하는 커스텀 플로우를 생성할 수 있습니다. 플로우는 OpenSearch의 기존 색인, 인덱스, 워크플로우 및 검색 API를 통해 모든 OpenSearch 2.19+ 클러스터에서 프로그래밍 방식으로 내보내고, 배포하고, 확장할 수 있습니다.
이 게시글의 나머지 부분에서는 플로우 빌더를 시연하기 위한 몇 가지 시나리오를 살펴보겠습니다. 먼저, 클라이언트 측 코드 변경 없이 기존의 키워드 기반 OpenSearch 애플리케이션에서 Semantic 검색을 활성화합니다. 다음으로, 멀티모달 RAG 플로우를 생성하여 애플리케이션 내에서 이미지 검색을 어떻게 재정의할 수 있는지 보여드리겠습니다.
AI Search Flow 빌더 핵심 개념
시작하기 전에 몇 가지 주요 개념을 살펴보겠습니다. 플로우 빌더는 API 또는 시각적 디자이너를 통해 사용할 수 있습니다. 워크플로우 프로젝트 관리를 돕기 위해 시각적 디자이너 사용을 권장합니다. 각 프로젝트는 최소 하나의 ingest 또는 search pipeline을 포함합니다. 플로우는 프로세서 리소스의 파이프라인입니다. 각 프로세서는 텍스트를 벡터 임베딩으로 인코딩하거나 챗봇 AI 서비스로 검색 결과를 요약하는 등의 데이터 변환 유형을 적용합니다.
Ingest Pipeline은 데이터가 인덱스에 추가될 때 데이터를 보강하기 위해 생성됩니다. Ingest Pipeline는 다음으로 구성됩니다.
- 인덱싱하려는 문서의 데이터 샘플
- 수집된 문서에 변환을 적용하는 프로세서 파이프라인
- 처리된 문서로부터 구성된 인덱스
Search Flow는 검색 요청과 결과를 동적으로 보강하기 위해 생성됩니다. Search Flow는 다음으로 구성됩니다.
- 검색 API를 기반으로 한 쿼리 인터페이스로, 플로우가 어떻게 쿼리되고 실행되는지 정의합니다.
- 요청 컨텍스트 또는 검색 결과를 변환하는 프로세서 파이프라인.
일반적으로 프로토타입에서 프로덕션으로 가는 경로는 AI 커넥터를 배포하고, 데이터 샘플에서 플로우를 설계한 다음, 개발 클러스터에서 프리프로덕션 환경으로 플로우를 내보내 대규모 테스트를 진행하는 것으로 시작됩니다.
시나리오 1: 클라이언트 측 코드 변경 없이 검색 애플리케이션에 Semantic 검색을 활성화합니다.
이 시나리오에서는 10년 전에 OpenSearch로 구축된 제품 카탈로그가 있습니다. 우리는 검색 품질을 개선하고, 이를 통해 구매를 증가시키는 것을 목표로 합니다. 카탈로그에는 검색 품질 문제가 있습니다. 예를 들어, “NBA”를 검색해도 농구 상품이 표시되지 않습니다. 또한 이 애플리케이션은 10년 동안 손대지 않았기 때문에, 위험과 구현 노력을 줄이기 위해 클라이언트 측 코드 변경을 피하고자 합니다.
해결책은 다음과 같은 요소가 필요합니다.
- 기존 인덱스의 텍스트에서 텍스트 임베딩(벡터)을 생성하는 Ingest Pipeline
- 검색어를 텍스트 임베딩으로 인코딩하고, 키워드 유형 일치 쿼리를 k-NN(벡터) 쿼리로 동적으로 재작성하여 인코딩된 용어에 대한 Semantic 검색을 실행하는 Search Pipeline 이 재작성을 통해 애플리케이션이 키워드 유형 쿼리를 통해 Semantic 유형 쿼리를 투명하게 실행할 수 있습니다.
또한 검색 품질을 향상시킬 수 있는 크로스 인코더를 사용하여 결과를 재순위화하는 2차 재순위(re-rank) 플로우도 평가할 것입니다.
플로우 빌더를 통해 이 작업을 수행하겠습니다. OpenSearch Dashboard에서 AI Search Flows로 이동하여 템플릿 카탈로그에서 Semantic Search를 선택하는 것으로 시작합니다.
이 템플릿은 텍스트 임베딩 모델을 선택해야 합니다. 사전 요구 사항으로 배포된 Amazon Bedrock Titan Text를 사용할 것입니다. 템플릿이 구성되면 디자이너의 메인 인터페이스로 들어갑니다. 미리보기를 통해 템플릿이 사전 설정된 인제스트 및 검색 파이프라인 구성되어 있음을 알 수 있습니다.
Ingest Pipeline은 데이터 샘플을 제공해야 합니다. 현재 제품 카탈로그는 Amazon 제품 데이터셋이 포함된 인덱스에서 제공되므로, 이 인덱스에서 데이터 샘플을 가져옵니다.
Ingest Pipeline에는 ML Inference Ingest Processor가 포함되어 있으며, 이는 데이터가 OpenSearch에 수집될 때 임베딩(벡터)과 같은 머신 러닝(ML) 모델 출력을 생성합니다. 이전에 구성한 대로 프로세서는 Amazon Titan Text를 사용하여 텍스트 임베딩을 생성하도록 설정되어 있습니다. 임베딩 생성을 가능하게 하기 위해 제품 설명이 포함된 데이터 필드를 모델의 inputText 필드에 매핑합니다.
이제 데이터 샘플 임베딩이 포함된 새 인덱스를 구축하는 Ingest Pipeline을 실행할 수 있습니다. 인덱스의 내용을 검사하여 임베딩이 성공적으로 생성되었는지 확인할 수 있습니다.
인덱스가 생성되면 Search Pipeline을 구성할 수 있습니다. 기본 일치 쿼리로 사전 설정된 쿼리 인터페이스를 업데이트하는 것부터 시작합니다. 플레이스홀더 my_text
를 제품 설명으로 대체해야 합니다. 이 업데이트를 통해 Search Pipeline은 이제 레거시 애플리케이션의 쿼리에 응답할 수 있습니다.
Search Pipeline에는 ML Inference Search Processor가 포함되어 있습니다. 이전에 구성한 대로 Amazon Titan Text를 사용하도록 설정되어 있습니다. Transform query 아래에 추가되었기 때문에 쿼리 요청에 적용됩니다. 이 경우 검색어를 텍스트 임베딩(쿼리 벡터)으로 변환합니다. 디자이너는 쿼리 인터페이스의 변수를 나열하여 검색어(query.match.text.query
)를 모델의 inputText 필드에 매핑할 수 있게 합니다. 이제 인덱스가 쿼리될 때마다 검색어에서 텍스트 임베딩이 생성됩니다.
다음으로, 일치 쿼리를 k-NN 쿼리로 재작성하도록 사전 설정된 쿼리 재작성 구성을 업데이트합니다. 플레이스홀더 my_embedding
을 임베딩에 할당된 쿼리 필드로 대체합니다. 이를 하이브리드 쿼리를 포함한 다른 쿼리 유형으로 재작성하여 검색 품질을 향상시킬 수도 있습니다.
검색 비교 도구(Search Relevance)에서 Semantic 검색과 키워드 검색 솔루션을 비교해 보겠습니다. 두 솔루션 모두 “basketball”을 검색할 때 농구 상품을 찾을 수 있습니다.
하지만 “NBA”를 검색하면 어떻게 될까요? Semantic Search Flow만이 결과를 반환합니다. 이는 “NBA”와 “basketball” 사이의 백터의 유사도를 감지하기 때문입니다.
개선을 이루어냈지만, 더 나아질 수 있을 것 같습니다. 크로스 인코더로 검색 결과를 재순위화하면 도움이 되는지 확인해 보겠습니다. Transform response 아래에 ML Inference Search Processor를 추가하여 프로세서가 검색 결과에 적용되도록 하고, Cohere Rerank를 선택합니다. 디자이너에서 Cohere Rerank는 문서 목록과 쿼리 컨텍스트를 입력으로 필요로 함을 알 수 있습니다. Cohere Rerank가 처리할 수 있는 형식으로 검색 결과를 패키징하기 위해 데이터 변환이 필요합니다. 따라서 JSONPath 표현식을 적용하여 쿼리 컨텍스트를 추출하고, 데이터 구조를 평준화하며, 문서의 제품 설명을 목록으로 패키징합니다.
검색 비교 도구로 돌아가 플로우 변형을 비교해 보겠습니다. 이전에 검색한 “basketball”과 “NBA”에서는 의미 있는 차이를 관찰하지 못했습니다. 그러나 “hot weather”를 검색할 때는 개선이 관찰됩니다. 오른쪽에서 두 번째와 다섯 번째 검색 결과가 각각 32위와 62위 상승했으며, “hot weather”에 적합한 “샌들”을 반환했습니다.
이제 프로덕션으로 진행할 준비가 되었으므로, 개발 클러스터에서 프리프로덕션 환경으로 플로우를 내보내고, 워크플로우 API를 사용하여 플로우를 자동화에 통합하고, 대량, 색인 및 검색 API를 통해 테스트 프로세스를 확장합니다.
시나리오 2: 생성형 AI를 활용해 멀티모달 검색 구현.
이 시나리오에서는 수백만 개의 패션 디자인 사진이 있습니다. 우리는 유지 관리가 적게 필요한 이미지 검색 솔루션을 찾고 있습니다. 생성형 멀티모달 AI를 사용하여 이미지 검색을 현대화하고, 이미지 태그 및 기타 메타데이터를 유지 관리하기 위한 수작업이 필요 없게 만들 것입니다.
우리의 솔루션은 다음과 같은 요소가 필요합니다.
- Amazon Titan Multimodal Embeddings G1과 같은 멀티모달 모델을 사용하여 이미지 임베딩을 생성하는 Ingest Pipeline.
- 멀티모달 모델로 텍스트 임베딩을 생성하고, 텍스트와 이미지 매칭을 위한 k-NN 쿼리를 실행하며, 일치하는 이미지를 텍스트와 이미지를 처리할 수 있는 Anthropic의 Claude Sonnet 3.7과 같은 생성형 모델로 보내는 Search Pipeline.
RAG with Vector Retrieval 템플릿부터 시작하겠습니다. 이 템플릿을 사용하면 기본 RAG 플로우를 빠르게 구성할 수 있습니다. 이 템플릿은 텍스트 및 이미지 콘텐츠를 처리할 수 있는 임베딩 모델과 대규모 언어 모델(LLM)이 필요합니다. 각각 Amazon Bedrock Titan Multimodal G1과 Anthropic의 Claude Sonnet 3.7을 사용합니다.
디자이너의 미리보기 패널에서 이 템플릿과 Semantic 검색 템플릿 간의 유사점을 볼 수 있습니다. 다시 한번, 데이터 샘플로 Ingest Pipeline을 시작합니다. 이전 예제와 마찬가지로 Amazon 제품 데이터셋을 사용하지만, 우리의 모델은 base64 이미지를 필요로 하고 이 솔루션은 텍스트가 필요하지 않기 때문에 제품 설명을 base64로 인코딩된 이미지로 대체합니다. 임베딩을 생성하기 위해 base64 이미지 데이터를 해당 Amazon Titan G1 입력에 매핑합니다. 그런 다음 인제스트 플로우를 실행하고 인덱스에 base64 이미지와 해당 임베딩이 포함되어 있는지 확인합니다.
이 Search Pipeline을 구성하는 초기 단계는 이전 시나리오와 유사합니다. 쿼리 인터페이스를 업데이트하고, ML Inference Search Processor에 대한 모델 입력에 쿼리 텍스트 필드를 매핑하며, 쿼리 재작성 설정을 수정합니다. 이 플로우의 주요 차이점은 이미지를 처리하기 위해 Anthropic의 Claude Sonnet 3.7을 사용하도록 설정된 추가 응답 프로세서입니다.
LLM이 패션 어드바이저 역할을 수행하고 이미지 페이로드에 대한 해설을 제공하기 위한 쿼리 컨텍스트와 지침이 포함된 LLM 프롬프트를 구성해야 합니다.
다음으로, 프롬프트와 base64 이미지 데이터 필드를 모델의 입력에 적절히 매핑합니다.
“sunset colored dresses”(석양 색상의 드레스)를 검색하여 멀티모달 RAG 플로우를 테스트해 보겠습니다. 다음과 같은 결과를 관찰할 수 있습니다.
![]() |
이 아름다운 드레스는 화려한 그라데이션 색상으로 석양의 정수를 완벽하게 담아냅니다. 상단의 부드러운 복숭아 핑크색으로 시작하여 중간에는 선명한 오렌지색으로 변하고, 밑단에서는 태양이 지평선 아래로 내려갈 때의 하늘 색처럼 밝은 노란색으로 마무리됩니다. 이 드레스는 짧은 캡 소매가 있는 단순하고 캐주얼한 실루엣이 특징이며, 다양한 체형에 잘 어울리는 편안하고 여유로운 핏을 가지고 있는 것으로 보입니다. 타이다이 효과는 여름 나들이, 해변 휴가 또는 캐주얼한 저녁 행사에 완벽한 보헤미안 스타일의 자유로운 분위기를 선사합니다. 이 석양 색상의 드레스는 시선을 사로잡고 다양한 상황에 어울리며, 어떤 자리든 밝게 빛낼 수 있는 마법 같은 석양의 빛을 담고 있어 추천합니다. 이 색상은 특히 따뜻한 피부톤과 잘 어울리며, 골드 액세서리로 격식 있게 연출하거나 간단한 샌들로 캐주얼하게 스타일링할 수 있습니다. |
![]() |
이 생동감 넘치는 타이다이 드레스는 아름다운 색상 그라데이션으로 석양의 정수를 완벽하게 담아냅니다. 이 드레스는 황금빛 노란색, 불타는 듯한 오렌지색, 그리고 풍부한 핑크색의 밴드가 매끄럽게 어우러져 해 질 녘의 하늘을 연상시킵니다. 어깨를 우아하게 드러내는 튜브톱 디자인과 함께 모아진 허리는 편안한 무릎 길이 스커트로 흐르는 매력적인 실루엣을 만들어냅니다. 이 드레스는 여름 이벤트, 해변 휴가 또는 캐주얼한 외출에 탁월한 선택이 될 것입니다. 석양 색상 팔레트는 트렌디할 뿐만 아니라 중성적인 액세서리와 매치하기에도 충분히 다양한 활용이 가능합니다. 시선을 사로잡는 색상, 편안한 핏, 그리고 아름다운 석양을 바라볼 때의 따뜻하고 편안한 느낌을 담아낸 방식 때문에 이 의상을 추천합니다. |
어떠한 이미지 메타데이터 없이도 OpenSearch는 석양 색상의 드레스 이미지를 찾아내고, 정확하고 생생한 해설로 응답합니다.
결론
AI Search Flow 빌더는 OpenSearch Service에서 OpenSearch 2.19+ 버전을 지원하는 모든 AWS 리전에서 사용 가능합니다. 자세한 내용은 OpenSearch Dashboards에서 AI 검색 워크플로우 구축하기와 GitHub의 튜토리얼을 참조하세요. 이 튜토리얼에서는 Amazon Bedrock, SageMaker 및 기타 AWS와 타사 AI 서비스의 다양한 AI 모델을 통합하는 방법을 보여줍니다.