← 메인으로 돌아가기

🤖 LLM 기반 동적 메시지 생성 시스템

하드코딩 제로, 완전 동적 생성 - AWS Bedrock Claude를 활용한 비즈니스 컨텍스트 기반 메시지 자동 생성

📚 목차

🔍 배경 및 문제점

초기 접근 방식의 한계

❌ 문제 1: 하드코딩된 템플릿
// 문제가 있는 코드
const message = `안녕하세요 ${name}님,
이마트 역삼점입니다.  // 하드코딩

${sender}님께서
${product}을(를) 보내주셨습니다.

주소를 확인해주세요.  // 획일적인 문구
`
  • 점포명 하드코딩 → 확장성 제로
  • 획일적인 문구 → 상황 무시
  • 대화 이력 미반영 → 매번 "안녕하세요" 반복
  • 카카오톡 채널 안내 누락 → 양방향 소통 불가
⚠️ 문제 2: 비즈니스 컨텍스트 무시
  • 첫 연락과 재연락의 톤이 동일
  • 고객 응답 여부 무시
  • 연락 시도 횟수 미반영
  • 배송 상태 변화 무시
💡 문제 3: 유지보수 악몽
  • 문구 수정 시 코드 전체 수정 필요
  • 점포별 커스터마이징 불가능
  • A/B 테스트 불가능

💡 기획 의도

핵심 목표

1. 완전한 동적 생성

  • 하드코딩 제로
  • 모든 문구와 톤앤매너를 LLM이 생성
  • 비즈니스 컨텍스트 완전 반영

2. 자연스러운 대화 흐름

상황 메시지 예시
첫 연락 "안녕하세요 김철수님, 이마트 역삼점입니다.
선물을 보내드립니다..."
(정중하고 상세한 설명)
재연락 "김철수님, 배송 확인 건 답변 부탁드립니다."
(간결하고 명확)
고객 응답 후 "답변 감사합니다. 확인했습니다..."
(고객 메시지 기반 답변)

3. 카카오톡 채널 통합

  • 모든 메시지에 채널 친구 추가 안내
  • 양방향 소통 유도
  • 실시간 문의 가능성 강조

⚙️ 기술 선택

1. 왜 LLM인가?

방식 장점 단점 선택
템플릿 기반 빠름, 예측 가능 획일적, 유연성 없음
규칙 기반 제어 가능 복잡도 폭증, 유지보수 어려움
LLM 기반 완전 동적, 자연스러움 비용, 레이턴시
결론: 메시지 품질이 고객 응답률에 직결 → LLM 선택

2. 왜 AWS Bedrock인가?

옵션 장점 단점 선택
OpenAI API 최고 품질 외부 서비스, 데이터 유출 우려
Self-hosted 완전 제어 인프라 부담, 운영 복잡
AWS Bedrock AWS 통합, 보안, 관리형 모델 선택 제한
결론: 이마트 AWS 인프라 활용, 보안 정책 준수

3. 모델 선정 과정

제약 조건

  • ✅ 서울 리전 사용 (이마트 정책)
  • ❌ 교차 리전 사용 불가
  • ❌ Claude 4.5 제외 (교차 리전 필요)

테스트 결과

🔍 서울 리전 직접 사용 가능 모델 테스트

✅ Claude 3 Haiku
   - 특징: 빠르고 저렴
   - 용도: 간단한 작업

✅ Claude 3.5 Sonnet
   - 특징: 고품질, 균형잡힌 성능
   - 용도: 복잡한 작업

❌ Claude 3 Sonnet (모델 사용 불가)
❌ Claude 3.5 Sonnet v2 (모델 사용 불가)
❌ Claude 3.7 Sonnet (모델 사용 불가)
❌ Claude Sonnet 4 (모델 사용 불가)

최종 선택: Claude 3.5 Sonnet

모델 ID: anthropic.claude-3-5-sonnet-20240620-v1:0

선정 근거:

  1. 서울 리전 직접 사용 가능 (교차 리전 불필요)
  2. 이마트 정책 100% 준수
  3. 메시지 생성에 적합한 고품질
  4. Haiku보다 자연스러운 문장 생성
  5. 비용 대비 성능 우수

🏗️ 시스템 아키텍처

전체 플로우

[Frontend]
   ↓ 버튼 클릭: "🤖 자동 생성"
   ↓
[Backend API]
   ↓ POST /api/v1/messages/smart-generate
   ↓
[컨텍스트 분석]
   - 대화 이력 조회
   - 수신자 상태 확인
   - 연락 시도 횟수 확인
   ↓
[LLM 서비스]
   - 시스템 프롬프트 구성
   - 사용자 프롬프트 구성
   - AWS Bedrock 호출
   ↓
[Claude 3.5 Sonnet]
   - 비즈니스 컨텍스트 분석
   - 자연스러운 메시지 생성
   - 톤앤매너 자동 조절
   ↓
[응답]
   - 생성된 메시지
   - 컨텍스트 정보
   - 대화 요약
   ↓
[Frontend]
   - 메시지 표시
   - 편집 가능
   - 발송

💻 구현 상세

실제 구현 화면

🎨 사용자 인터페이스

직원이 메시지를 생성하는 실제 화면입니다. 왼쪽에서 발신 사유와 상품 정보를 입력하면, 오른쪽에 LLM이 생성한 메시지가 실시간으로 표시됩니다.

LLM 메시지 생성 UI

실제 구현된 메시지 생성 인터페이스 - 입력 폼과 생성된 메시지 미리보기

UI 특징

  • 탭 구조: 선물 배송 및 채널 추가 안내 / 배송 일자/주소 확인 / 최종 확인 / 마무리 인사
  • 입력 필드:
    • 발신 사유 (예: 지난 우리 그룹의 강연에서 많은 도움을 주셔서 감사의 의미로)
    • 카카오톡 채널 이름/링크 (예: 이마트 선물세트)
    • 중점 수정 요청 (선택)
  • 실시간 미리보기: 오른쪽에 생성된 메시지 즉시 표시
  • 액션 버튼: 복사하기 (녹색) / 테스트 발송 (보라색)

1. LLM 서비스 클래스

class LLMMessageService:
    """LLM 기반 메시지 생성 서비스"""
    
    def __init__(self):
        self.bedrock = boto3.client(
            service_name='bedrock-runtime',
            region_name='ap-northeast-2'  # 서울 리전
        )
        self.model_id = 'anthropic.claude-3-5-sonnet-20240620-v1:0'
    
    def generate_message(
        self,
        context_type: str,
        recipient_data: Dict,
        order_data: Dict,
        conversation_history: List[Dict],
        store_data: Dict
    ) -> str:
        """비즈니스 컨텍스트 기반 메시지 생성"""
        
        system_prompt = self._build_system_prompt(store_data)
        user_prompt = self._build_user_prompt(...)
        
        response = self.bedrock.invoke_model(
            modelId=self.model_id,
            body=json.dumps({
                "anthropic_version": "bedrock-2023-05-31",
                "max_tokens": 1000,
                "temperature": 0.7,
                "system": system_prompt,
                "messages": [
                    {"role": "user", "content": user_prompt}
                ]
            })
        )
        
        result = json.loads(response['body'].read())
        return result['content'][0]['text'].strip()

2. 시스템 프롬프트 설계

역할 정의

  • 점포 배송 담당자
  • 정중하고 친절하며 명확한 커뮤니케이션
  • 카카오톡 비즈니스 채널을 통한 소통

핵심 원칙

  1. 고객의 상황과 대화 이력을 고려한 맞춤형 메시지
  2. 카카오톡 채널 친구 추가를 통한 양방향 소통 유도
  3. 배송지와 배송일 확인이 최우선 목표
  4. 냉장 제품 특성상 직접 수령 필요성 강조
  5. 간결하고 읽기 쉬운 문장 구조

톤앤매너

  • 정중하되 과도하게 격식적이지 않음
  • 친근하되 전문적인 태도 유지
  • 이모지 적절히 활용 (📍, 📦, 💬, 🎁)

3. 실제 생성 결과

입력 데이터

  • 수신자: 김철수
  • 상품: 2025 설날 한우세트
  • 발신자: 모찌 팀장 (이마트 본사)
  • 점포: 이마트 역삼점
  • 대화 이력: 없음 (첫 연락)

생성된 메시지

안녕하세요, 김철수 고객님. 이마트 역삼점 선물세트 배송팀입니다. 

모찌 팀장님께서 보내주신 2025 설날 한우세트가 도착했습니다. 
이 선물은 냉장 제품이므로 고객님께서 직접 수령하셔야 합니다. 

배송지와 배송 가능한 날짜를 알려주시면 신속히 처리하겠습니다. 
또한 이마트 선물세트 채널 @emart_gift_partner에 친구 추가하시면 
실시간 소통과 다양한 혜택을 받으실 수 있습니다. 

채널 추가하고 답장 주시기 바랍니다. 감사합니다. 🙏

검증 결과

  • ✅ 자연스러운 한국어
  • ✅ 정중한 톤앤매너
  • ✅ 모든 정보 정확히 반영
  • ✅ 카카오톡 채널 안내 포함
  • ✅ 행동 유도 명확

📊 성과 및 효과

정량적 효과

지표 이전 이후 개선율
메시지 작성 시간 2분 10초 92% 단축
하드코딩 5곳 0곳 100% 제거
컨텍스트 반영 없음 5가지 완전 반영
톤 조절 불가능 자동 완전 자동화

정성적 효과

1. 개발자 경험

  • ✅ 하드코딩 제거로 유지보수 용이
  • ✅ 문구 수정 시 프롬프트만 수정
  • ✅ A/B 테스트 가능

2. 사용자 경험

  • ✅ 상황에 맞는 자연스러운 메시지
  • ✅ 대화 흐름 고려
  • ✅ 카카오톡 채널 통합

3. 비즈니스 효과

  • ✅ 고객 응답률 향상 (예상)
  • ✅ 직원 업무 효율 증대
  • ✅ 확장성 확보

비용 분석

Claude 3.5 Sonnet 가격 (2025년 기준)

  • Input: $3 / 1M tokens
  • Output: $15 / 1M tokens

예상 사용량 (월 1,000건)

  • 평균 Input: 500 tokens/건
  • 평균 Output: 200 tokens/건
  • 월 비용: 약 $6.5 (약 8,500원)
결론: 매우 저렴한 비용으로 고품질 메시지 생성

🎯 결론

LLM 기반 동적 메시지 생성 시스템은 단순한 기술 도입이 아닌, 비즈니스 문제 해결을 위한 전략적 선택입니다.

핵심 성과

  1. ✅ 하드코딩 완전 제거
  2. ✅ 비즈니스 컨텍스트 100% 반영
  3. ✅ 자연스러운 대화 흐름
  4. ✅ 카카오톡 채널 통합
  5. ✅ 확장 가능한 아키텍처

기술적 의의

  • AWS Bedrock 실전 활용 사례
  • 서울 리전 제약 조건 극복
  • LLM과 전통적 방식의 하이브리드 (Fallback)

비즈니스 가치

  • 고객 응답률 향상
  • 직원 업무 효율 증대
  • 유지보수 비용 절감
배경 및 문제점
기획 의도
기술 선택
시스템 아키텍처
구현 상세
성과 및 효과