쌈@뽕 - 스마트 바텐더(Smart Bartender)

MIE capstone
EmSys2024B (토론 | 기여)님의 2024년 6월 13일 (목) 04:00 판
이동: 둘러보기, 검색
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)을 선택하여 칵테일을 제조한다.
  • 가공 및 제작
칵테일 기기의 음료를 변경하거나 양을 채울 때, 개발자 모드를 선택한다. 원하는 재료의 수량 혹은 종류를 갱신하고, 선택을 마치면 재료의 잔량이 업데이트된다.

회로

통신

안드로이드 앱

Chat GPT API 사용

Chat GPT API의 주요 기능 및 고려사항

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

OpenAI API: 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?


역할 분담

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

평가 항목

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


영상

개발 과정 영상

최종 시연 영상

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

이*헌

김*랑

유*원

정*

조*빈

  1. 팀장