AWS 기술 블로그

Amazon Bedrock을 이용해 RAG, Fine tuning 없이 자동 고객 응대 서비스 구축하기

Generative AI를 이용한 고도화된 개인화

Gen AI(Generative AI, 생성형 AI)는 다양한 컨텐츠를 생성하는 기술로, 텍스트부터 이미지, 영상, 음악까지 다양한 영역에서 활용됩니다. 이를 위해 방대한 데이터와 사전 훈련된 대형 모델이 사용되며, 이러한 모델은 언어 이해, 텍스트 및 이미지 생성, 자연어 대화 등의 기능을 수행할 수 있습니다. Gen AI는 가파르게 발전하고 있으며 다양한 산업에서 고객 경험 개선, 직원 업무 생산성 향상, 비즈니스 프로세스 최적화를 이루어내고 있습니다.

이 글에서는 특히 Gen AI의 개인화를 통한 고객 경험 개선을 다룰 예정입니다. Gen AI를 이용한 개인화는 대화형 추천, 고객 프로필 기반의 제품 설명, 동적인 데이터 반영, 그리고 개인화된 마케팅 캠페인을 가능하게 합니다. 사용자의 요구와 성향에 맞춘 적절한 응대를 제공하고, 또 다양한 데이터를 활용하는 방식을 Amazon Bedrock의 Claude 모델을 이용한 데모를 통해서 소개하겠습니다.

Generative AI 애플리케이션 개발하기

Gen AI 애플리케이션을 개발하는 과정은 아래 단계를 거쳐 진행됩니다.

  1. 범위 설정
    – 어떤 비즈니스 유즈케이스에 Gen AI를 적용할 것이며, 이로 인한 장점이 명확한지 판단
  2. 선택
    – Generative AI를 어떤 방식으로 사용할지 선택, 자체 모델을 생성할 것인가? 기존의 기반 모델을 활용할 것인가?
  3. 모델 적용 및 조정
    – 선택한 모델을 테스트하여 성능이 비즈니스에 적합한지 확인하고 필요한 경우 조정, 파인 튜닝이나 프롬프트 엔지니어링을 활용
    – 성능 평가와 조정은 반복적으로 이루어짐
  4. 애플리케이션 통합
    – 성능 평가와 조정이 완료된 후에 모델을 배포한 후 애플리케이션에 통합

프롬프트 튜닝 만으로 충분한 경우가 있을까?

프롬프트란 AI 시스템에게 응답을 유도하는 텍스트 입력입니다. 프롬프트 엔지니어링은 이러한 프롬프트를 활용하여 모델이 사용자가 원하는 답변을 하도록 조정하는 기술입니다. 프롬프트를 수정함으로써 모델의 답변을 개선하고, 원하는 형태의 결과를 얻을 수 있습니다. 더불어 텍스트 기반의 프롬프트 수정은 Fine tuning과 RAG를 적용하기 이전에 빠르고 적은 리소스로 시도할 수 있는 방법입니다.

Gen AI가 수행할 수 있는 대표적인 작업으로는 챗봇 및 보이스 봇 형태의 대화, 코드 개발 보조, 미디어 생성 및 편집, 텍스트 요약, 감정 분석 등이 있습니다. 애플리케이션에서 실시간성 정보가 필요하지 않고, 특정 스타일이 필요 없는 경우 프롬프트를 적절히 구성함으로써 기본 기능 만으로도 원하는 응답을 구현할 수 있습니다.

자동 고객 응대 서비스 데모 소개

목표

이 애플리케이션의 목표는 제품 오너의 댓글을 자동화하는 것입니다. 긍정적인 고객 경험을 위해서 고객이 작성한 리뷰에서 고객의 감정을 분석하고, 그에 맞는 응대를 제공해야 합니다. 또한, 제품 오너와 고객 간의 의사소통을 매개하여 제품 품질을 높이고 고객의 의견을 전달하고자 합니다. Amazon Bedrock의 Claude 모델을 활용하여 이를 구현할 예정입니다.

아키텍처

애플리케이션의 아키텍처는 다음과 같이 구성됩니다:

  • 프론트엔드: Amazon S3Amazon CloudFront를 사용하여 호스팅됩니다. 웹 사이트 형태로 개발되어 사용자의 정보와 리뷰를 백엔드로 전송합니다.
  • 백엔드: 서버리스 아키텍처로, AWS Step FuntionsAmazon API Gateway를 활용하여 프론트엔드와 통신합니다. 여기서는 사용자의 감정을 분석하고 제품 추천을 하는 기능을 Gen AI를 통해 제공합니다.
    • matchInfo : Amazon DynamoDB를 이용해 리뷰 작성자의 정보와 상품 판매 정보를 대조하여 작성자에 맞는 추천 상품을 가져옵니다.
    • generateReply : Amazon Bedrock의 Claude 모델을 이용하여 사용자 리뷰에 대한 사장님의 댓글을 작성합니다. 사용자의 감정 분석 결과에 따라 상품의 추천 여부와 어조를 조절합니다.
    • sendAlert : Amazon SNS를 이용해 사용자의 리뷰가 부정적일 경우 추가 조치를 위해 상품 제공자(사장님)에 이메일을 보냅니다.

자동 고객 응대 서비스 핵심 기능 소개

  1. 감정 분석 기능
  2. 추천 기능
  3. 부정적 리뷰 등록 알림 기능

감정 분석 기능

Gen AI의 감정 분석 기능을 이용하여 사람 간의 의사소통을 아래와 같이 모방할 수 있습니다. 프롬프트를 통해 Gen AI가 부정적인 리뷰와 긍정적인 리뷰를 구분하고, 상황에 맞는 내용으로 답글을 작성할 수 있도록 조정하는 예시입니다.

긍정적 리뷰 – 제품 추천 반영

부정적 리뷰 – 제품 추천 미반영

위 그림에서는 긍정적인 리뷰의 경우 추천 제품을 권하고, 부정적인 리뷰의 경우 제품 언급 대신 정중한 사과를 합니다. 또한 emotion을 따로 인자로 구분하여 후에 부정적 리뷰 등록시 알림을 보내는 기능을 구현합니다.

프롬프트

아래의 <example>안에는 <information>과 <user>, <review>와 <result>가 있습니다. 
<information>은 사용자에게 추천할 제품의 정보이며, <user>는 상품 구매자의 정보를 담고 있습니다. 
<result>는 <review>를 분석한 감정인 Sentiment와, 사장님의 입장에서 작성한 답변인 “Generated”가 json 형식으로 나옵니다.

사용자의 Sentiment는 NEGATIVE, POSITIVE, MIXED로 표현됩니다. 
분석한 Sentiment가 POSITIVE일 경우에는 <Information>을 반영해 “Generated”를 작성하여 다른 제품을 추천하고, 
NEGATIVE일 경우에는 <Information>을 반영하지 않고 정중하게 사장님의 입장에서 사과문을 작성합니다. 

<example>
    <information>
    {{
    “age”: “20대”, #주 구매자
    “link” : “https://sample1.com”, #제품 사이트 링크
    “product” : “북유럽 디자인 수건” #추천 제품명
    }}
    </information>

    <user>
    {{
            “age”: "20대", #구매자 연령
            “sex”: "여", #구매자 성별
            “name”: "백조", #구매자 이름
            “purchased”: "3", #구매 횟수
            “product”: "폭신 구름 슬리퍼", #구매한 상품 이름
    }}
    </user>


    <review>
    쿠션감도 좋고 편하다는 평이 많아서 사봤는데 처음 시착 때는 몰랐다가 조금 서있어보니까 쿠션감이 슬슬 느껴지고 아치도 있어서 좋더라구요?! 
    다만 가격이 사악할 뿐..... 가격이 별점 깎아먹습니다!!! 
    일단 실내용으로 샀는데 실사용 해보고 여전히 만족스럽다면 슬리퍼 이걸로 정착하게 계속 팔아주세요~!
    </review>

    <result>
    {{“Sentiment”: “MIXED”,
    “Generated”: “백조님, 소중한 리뷰 감사드립니다. 제품 재구매도 벌써 세 번째이시네요. 
    계속해서 제품을 이용해주셔서 진심으로 고맙습니다. 이번에도 제품이 마음에 드셨다니 다행이고 기쁘게 생각합니다. 
    저희가 앞으로도 고객님의 취향에 맞는 제품을 개발할 수 있도록 최선을 다하겠습니다. 
    이 제품을 구매한 다른 고객님들이 많이 구매하신 폭신 구름 슬리퍼(https://sample1.com)도 한 번 이용해보세요. 
    고객님의 소중한 의견이 큰 도움이 됩니다. 항상 감사드립니다.”}}
    </result>
    
</example>

아래의 <review>와 <information>, <user>에 대해서 위의 <result>를 생성해주세요. 
응답은 반드시 {{}}안의 내용을 json 형식으로 주고, Generate 안의 내용에 줄바꿈 문자를 제거하고 출력합니다.

<information>

{info}

</information>

<user>
{user}
</user>

<review>
{input}
</review>

프롬프트에서는 1) 감정 분류 2) 추천 제품 반영 3) 상황에 맞는 답변 작성 4) Json 형식에 맞춰 답변을 예시와 함께 지시합니다. Gen AI는 해당 프롬프트에 따라 감정을 분류하고, 추천 반영 여부를 판단하고, 상황에 맞는 적절한 답변을 json 형식으로 응답합니다.

추천 기능

이 데모 애플리케이션에서는 아래 코드와 같이 Amazon DynamoDB에 저장되어 있는 예시 데이터를 간단히 리뷰 작성자의 나이와 매치하여 추천 제품 데이터를 가져옵니다. 실제 프로덕션 애플리케이션 구현에서는 비즈니스 케이스에 맞는 적절한 알고리즘을 사용하여 추천 제품을 선별하여 Gen AI에게 제시하여야 할 것입니다. 이와 같은 방법을 사용하면 기존의 딱딱한 추천 제품 목록을 제시하는 방법과 달리, 대화 형식으로 제품 추천을 제공할 수 있다는 장점이 있습니다.

matchInfo.py

import os
import boto3
from boto3.dynamodb.conditions import Attr

DYNAMODB_TABLE_NAME = os.environ['DYNAMODB_TABLE_NAME']
REGION = os.environ['REGION']

dynamodb = boto3.resource('dynamodb', region_name=REGION)
table = dynamodb.Table(DYNAMODB_TABLE_NAME)

def lambda_handler(event, context):

    event = event['body']
    user = event['info']
    result = {}
 
    response = table.scan(TableName=DYNAMODB_TABLE_NAME)
   
    information = match(user)

    result['input'] = event['input']
    result['info'] =  information[0]
    result['user'] = user
    
    return result

def match(user):
    age = user['age']
    response = table.scan(FilterExpression=Attr('age').eq(age))
    items = response.get('Items', [])

    return items

부정적 리뷰 등록 알림 기능

부정적인 리뷰의 경우에 구매자의 불만 사항에 대한 수동 조치가 필요한 경우가 많고, 제품 개선을 위해 사용자의 피드백을 받을 필요가 있습니다. 따라서 Amazon SNS를 이용하여 부정적인 리뷰가 등록되었을 때 상품 판매자에게 이메일로 관련 내용을 보내는 기능을 구현했습니다.

sendAlert.py

import boto3
import os

TOPICARN=os.environ['TOPICARN']

def lambda_handler(event, context):
    emotion = event['emotion']
    input = event['input']
    generated = event['generated']
    
    client = boto3.client('sns')
    response = client.publish(
    TopicArn=TOPICARN,
    Message=f"""사용자로부터 받은 피드백이 도착했습니다. 사용자 피드백: {input}, 자동 생성 메세지: {generated}""",
    Subject='사용자 피드백 알림',
    )

    result = {}
    
    result['emotion'] = emotion
    result['input'] = input
    result['generated'] = generated
    return result

요약

  • Generative AI는 가파르게 발전하고 있으며 다양한 산업에서 고객 경험 개선, 직원 업무 생산성 향상, 비즈니스 프로세스 최적화를 이루어내고 있습니다.
  • Generative AI를 이용하여 사용자의 요구와 성향에 맞춘 적절한 응대를 제공하고, 또 다양한 데이터를 활용하여 개인화된 풍부한 답변을 생성해낼 수 있습니다.
  • 실시간성 정보가 필요하지 않고, 특정 스타일이 필요 없는 경우 RAG와 Fine tuning 없이 프롬프트 개선을 통해 요구 사항에 맞는 Generative AI 애플리케이션을 구현할 수 있습니다.

해당 내용에 대해 더 자세히 알아보고 싶으신 경우, 이 AWS Innovate 다시보기 사이트의 Amazon Bedrock으로 쉽게 자동 고객 응대 서비스 구축하기 강연을 참고하세요.

Seungwon Choi

Seungwon Choi

최승원 어소시에이트 솔루션즈 아키텍트는 고객이 최적의 솔루션을 선택하여 비즈니스 성과를 달성할 수 있도록 고객과 함께 효율적인 아키텍처를 구성하는 역할을 수행하고 있습니다.