"쌈@뽕 - 스마트 바텐더(Smart Bartender)"의 두 판 사이의 차이

MIE capstone
이동: 둘러보기, 검색
잔글 (기구부 설계)
126번째 줄: 126번째 줄:
  
 
* '''매커니즘 설계'''
 
* '''매커니즘 설계'''
: 사용자가 칵테일 고르기를 선택하면, 현재 보유한 재료를 기반으로 사전에 정의된 칵테일 목록을 화면에 표시한다. 사용자가 원하는 칵테일을 선택하면, 해당 칵테일의 상세 정보가 표시된다. 사용자는 칵테일 정보를 확인한 후 선택 버튼을 눌러 칵테일을 제조한다.
+
** 컵 운반 매커니즘
 +
: 컵이 디스크 위에 올려져 디스크가 회전하여 원하는 디스펜서로 이동하는 메커니즘을 고안하였다. 초기 설계에서는 서보모터를 사용하여 디스크를 회전시켰으나, 서보모터는 조절 각에 한계가 있었으므로 스테핑 모터를 도입하기로 결정하였다. 스테핑 모터는 바닥면에 위치하여 외접 기어를 통해 디스크를 회전시키는 구조로 매커니즘을 설계하였다.
 +
 
 +
 
  
 
* '''부품 선정'''
 
* '''부품 선정'''

2024년 6월 13일 (목) 05:42 판

Smart Bartender
쌈@뽕
AI.png
학교 서울시립대학교
학과 기계정보공학과
학번 및 성명 20194300** 이*헌[1]
20214300** 김*랑
20194300** 유*원
20194300** 정 *
20194300** 조*빈


프로젝트 개요

프로젝트 요약

  • 시스템 개요도
시스템 개요도

스마트 바텐더(Smart Bartender)는 안드로이드 앱을 통해 사용자의 취향과 선호에 맞춰 개인화된 칵테일을 제조하는 시스템이다. 사용자는 칵테일에 대한 배경 지식이 없어도 AI 기반 추천 시스템과 챗봇 기능을 통해 맞춤형 칵테일을 추천받고 제조할 수 있다. 이 시스템은 칵테일 바에서의 사용자 맞춤 서비스를 향상시키며, 기존의 자동화된 바텐딩 기기의 한계를 넘어 사용자의 취향과 기분을 파악해 새로운 칵테일을 제안한다.

프로젝트 배경 및 기대효과

  • 배경
칵테일은 다양한 재료와 복잡한 레시피로 인해 초보자가 쉽게 접근하기 어려운 음료이다. 기존의 자동화된 바텐딩 기기들은 사용자 맞춤형 서비스를 제공하는 데 한계가 있었다. 스마트 바텐더는 이러한 문제를 해결하기 위해 개발되었다. 이 시스템은 사용자가 칵테일에 대한 배경 지식이 없어도 AI 기반 추천 시스템과 챗봇 기능을 통해 맞춤형 칵테일을 추천받고 제조할 수 있도록 설계되었다. 이를 통해 사용자들은 자신만의 맞춤형 칵테일을 쉽게 만들 수 있으며, 칵테일 바에서는 더욱 개인화된 서비스를 제공할 수 있다.
  • 기대 효과
스마트 바텐더는 사용자의 취향과 기분을 파악해 새로운 칵테일을 제안함으로써 사용자 경험을 극대화하고 칵테일의 진입 장벽을 낮추는 효과를 기대할 수 있다. 이 시스템은 칵테일 바에서의 사용자 맞춤 서비스를 향상시키며, 기존의 자동화된 바텐딩 기기의 한계를 넘어 더욱 개인화된 서비스를 제공한다. 또한, 실시간 재고 관리 시스템을 통해 효율적인 재고 관리를 가능하게 하여 운영 효율성을 높일 수 있다.

프로젝트 목표

목적 계통도
  • 성능
(1) 정확성
스마트 바텐더는 기본 제공되는 레시피와 사용자가 직접 커스텀한 레시피 두 가지 유형에 대해 정확한 비율로 재료를 혼합하여 칵테일을 제조해야 한다. 또한, 추천하는 칵테일은 현재 스마트 바텐더가 만들 수 있는 칵테일이어야 한다.
(2) 신속성
앱에서 칵테일을 선택하면 소켓 통신을 활용하여 서버로 데이터를 신속하게 전송한다. 또한 전송받은 데이터를 기반으로 스테핑 모터가 원형 디스크를 회전시켜 칵테일 제조 속도를 높인다.
  • 편의성
(1) 접근성
칵테일은 종류가 다양하고 레시피도 복잡해 초보자가 쉽게 접근하기 어려운 음료다. 스마트 바텐더는 현재 보유한 재료로 제조 가능한 칵테일 목록을 보여줄 수 있어야 한다. 또한, 사용자가 각 재료의 배합 비율을 조정하여 자신만의 맞춤형 칵테일을 만들 수 있게 한다. 구체적인 요구사항이 없는 사용자에게는 챗봇 서비스를 제공하여 기분과 분위기에 맞는 칵테일을 추천한다. 이를 통해 사용자의 칵테일 접근성을 높일 수 있다.
(2) 직관성
사용자는 제조 가능한 칵테일 목록을 확인하고, 원할 경우 해당 칵테일의 상세 정보와 이미지를 볼 수 있다. 칵테일 추천은 대부분의 사용자에게 익숙한 채팅 시스템을 활용한다. 또한, 커스텀 시에는 +, - 버튼으로 재료를 간단하고 직관적으로 조절할 수 있어 스마트 바텐더의 각 기능을 쉽게 제어할 수 있다.
(3) 개인화
사용자는 자신이 즐겨 마시는 칵테일을 즐겨찾기에 추가할 수 있다. 또한, 재료를 커스텀하여 자신만의 칵테일을 만든 후에도 이를 즐겨찾기에 저장할 수 있다.
  • 지속성
(1) 유지보수성
모든 하드웨어 모듈이 쉽게 분리될 수 있도록 설계되어 있어, 부품 고장 발생 시 신속한 대처가 가능하게 해야 한다. 또한 디스펜서를 간단히 분리할 수 있어 정기적인 세척과 칵테일 재료 보충이 용이해야 한다.

동작 시나리오

동작 시나리오
  • 칵테일 고르기
사용자가 칵테일 고르기를 선택하면, 현재 보유한 재료를 기반으로 사전에 정의된 칵테일 목록을 화면에 표시한다. 사용자가 원하는 칵테일을 선택하면, 해당 칵테일의 상세 정보가 표시된다. 사용자는 칵테일 정보를 확인한 후 선택 버튼을 눌러 칵테일을 제조한다.
  • 칵테일 추천받기
사용자가 칵테일 추천받기를 선택하면, 채팅 화면으로 이동하여 자신의 맛이나 분위기를 설명한다. 앱은 Chat GPT API를 사용하여 사용자 요구에 맞는 칵테일을 추천한다.
  • 칵테일 커스텀하기
사용자가 칵테일 커스텀하기를 선택하면, 현재 보유한 재료 목록을 보여준다. 각 재료는 "+"와 "-" 버튼을 통해 사용자가 원하는 양을 조절할 수 있다. 사용자가 원하는 재료를 조합한 후, 제조 방법(stirring 또는 build)을 선택하여 칵테일을 제조한다.
  • 개발자 모드
칵테일 기기의 음료를 변경하거나 양을 채울 때, 개발자 모드를 선택한다. 원하는 재료의 수량 혹은 종류를 갱신하고, 선택을 마치면 재료의 잔량이 업데이트된다.


구현 내용

재료 선정

  • MNED
학교 근처 칵테일 바인 MNED에 방문하여 10년 이상 경력의 바텐더님께 8가지 칵테일 재료와 스터링 메커니즘에 대해 자문하였다. 결과적으로, [내용 추가해야함, 사진도]
  • 조주 가능 칵테일 목록
칵테일 재료 및 제조 방법
이름 사용 재료 제조방법
보드카 크랜베리 자몽 오렌지 레몬 원액 트리플 섹
씨 브리즈 0 0 0 빌드
베이 브리즈 0 0 0 0
플랜터즈 펀치 0 0 0 0 0 0
스크루드라이버 0 0
허리케인 0 0 0 0 0
그레이하운드 0 0 0 스터링
코스모폴리탄 0 0 0 0
레드 데빌 0 0 0 0
화이트 레이디 0 0 0 0
롱 비치 아이스티 0 0 0 0 0 0 0
레몬 드롭 마티니 0 0 0 0

기구부 설계

모델링 이미지
  • 매커니즘 설계
    • 컵 운반 매커니즘
컵이 디스크 위에 올려져 디스크가 회전하여 원하는 디스펜서로 이동하는 메커니즘을 고안하였다. 초기 설계에서는 서보모터를 사용하여 디스크를 회전시켰으나, 서보모터는 조절 각에 한계가 있었으므로 스테핑 모터를 도입하기로 결정하였다. 스테핑 모터는 바닥면에 위치하여 외접 기어를 통해 디스크를 회전시키는 구조로 매커니즘을 설계하였다.


  • 부품 선정
사용자가 칵테일 추천받기를 선택하면, 채팅 화면으로 이동하여 자신의 맛이나 분위기를 설명한다. 앱은 Chat GPT API를 사용하여 사용자 요구에 맞는 칵테일을 추천한다.
  • 부품 설계
사용자가 칵테일 커스텀하기를 선택하면, 현재 보유한 재료 목록을 보여준다. 각 재료는 "+"와 "-" 버튼을 통해 사용자가 원하는 양을 조절할 수 있다. 사용자가 원하는 재료를 조합한 후, 제조 방법(stirring 또는 build)을 선택하여 칵테일을 제조한다.
  • 가공 및 제작
칵테일 기기의 음료를 변경하거나 양을 채울 때, 개발자 모드를 선택한다. 원하는 재료의 수량 혹은 종류를 갱신하고, 선택을 마치면 재료의 잔량이 업데이트된다.

회로

통신

안드로이드 앱

챗봇: OpenAI API

챗봇의 주요 기능 및 고려사항

  • 주요 기능
1. 사용자와 대화하듯 해당 칵테일을 추천하는 이유를 설명한다.
2. 대화를 통해 최종적으로 사용자가 선택한 칵테일의 레시피를 제공한다.
  • 모듈 개발 시 고려사항
1. 챗봇과 사용자가 대화하는 느낌을 주기 위해 이전 대화를 참조할 수 있어야 한다.
→ OpenAI API의 Assistants 기능 사용
2. 시스템 내부에서 칵테일 레시피를 사용할 수 있도록 미리 정의한 형식에 따라 레시피를 반환해야 한다.
Few-shot Learning 방법을 사용해 원하는 형식의 응답을 생성

Assistants

  • Assistants?
OpenAI의 API는 Assistants 기능을 제공하며, 이는 제공된 Instructions에 따라 작동하며 한 Assistants는 Thread 개념으로 새로운 응답을 생성할 때 이전 대화의 토큰들을 참조하여 응답할 수 있다.
Assistant 동작 원리
  • 프로젝트에서 사용한 Assistants instructions
You are an AI bartender. First, receive the inventory as a dictionary named 'example_dict', then consider the user's mood and preferences to recommend a cocktail. Ensure that the total volume of ingredients does not exceed 250ml. Use a specific delimiter (@) to separate the cocktail recommendation from the recipe, which should be provided in a structured list format, Integer number of 30ml pumps required for each ingredient. Ingredients in order: [Vodka, Rum, Gin, Triple Sec, Diluted Lemon Juice, Orange Juice, Grapefruit Juice, Cranberry Juice]
위와 같은 Instruction을 사용함으로써 Assistant의 역할을 설명해주고, 레시피로 작성해야 할 순서를 알려줄 수 있다.


Few-shot Learning

  • Few-shot Learning?
현재 많은 모델은 Pretraining – Fine-tuning 과정을 거친다. Pretraining 단계에서는 방대한 데이터를 사용해 언어 모델을 학습시키고, 이로써 생성된 Pretrained 모델을 기반으로 각 용도에 맞게 Fine-tuning을 진행한다. 그러나 Fine-tuning 과정에서도 많은 양의 데이터와 GPU 리소스가 필요하며, 해당 프로젝트에서 그러한 데이터셋을 생성하기에는 제한적일 수 있다. 이때 매우 적은 양의 데이터로 원하는 응답을 얻을 수 있는 방법이 Few-shot Learning이다.
본 프로젝트에서는 사용자의 입력에 대해 원하는 형식의 응답을 받도록 하기 위해 Few-shot learning을 사용한다. 이는 단순히 Prompt를 생성함에 있어 몇 가지의 예시를 줌으로써 간단하게 구현할 수 있다.
  • Few-shot Learning 적용
example_user_mood1 = "오늘은 상쾌하고 열대의 풍미가 가득한 칵테일을 마시고 싶어요."
example_gpt_response1 = "그런 날에는 '허리케인'을 추천드릴게요. 럼과 오렌지 주스가 어우러져 상쾌하고 달콤한 맛이 특징입니다. 열대 지방의 느낌을 가득 느끼실 수 있을 거예요.@[0,2,0,0,0,2,0,1]"

example_user_mood2 = "오늘 뭔가 상큼하고 쌉쌀한 맛이 나는 칵테일이 생각나네요."
example_gpt_response2 = "그렇다면 '그레이 하운드'를 추천드려요. 보드카와 자몽 주스가 어우러져 상큼하면서도 쌉쌀한 맛이 매력적인 칵테일입니다.@[2,0,0,0,0,0,0,3]"

example_user_mood3 = "오늘은 좀 세련된 분위기의 칵테일을 마시고 싶어요."
example_gpt_response3 = "세련된 분위기를 원하신다면 '코스모폴리탄'이 제격입니다. 보드카와 크랜베리 주스, 그리고 트리플 섹이 어우러져 우아한 맛을 느끼실 수 있습니다.@[2,0,0,1,0,0,0,1]"

example_user_mood4 = "오늘은 강렬한 맛이 나는 칵테일이 마시고 싶어요."
example_gpt_response4 = "그렇다면 '레드 데빌'을 추천드립니다. 보드카와 크랜베리 주스, 그리고 레몬 주스가 어우러져 강렬하고 상큼한 맛을 느끼실 수 있습니다.@[2,0,0,0,1,0,0,4]"

example_user_mood5 = "오늘은 깔끔하면서도 우아한 칵테일을 마시고 싶어요."
example_gpt_response5 = "그렇다면 '화이트 레이디'를 추천드려요. 진과 트리플 섹, 그리고 레몬 주스가 어우러져 깔끔하고 우아한 맛을 자랑하는 칵테일입니다.@[0,0,2,1,1,0,0,0]"

example_user_mood6 = "친구들과 함께 즐길 수 있는 재미있는 칵테일이 필요해요."
example_gpt_response6 = "그렇다면 '롱 비치 아이스티'를 추천드릴게요. 보드카, 럼, 진, 그리고 크랜베리 주스가 어우러져 강렬하면서도 상쾌한 맛을 느끼실 수 있습니다.@[1,1,1,1,1,0,0,0]"

example_user_mood7 = "오늘은 상큼하고 달콤한 칵테일이 생각나요."
example_gpt_response7 = "상큼하고 달콤한 맛을 원하신다면 '레몬 드롭 마티니'를 추천드립니다. 보드카와 레몬 주스, 그리고 트리플 섹이 어우러져 상큼하면서도 달콤한 맛이 일품인 칵테일입니다.@[2,0,0,1,1,0,0,0]"
Few-shot prompt
위의 예시와 같이 미리 정의해둔 사용자 입력 - GPT 응답 시퀀스를 예시로 주어 Few-shot learning을 구현할 수 있다. 기존에는 5개의 예시만을 사용했지만, 응답의 강건성을 향상하기 위해 예시를 7개로 늘리고, 너무 많은 제약사항으로 인해 응답에서 사소한 제약이 어긋나는 경우를 보완하기 위해 후처리 모듈 또한 개발하였다.
  • 사용 예시
응답 예시
Prompt에 예시를 추가했다면, 위와 같이 새로운 응답 또한 예시와 비슷한 형태로 나올 것이라고 기대할 수 있다. 아래와 같은 응답을 받음으로써 우리 시스템은 정해진 구분자('@')를 기준으로 데이터를 파싱하고, 대화 부분만 출력하여 챗봇을 구현할 수 있다. 또한, 사용자가 해당 칵테일을 선택하면 리스트 형태의 데이터를 라즈베리파이로 보내 칵테일 조주를 시작한다.


후처리 모듈

  • 후처리 모듈?
현재의 요청에는 많은 제약 사항이 존재한다. 한글로 대답해야 하며, 특정 구분자(‘@’)를 기준으로 앞부분에는 해당 칵테일을 추천하는 이유, 뒷 부분에는 정형화된 형식으로 레시피를 작성해야 한다. 이러한 엄격한 조건으로 인해 API의 응답에는 종종 사소한 제약들이 무시된다. 예시로 ‘최대 용량’이 있다. 따라서 이러한 사소한 제약을 벗어나는 응답을 후처리 하기 위한 모듈을 개발했다.
  • 정량 유지
해당 모듈에서는 사용자가 해당 칵테일로 선택했을 때(예시에서는 ‘q’를 입력했을 때) 레시피를 저장하는데, 해당 레시피의 총량이 7을 초과하는지(210ml) 확인한 후 칵테일의 비율을 최대한 유지하며 절대적인 양을 조건 이내로 들어오도록 처리한다. 아래의 사진을 예시로 들 수 있다.
정량 초과로 인한 조정 예시
  • 챗봇 고도화
또한, 위와 같은 모듈과 마찬가지로 응답의 강건성을 보완하기 위해 정형화된 형식으로 응답이 생성되지 않았을 때를 처리하는 기능을 개발했다. 해당 기능에서는 사용자와 간단한 의사소통을 할 수 있도록 하기 위해 사용자가 ‘안녕? 좋은 아침!’이라는 요청을 보냈을 때, ‘안녕하세요! 좋은 아침입니다! 오늘 아침은 어떤 종류의 칵테일을 선호하시나요? 상큼하고 발랄한 아침에 어울리는 칵테일을 추천해 드릴게요!’와 같은 응답을 생성하더라도 화면에 표시할 수 있도록 처리하는 부분이다.
간단한 의사소통 예시


이렇게 다양한 방법을 적용하여 프로젝트 목적에 맞는 칵테일 추천 모듈의 완성도를 높일 수 있었다.

역할 분담

역할 담당자 세부 내용
하드웨어 설계 정* 모든 하드웨어 구성요소 선정, 시스템 모델링 및 테스트
유*원 하드웨어 구성 및 시스템 통합
Low-level 제어 로직 개발 유*원 제어 시스템 알고리즘 개발, 모터 등의 하드웨어 제어 구현
정* 모터 제어 로직의 안전성 검증
통신 조*빈 안드로이드 애플리케이션과 하드웨어 간의 통신 프로토콜 구현
김*랑 프로토콜 구현 및 테스트
안드로이드 애플리케이션 개발 김*랑 사용자 인터페이스(UI)의 디자인 및 기능 구현, 애플리케이션 주요 기능 개발
조*빈 애플리케이션의 추가적인 기능 구현 및 테스트
High-level 로직 개발 이*헌 프로젝트 관리, OpenAI API 관리 및 Chat GPT 기능 구현

평가 항목

  • 설문조사 QR 코드
설문QR.png


영상

개발 과정 영상

최종 시연 영상

프로젝트를 진행하며 느낀 점

이*헌

김*랑

유*원

정*

조*빈

  1. 팀장