Amazon Bedrock을 이용한 지능형 쇼핑 어시스턴트 구현하기 - Amazon Web Services
[AI] role**: keyword extractor.
|
|
🔬 연구
#amazon bedrock
#aws
#perplexity
#review
#생성형 ai
#쇼핑 어시스턴트
#탐색형 쇼핑
원문 출처: [AI] role**: keyword extractor. · Genesis Park에서 요약 및 분석
요약
이 문서는 AWS(아마존 웹 서비스)의 생성형 AI 서비스인 아마존 베드락(Amazon Bedrock)을 활용하여 지능형 쇼핑 어시스턴트를 구축하는 방법을 소개합니다. 사용자는 기본 모델을 활용하거나 자체 데이터로 미세 조정(fine-tuning)하여 맞춤형 AI 챗봇을 개발하고, 이를 통해 상품 추천 및 자연어 기반의 고객 응대 서비스를 구현할 수 있습니다. 나아_langchain 등의 도구를 연동하면 외부 지식 베이스와의 통합이 가능하여, 더욱 정교한 쇼핑 경험을 제공하는 솔루션을 만들 수 있습니다.
본문
Amazon Bedrock을 이용한 지능형 쇼핑 어시스턴트 구현하기 배경 생성형 AI가 공개된 이후로 쇼핑 경험 전환에 사용하려는 시도가 다양하게 있었습니다. 이제 단순히 상품을 검색하고 구매하는 경험을 넘어 탐색형 쇼핑으로 나아가는 과도기라고 할 수 있습니다. AI 검색을 지향하는 Perplexity에서 2024년 11월에 쇼핑 어시스턴트 기능을 출시하기도 했으며 Amazon.com에서는 Rufus를 출시했습니다. Amazon Rufus는 생성형 AI 기반 쇼핑 어시스턴트로, 고객이 상품을 검색하고, 비교하고, 추천을 받고, 구매 결정을 내리는 데 도움을 주는 솔루션입니다. Rufus는 무엇보다 속도에 최적화 되어있습니다. 이를 위해 전용 LLM을 개발하였고, Amazon의 Trainium과 Inferencia2, 그리고 Neuron SDK를 이용해 지연 시간을 최소화하면서 처리량을 극대화했습니다. Rufus는 질문의 성격에 따라 다양한 형식의 답변을 제공하도록 설계되었습니다. 복잡한 상품 비교나 구매 가이드가 필요한 경우에는 상세한 설명을 제공하고, 간단한 문의에는 명확하고 간결한 답변을 제시하며, 상품 탐색이 필요한 상황에서는 클릭 가능한 링크와 네비게이션 요소를 활용합니다. 특히 고급 스트리밍 아키텍처를 통해 토큰 단위로 실시간 응답을 제공하여, 고객이 긴 답변이 완전히 생성될 때까지 기다릴 필요 없이 첫 번째 부분부터 바로 확인할 수 있습니다. 더 나아가 단순히 텍스트만 표시하는 데에 그치지 않고 실제 클릭할 수 있는 상품 링크와, 다음 검색 추천 등 클릭할 수 있는 박스와 같은 출력들을 제공합니다. 위 내용은 다양한 AWS 블로그에서 실제 확인해볼 수 있는 정보입니다. 그런데 이러한 블로그를 보는 입장에서, Rufus와 같은 것을 만들기 위해서 전용 LLM 개발을 꼭 해야 하는지 그것을 하지 않고는 빠른 응답 시간을 가질 수 없는지에 대한 고민이 생깁니다. 문제 해결 솔루션 이 블로그에서는 Amazon Bedrock을 활용하여 Rufus와 같은 지능형 쇼핑 어시스턴트를 구현하는 포괄적인 솔루션을 제시합니다. 솔루션 구성 요소 이번 데모에서는 다음과 같은 AWS 서비스들을 활용하여 Rufus와 같은 쇼핑 어시스턴트를 구현했습니다: - Amazon Bedrock - 생성형 AI의 핵심 엔진으로 필요에 따라 다른 모델을 활용 - 사용자 질문 의도 파악, 상품 검색 쿼리 생성, 자연어 응답 생성을 담당 - 스트리밍 응답을 통해 실시간으로 답변 제공 - Amazon DynamoDB - 고객의 주문 이력, 상품 리뷰, 사용자 프로필 정보 저장 - 대화 히스토리와 세션 관리 - Amazon OpenSearch Service - 상품 카탈로그 검색 - Amazon API Gateway - WebSocket을 통한 실시간 스트리밍 통신 지원 - Strands Agent - 코드로 에이전트를 구현할 수 있는 오픈소스 SDK 데이터 위치에 따른 유연한 구성 위 구성은 하나의 예시일 뿐이며, 실제 환경에서는 데이터가 위치한 곳에 따라 유연하게 구성할 수 있습니다. 중요한 것은 각 데이터 소스에 API를 통해 접근할 수 있다면 동일한 방식으로 쇼핑 어시스턴트를 구축할 수 있다는 점입니다. 예를 들어보겠습니다. - 상품 데이터: Elasticsearch, Solr, 또는 기존 상품 관리 시스템의 REST API - 주문 데이터: 기존 ERP 시스템, MySQL, PostgreSQL 등의 관계형 데이터베이스 - 고객 데이터: CRM 시스템, 고객 데이터 플랫폼(CDP), 또는 온프레미스 데이터베이스 - 리뷰 데이터: 리뷰 관리 시스템, MongoDB, 또는 외부 리뷰 플랫폼 API 핵심은 이러한 다양한 데이터 소스들을 Lambda 함수 내에서 각각의 API를 호출하여 통합하고, Amazon Bedrock을 통해 자연어로 처리하는 것입니다. 이 접근 방식을 통해 기존 시스템을 그대로 활용하면서도 최신 생성형 AI 기술을 적용한 쇼핑 어시스턴트를 구축할 수 있습니다. 데이터의 위치나 저장 방식에 관계없이 API 접근이 가능하다면, 이번 블로그에서 제시한 워크플로우와 최적화 기법들을 그대로 적용할 수 있습니다. 생성형 AI의 응답 속도를 빠르게 하는 방법론 챗봇의 핵심적인 요구사항 중 하나는 빠른 응답시간입니다. 만약 쇼핑 어시스턴트 챗봇을 이용하는데 최근 주문 내역 조회까지 10초가 넘게 걸리고 상품을 검색하고 추천받는데 30초가 넘게 걸린다면 사용자의 만족도가 매우 떨어질 가능성이 높습니다. 이번 단계에서는 챗봇의 응답시간을 빠르게 할 수 있는 다양한 방법론을 소개합니다. 생성형 AI의 응답시간 이해하기 보다 빠른 응답속도를 구현하기 위해서는 생성형 AI의 응답시간을 이해하는 것이 중요합니다. 생성형 AI에서는 크게 두 가지의 응답시간이 있습니다. - Time To First Token (TTFT): 입력을 전송하고 응답을 첫 토큰이 나오기까지 걸리는 시간 - Tokens Per Second * Tokens generated (TPS): 초당 생성하는 토큰의 수 * 생성한 토큰의 수 챗봇은 일반적으로 스트리밍으로 구현하기 때문에 TTFT가 중요합니다. 첫 토큰이 느리게 나올수록 사용자가 이탈할 가능성이 높아지고 답답함을 느낍니다. 입력 토큰의 수가 많아지면 TTFT가 증가하지만 늘어나는 정도는 크지 않습니다. 모델에 따라 다르지만 일반적으로 1초에서 길면 3초 정도 소요됩니다. TPS도 마찬가지로 모델에 따라 다르고 TTFT와 다르게 토큰 길이에 따라 변동은 없습니다. 챗봇을 구현할 때 응답을 빠르게 주기 위해서는 두 가지를 할 수 있습니다. 첫 번째로 TTFT 자체는 줄이지 못하지만 호출 횟수를 줄임으로써 발생 빈도를 낮출 수 있습니다. 두 번째로는 출력 토큰의 숫자를 줄이는 것인데, 사용자에게 스트리밍되고 있는 토큰을 줄이는 것도 전체 답변의 길이를 고려했을 때 중요하지만 사용자에게 보이지 않는 토큰의 숫자를 줄이는 것이 핵심입니다. Tool 효율적으로 사용하기 쇼핑 어시스턴트를 구현할 때 상품 검색과 같은 일을 수행하기 위해서 LLM의 tool 사용은 필수적입니다. 일반적으로 tool을 만들 때 코드의 함수를 짜듯이 단위별로 구현하는 것을 생각합니다. 예를 들면 상품 검색 tool, 상품 상세 정보 tool을 각각 만들어 필요할 때 활용하도록 할 수 있습니다. 하지만 tool 사용에 따르는 지연 시간을 생각해보면 이는 응답 속도 측면에서 고려했을 때 비효율적일 수 있습니다. LLM이 tool을 사용할 때에는 응답이 중단되고 tool을 실행한 후 결과를 다시 LLM을 호출합니다. 이는 매번 TTFT 지연을 발생시킵니다. 핵심 원칙: 선택적 Tool 사용 따라서 다음과 같은 전략을 사용하는 것이 좋습니다: - 정말 필요한 경우에만 tool을 사용 - 코드로 처리 가능한 부분은 코드로 직접 처리 - 컨텍스트 재사용을 통해 중복 호출 방지 실제 예시: 쇼핑 어시스턴트 시나리오 다음과 같은 도구들이 있다고 가정해보겠습니다: - 상품 검색 도구: 키워드로 상품 카탈로그 검색 - 상품 조회 도구: 상품 ID로 상세 정보 조회 대화 시나리오: - 첫 번째 턴: 고객이 “의자”를 검색 - 두 번째 턴: 고객이 특정 의자의 리뷰 정보 요청 비효율적인 접근법 첫 번째 턴에서 상품을 검색하고, 이어서 두 번째 턴에서 해당 상품의 리뷰 정보를 요청하는 일반적인 대화 시나리오를 살펴보겠습니다. 효율적인 접근법 비효율적인 접근법에서 발생할 수 있는 여러 번의 LLM 호출과 Tool 사용 지연을 줄이기 위해, 다음과 같이 효율적인 접근법을 적용할 수 있습니다. 핵심은 한번 Tool을 사용할 때 최대한 많은 정보를 대화 맥락에 넣어두는 것 입니다. 검색과 리뷰 조회를 통합했을 때의 또 다른 장점은 첫 답변 생성에서도 이미 사용자에게 리뷰 관련된 내용을 안내할 수 있다는 점입니다. 더 풍부한 답변을 제공함으로 이어질 수 있었던 턴 자체가 필요 없어질 수도 있습니다. 실제로 위 시나리오에서 응답시간이 얼만큼 단축되는지 확인하기 위해 가상의 tool을 만들어서 응답 시간을 측정해보겠습니다. # 상품 검색 결과를 반환하는 가상 tool @tool def keyword_product_search(query_keywords: str) -> list: """ Search for products by keywords. Args: query_keywords: str Returns: List[dict] """ return [ { "_index": "products", "_type": "_doc", "_id": "tshirt_001", "_score": 9.123456, "_source": { "id": "tshirt_001", "image_url": "https://cdn.example.com/images/organic-cotton-basic-tee-white.jpg", "name": "Patagonia Organic Cotton Basic T-Shirt", "description": "Sustainably made organic cotton t-shirt in classic fit, perfect for casual wear and everyday comfort", "price": 35.00, "gender_affinity": "unisex", "current_stock": 78 } }, { "_index": "products", "_type": "_doc", "_id": "tshirt_002", "_score": 8.789123, "_source": { "id": "tshirt_002", "image_url": "https://cdn.example.com/images/vintage-band-tee-rolling-stones.jpg", "name": "Vintage Rolling Stones Concert T-Shirt", "description": "Authentic vintage-style band t-shirt with distressed print and soft cotton blend fabric", "price": 28.99, "gender_affinity": "unisex", "current_stock": 42 } }, .
Genesis Park 편집팀이 AI를 활용하여 작성한 분석입니다. 원문은 출처 링크를 통해 확인할 수 있습니다.
공유