본문 바로가기

대화형 로봇 바리스타 KUBI를 만나보세요

KUBI는 ElevenLabs의 대화형 AI와 함께하는 대화형 바리스타입니다. 어떻게 작동하는지 확인해보세요.

A robotic arm holding a can of Red Bull energy drink against a blue background.

KUBI세컨드 스페이스에서 일하는 대화형 로봇 바리스타이자 리셉셔니스트입니다. 대만 가오슝에 위치한 차세대 24/7 코워킹 스페이스로, 공간 운영이 완전히 자동화되어 있기 때문에 KUBI가 회원들과의 첫 만남에서 특별하고 친근한 인상을 주는 것이 매우 중요합니다. 그래서 Second Space는 ElevenLabs의 대화형 AI를 선택해 회원들과 재미있고 기억에 남는 상호작용을 만들었습니다. 실제로 KUBI가 어떻게 일하는지 함께 볼까요?

KUBI의 작동 방식

KUBI는 사람과 비슷한 상호작용을 구현하기 위해 정교한 멀티센서리 아키텍처를 사용합니다. 시스템은 마이크로서비스 아키텍처를 기반으로 하며, 각 서비스가 동시에 작동하고 실시간 이벤트 스트림을 통해 소통합니다. 이 서비스들은 실시간 AI 추론을 활용한 얼굴 및 사물 인식, 카메라를 통한 컵 감지 및 이상 여부 확인, 영수증 출력, 출입 통제를 위한 안전한 얼굴 인식, 우유 및 원두 디스펜서의 정밀 제어 등 다양한 작업을 담당합니다.

동시에 실행되는 주요 서비스는 다음과 같습니다:

  • 환경 카메라 서비스: 실시간 AI 추론(Python의 PyTorch 사용)으로 얼굴과 사물을 인식합니다.
  • 태블릿 카메라 서비스: 환경 카메라와 비슷하지만, 테이블 위의 컵과 이물질을 감지하고, KUBI 로봇이 실제로 컵을 들고 있는지 등 이상 여부를 확인합니다.
  • 영수증 출력 서비스: Node + Typescript로 구현되어 간단하고 안정적입니다. RS232 열전사 프린터와 통신합니다.
  • 결제 서비스: Kotlin JVM으로 개발되어 높은 동시성과 타입 안정성을 제공합니다. 정부 영수증 신고, 신용카드 단말기, 암호화폐 결제 게이트웨이, 온라인 결제 서비스와의 통신을 처리합니다.
  • 우유 & 원두 디스펜서: 별도의 정밀 서비스 — Arduino 기반. 시간 민감도 높고, 지연이 매우 적습니다.
  • 얼굴 인식: 출입 통제에 사용되는 안전하고 타입이 강한 Kotlin 서비스입니다.
  • 워터젯 서비스: 사용 후 우유 스티밍 용기를 자동으로 세척합니다 — Arduino 기반.
  • 이 외에도 모바일 앱 API, 메뉴 디스플레이 등 다양한 서비스가 함께 작동합니다.

왜 이렇게 많은 마이크로서비스를 사용할까요? 간단합니다 — 각 서비스를 독립적으로 관리하고, 쉽게 확장하며, 각 작업에 최적의 도구를 사용할 수 있기 때문입니다.

모든 것을 연결하는 중앙 이벤트 기반 코어

이 모든 마이크로서비스를 조율하는 중앙 서비스가 있는데, 유쾌하게도 "BigBoy"라고 불립니다. 본질적으로 거대한 논블로킹 이벤트 프로세서입니다:

BigBoy의 작동 방식은 다음과 같습니다:

  1. 모든 서비스에서 들어오는 이벤트를 수신합니다.
  2. 상황별로 트리거 조건을 확인합니다.
  3. 가장 적합한 시나리오를 선택합니다.
  4. 실행할 액션을 예약합니다.

internal object WeatherIdleScenario: SingleTaskScenario(scenario){
   
    importance = Importance.Medium
    compilationTimeout = Time.ThreeSeconds
    interruptable = false
    exeutionExpiration = = Time.TenSeconds
   
    override fun isEligible(event: Event, environment: Environment): Maybe<Boolean> = withEnvironment(environment) {
        just {
            (event is IdleEvent 
                    && !triggeredInLast(40.minutes) 
                    && (personPresent() || hasActiveSessions) 
                    && environment.weatherService.lastReportWithin(10.minutes))
        }
    }
}

private val scenario = ScenarioRecipe { event, env, session ->


    invokeOneOf(
       
        phrase {
              sayWith { 
                "Rainy day today, isn't it? That's why I have my little umbrella! Look!".asEnglish
              }.withAutoGift().withAutoMotion()
        }.given { Weather.isRaining() },

        phrase {
            sayWith {
                "Friend, it's so cold outside! So sad for you... because you're a human. I don't really mind!".asEnglish
            }.withAutoMotion()

           sayWith {
                "Wait, that soudned a bit rude.".asEnglish
            }.withAutoMotion()

        }.given { Weather.isCold() },

    )


}

시나리오란?

시나리오는 로봇의 액션 이벤트를 위한 논블로킹 컴파일러라고 생각하시면 됩니다. 액션 이벤트는 보통 가장 마지막 단계에서 발생하는 이벤트로, 실제 동작이나 음성 등 물리적인 효과로 이어집니다. 예를 들어, 인사 시나리오는 다음과 같은 트리거를 할 수 있습니다:

SayEvent("Hello! Welcome!", wave.gif)
MotionEvent(HelloMotion)

LLM을 활용한 이벤트 생성: 일부 액션 이벤트는 LLM이 자동으로 생성합니다. 예를 들어, withAutoMotion은 주어진 상황에 맞춰 미리 정의된 동작 목록에서 최적의 동작을 선택합니다. 그리고 withAutoGif는 LLM을 사용해 해당 문구에 가장 적합한 태그를 생성합니다. 이 태그로 Giphy에서 GIF를 가져와 KUBI의 얼굴에 문구와 함께 표시합니다.

액션 이벤트 동기화: 이 이벤트들은 스케줄러를 통해 전달되어 음성, 표정, 동작이 완벽하게 동기화됩니다. 동기화 덕분에 KUBI의 말과 제스처가 자연스럽게 맞아떨어집니다.

유연하고 확장 가능한 구조

특히 멋진 점은, 시나리오가 액션 이벤트를 듣고 새로운 액션 이벤트를 동적으로 트리거할 수 있다는 것입니다. 예를 들어:

  • BigBoy가 SayEvent("메리 크리스마스")를 감지하면, 자동으로 방 안에 축제 조명과 특수 효과를 켤 수 있습니다.
  • 또 다른 예로, 사용자가 모바일 앱으로 주문을 하면, 모든 사용자 상호작용(상품 클릭, 결제 등)이 이벤트로 변환되어 BigBoy가 실시간으로 반응할 수 있습니다. 예를 들어, 사용자가 “오트밀크 라떼”를 스크롤해서 지나치면, KUBI가 “오트밀크 라떼 안 드셔도 괜찮으세요? 정말 맛있는데요!”라고 말할 수 있습니다.

BigBoy는 실제로 모든 상황을 보고 알고 있습니다. 정말 멋지지 않나요?

DevOps 및 관측성

대부분의 서비스는 로컬에서 호스팅되며 도커 컨테이너로 감싸져 있습니다. 컨테이너 내에서는 Supervisor 프로세스 제어 시스템이 라이프사이클을 관리합니다. 오류 로그는 Sentry에 수집되어 커스텀 관리자 앱으로 전달되어 예외, 서비스 및 센서의 실시간 상태, 지연 보고 등을 모니터링합니다. 재미있는 점은 Flutter 앱의 90%가 AI로 생성되었다는 것입니다.

ElevenLabs로 기억에 남는 상호작용 만들기

Second Space는 KUBI의 성격을 Deadpool, 포탈 게임의 Wheatley, Apex Legends의 Pathfinder를 섞은 느낌으로 구상했습니다. 그리고 단 15분 만에 감정과 멈춤까지 담아 더욱 사람 같은 보이스 디자인을 완성했습니다.

ElevenLabs는 두 가지 핵심 API를 통해 KUBI의 음성 기능을 지원합니다:

텍스트 음성 변환(TTS)

  • 전체 상호작용의 약 90%를 담당합니다.
  • 미리 설계된 시나리오로 완벽한 분위기를 연출합니다.
  • LLM이 생성한 메시지는 개인화가 가능하며, 고품질 오디오와 최고의 발음, 시간에 민감하지 않은 상황에 적합합니다.
  • 영어, 중국어, 스페인어, 일본어, 라트비아어(라트비아 Deadpool도 가능!) 등 매우 자연스러운 다국어 음성을 제공합니다.

대화형 모드(실시간)

고객이 "헤이 KUBI!"라고 말하면 ElevenLabs의 대화형 AI가 200ms만에 응답해 정말 사람과 대화하는 듯한 경험을 제공합니다.

  • 우선순위: 지연 최소화.
  • 반응 속도를 위해 오디오 품질을 일부 희생합니다.
  • ElevenLabs의 새로운 실시간 언어 감지 도구를 사용해 다양한 언어를 즉시 처리합니다.
  • 회원이 시설에 들어오거나 “Hey, KUBI!”라고 말하면 대화형 AI 세션이 필요할 때마다 시작됩니다.

맞춤형 대화 도구

ElevenLabs의 대화형 AI를 WebSocket 연결로 활용해 KUBI는 함수 호출 등 다양한 기능을 사용할 수 있습니다. 예시:

  • 주문하기: 주문을 인식해 이벤트를 BigBoy로 바로 전달합니다.
  • 결제하기: 결제 요청 시 PaymentService에 즉시 알리고 신용카드 단말기를 작동시킵니다.

ElevenLabs의 관리자 패널에서 다양한 LLM 모델을 쉽게 전환할 수 있어 Second Space는 이해도와 정확도를 최적화할 수 있습니다. 실제로 모델마다 도구 인텐트 인식률이 다르다는 점을 확인했습니다. 현재는 Gemini 2.0 Flash를 대화형 AI의 핵심 모델로, ChatGPT 4o를 고정 음성 생성에 사용하고 있습니다.

KUBI의 시장 확장

Second Space가 ElevenLabs를 언급한 첫 GitHub 커밋은 2023년 1월로, 다국어 모델 출시 전이었습니다. 일찍부터 ElevenLabs의 품질에 대한 신뢰로 미래의 다국어 지원을 염두에 두고 아키텍처를 구축했습니다. 이제 일본, 한국 등 새로운 시장 진출도 스위치만 켜면 바로 가능 — 추가 개발 없이 확장할 수 있습니다!

마무리

마이크로서비스, 실시간 이벤트, 그리고 ElevenLabs의 강력한 음성 기술 덕분에 KUBI는 진짜 살아있는 듯한 느낌을 주며, 한 잔의 커피와 재치 있는 대화로 전 세계를 사로잡을 준비가 되어 있습니다.

ElevenLabs 팀의 다른 글 보기

최고 품질의 AI 오디오로 창작하세요