음식 주문 AI 에이전트 개념

이 문서에서는 음식 주문 AI 에이전트 API의 주요 개념을 개략적으로 설명합니다.

에이전트 구성

음식 주문 AI 에이전트의 동작은 Brand, Store, Menu 등 여러 API 리소스의 구성에 영향을 받습니다. 이러한 리소스는 레스토랑의 신원, 오프라인 위치, 제공하는 제품을 정의하여 AI 에이전트가 주문을 처리하는 데 필요한 컨텍스트를 제공합니다.

브랜드

Brand은 최상위 리소스로, 레스토랑 브랜드의 하나 이상의 위치에 해당하는 레스토랑 브랜드를 나타냅니다. 이 구성에는 해당 레스토랑의 모든 위치에서 공유되는 구성이 포함됩니다. Brand에는 인사말 동작, 음성 특징 등 에이전트 페르소나의 여러 기능 구성이 포함될 수 있습니다. 이러한 기능 중 다수는 Store 리소스에 구성된 값이나 세션별 구성 (세션 수명 주기 참고)에 의해 재정의될 수 있습니다.

스토어

Store 리소스는 Brand에 속하는 단일 실제 식당 위치를 나타냅니다. 이 위치의 시간대, 상태 (예: ACTIVE, DISABLED), 영업시간, 시간대 (예: 특정 메뉴 항목이 제공되는 '아침' 또는 '점심'과 같은 시간대)을 기반으로 합니다.

Menu 리소스는 판매 가능한 모든 제품의 가능한 모든 선택사항과 맞춤설정을 포함하여 레스토랑에서 제공하는 모든 제품을 정의합니다. MenuStore과 연결되어야 합니다. 메뉴는 유연하게 설계되어 있으며 독립형 항목의 작은 목록부터 중첩된 수정자가 있는 조합 식사의 복잡한 트리까지 다양한 메뉴 구조를 수용할 수 있습니다.

Menu의 주요 구성요소는 다음과 같습니다.

  • 상품: 일품 요리, 음료, 사이드 메뉴, 콤보 식사와 같이 판매 가능한 최상위 제품입니다.
  • ModifierGroups: Item 또는 다른 Modifier에 적용되는 선택사항 모음입니다(예: '사이드 선택', '토핑 추가').
  • 수정자: ModifierGroup 내의 개별 옵션입니다(예: '감자튀김', '치즈 추가', '콜라'). 수정자는 상품 가격을 조정할 수 있으며 추가 맞춤설정을 위해 중첩된 ModifierGroup를 포함할 수 있습니다.
  • MenuCategories: '애피타이저' 또는 '음료'와 같은 조직 단위입니다.

Menu 리소스는 projects/{project}/locations/{location}/menus/{menu} 형식의 이름으로 식별됩니다.

메뉴 데이터 구조화에 관한 자세한 내용은 메뉴 데이터 통합을 참고하세요.

음식 주문 세션

음식 주문 세션은 음식 주문 AI 에이전트의 핵심으로, 고객과 AI 에이전트 간의 실시간 멀티모달 상호작용을 지원합니다. 각 세션은 단일 음식 주문 대화를 나타내며 FoodOrderingService.BidiProcessOrder RPC 메서드를 사용하여 관리됩니다.

BidiProcessOrder RPC 메서드

이는 양방향 스트리밍 RPC입니다. 클라이언트 애플리케이션이 에이전트에 입력을 스트리밍하고 에이전트가 클라이언트에 응답을 동시에 스트리밍합니다. 이를 통해 지연 시간이 짧은 실시간 상호작용이 가능합니다.

  • 클라이언트-에이전트 스트림: 클라이언트는 오디오 입력(고객 음성), 텍스트 입력 또는 이벤트 입력 (예: 탭 인터페이스를 사용하는 고객이 실행한 클라이언트 측 장바구니 업데이트 또는 드라이브 스루 레스토랑 하드웨어에서 감지된 하드웨어 드라이브 오프 이벤트)이 포함된 BidiProcessOrderRequest 메시지 스트림을 전송합니다.
  • 상담사-클라이언트 스트림: 상담사가 오디오 출력 (합성된 상담사 음성), 텍스트 출력, 인식된 음성의 스크립트, 고객 주문 상태 업데이트 또는 감지된 중단과 같은 기타 신호가 포함된 BidiProcessOrderResponse 메시지 스트림을 반환합니다.

세션 수명 주기

Food Ordering AI Agent의 모든 세션은 Config이 포함된 BidiProcessOrderRequest 메시지를 사용하여 지정된 클라이언트 제공 구성으로 시작해야 합니다. Config는 다음 두 필드를 지정해야 합니다.

  • store: 주문이 이루어지는 Store의 전체 리소스 이름입니다 (예: projects/PROJECT/locations/LOCATION/brands/BRAND/stores/STORE). 세션은 참조된 Store 리소스와 해당 저장소의 상위 Brand 리소스에 지정된 구성을 사용합니다. BrandStore 간에 구성이 충돌하는 경우 Store 구성이 우선 적용됩니다.
  • session: projects/PROJECT/locations/LOCATION/sessions/SESSION 형식의 고유 세션 식별자입니다. session_id는 하나의 고객 상호작용 또는 대화를 고유하게 식별하는 클라이언트 생성 ID입니다.