Google Gemini의 Multimodal Function Response를 활용해 LINE 이커머스 챗봇이 상품 이미지를 분석하며 데이터 기반 답변을 생성
[Gemini] Building a LINE E-commerce Chatbot That Can "Tell Stories from Images"
AI 요약
Context
기존 Function Calling 아키텍처에서는 봇이 데이터베이스에서 JSON 형태의 상품 정보를 반환받아도 실제 상품 이미지를 분석할 수 없었다. 사용자가 "지난번에 샀던 재킷 보여줘"라고 요청해도 봇은 단순히 "갈색 파일럿 재킷"이라고 텍스트만 반복했으며, 동일한 상품이 여러 개 있을 경우 어느 것이 사용자가 원하는 상품인지 구분할 수 없었다.
Technical Solution
- Multimodal Function Response 도입: 함수 응답에 JSON 데이터와 함께 이미지 바이트(JPEG/PNG/WebP)를 포함해 전달
- Google ADK에서 google.genai.Client로 아키텍처 변경: Function Calling 반복 루프를 직접 제어하여 이미지 바이트를 응답 부분에 삽입 가능하게 구현
- Unsplash 실제 의류 사진 5개를 img/ 디렉터리에 저장: 각 상품과 매핑되는 실제 사진 파일을 로컬에서 읽어 바이트 변환
- FastAPI 웹훅으로 LINE 사용자 요청 처리: 대화 이력을 유지하며 EcommerceAgent.process_message()를 호출하여 Gemini와 다중 라운드 상호작용 구현
- FunctionResponsePart(inline_data=FunctionResponseBlob) API 구조로 이미지 바이트 포장: mime_type을 "image/jpeg"로 지정하여 Gemini가 이미지를 인식하도록 구성
- /images 엔드포인트로 FastAPI가 이미지 서빙: UUID로 조회 가능하게 LINE에 ImageSendMessage 전송
Key Takeaway
Function Calling 아키텍처에서 단순 텍스트 데이터 반환에서 시각 데이터(이미지, PDF)를 포함한 응답으로 전환하면, AI가 "데이터 재진술"에서 "시각 분석 기반 스토리텔링"으로 응답 수준을 격상시킬 수 있다. 이는 이커머스 고객 서비스, 의료 상담(PDF 검진 보고서), 디자인 리뷰 등 함수가 반환하는 시각 데이터를 AI 분석이 필요한 모든 시나리오에 적용 가능하다.
실천 포인트
Gemini를 활용하는 이커머스 챗봇 서비스에서 Multimodal Function Response를 도입할 때, types.FunctionResponsePart에 inline_data=types.FunctionResponseBlob(mime_type="image/jpeg", data=image_bytes)로 이미지를 감싸 함수 응답에 포함시키면, 같은 상품명이 중복되어도 사용자가 언급한 정확한 상품을 시각적으로 확인하고 더 풍부한 설명을 생성할 수 있다.