訂餐 AI 代理概念

本文將簡要介紹訂餐 AI 代理 API 的重要概念。

代理程式設定

訂餐 AI 代理的行為會受到多個 API 資源的設定影響:Brand、Store 和 Menu。這些資源定義了餐廳的身分、實體位置和提供的產品,為 AI 代理程式處理訂單提供必要的情境資訊。

品牌

Brand 是頂層資源,代表與一或多個餐廳品牌地點對應的餐廳品牌。其中包含餐廳所有地點共用的設定。Brand 可包含許多代理程式角色功能的設定,例如問候行為和語音特徵。其中許多功能可由商店資源中設定的值覆寫,甚至可由每個工作階段的設定覆寫 (請參閱「工作階段生命週期」)。

儲存

Store 資源代表屬於 Brand 的單一實體餐廳位置。定義該地點專屬的設定,例如時區、狀態 (例如 ACTIVE、DISABLED)、營業時間和時段 (例如「早餐」或「午餐」等時段,提供特定菜單項目)。

Menu 資源會定義餐廳提供的所有產品,包括每個可銷售產品的所有可能選項和自訂項目。Menu 必須與 Store 建立關聯。菜單設計彈性十足,可容納各種菜單結構,從獨立品項的小清單,到包含巢狀修飾符的套餐複雜樹狀結構,都能輕鬆應付。

Menu 的主要元件包括:

  • 項目:可銷售的頂層產品,例如單點主菜、飲料、配菜或套餐。
  • ModifierGroups:適用於 Item 或其他 Modifier 的選項集合,例如「選擇配菜」或「加料」。
  • 加購品:ModifierGroup 中的個別選項,例如「薯條」、「起司加量」或「可樂」。修飾符可以調整商品價格,並可包含巢狀 ModifierGroup,進一步自訂。
  • MenuCategories:機構單位,例如「開胃菜」或「飲料」。

Menu 資源的名稱格式如下:projects/{project}/locations/{location}/menus/{menu}。

如要進一步瞭解如何建立選單資料結構,請參閱整合選單資料。

訂餐工作階段

訂餐工作階段是訂餐 AI 代理的核心,可讓顧客與 AI 代理進行對話互動。每個工作階段代表單一的餐點訂購對話,並使用即時雙向串流方法 (FoodOrderingService.BidiProcessOrder) 或以回合為基礎的一元要求-回應方法 (FoodOrderingService.ProcessOrder) 管理。

BidiProcessOrder RPC 方法

這是雙向串流 RPC:用戶端應用程式會將輸入內容串流傳送給代理程式,而代理程式會同時將回應串流傳送回用戶端。這項功能可實現低延遲的即時多模態 (語音和文字) 互動。

  • 用戶端到代理串流:用戶端會傳送一連串的 BidiProcessOrderRequest 訊息,內含音訊輸入內容 (顧客語音)、文字輸入內容或事件輸入內容 (例如顧客使用輕觸介面更新購物車,或是得來速餐廳硬體偵測到車輛駛離事件)。
  • 服務專員到客戶的串流:服務專員會傳回一連串的 BidiProcessOrderResponse 訊息,內含音訊輸出內容 (合成的服務專員語音)、文字輸出內容、辨識語音的轉錄稿、客戶訂單狀態的更新,或其他信號 (例如偵測到的中斷)。

ProcessOrder RPC 和 REST 方法

ProcessOrder 是單元要求-回應方法,專為以文字為基礎的輪流點餐整合 (例如聊天小工具、網路表單和 REST 用戶端) 而設計。可透過 gRPC 和 REST (POST /v1/{config.session=projects/*/locations/*/sessions/*}:processOrder) 存取。

與 BidiProcessOrder 不同,ProcessOrder 會對個別要求/回應回合執行作業,且僅限文字:

  • 模式規定:config.mode 必須明確設為 TEXT (或 JSON 中的 2)。
  • 回合生命週期:在初始回合中,應將 turn_type 設為 INITIALIZE,以便注入工作階段變數 (例如選單和商店中繼資料),後續回合則應設為 SUBSEQUENT。

工作階段生命週期

訂餐 AI 代理中的每個工作階段都必須以用戶端提供的設定開始,並使用 Config 訊息指定設定。Config 會指定:

  • store:要下單的 Store 完整資源名稱 (例如 projects/PROJECT/locations/LOCATION/brands/BRAND/stores/STORE)。工作階段會採用參照 Store 資源和該商店父項 Brand 資源中指定的設定。如果 Brand 和 Store 的設定有衝突,系統會優先採用 Store 的設定。
  • session:工作階段的專屬 ID,格式為 projects/PROJECT/locations/LOCATION/sessions/SESSION。 session_id 是由用戶端產生的 ID,可專門識別單一客戶互動或對話。
  • mode:工作階段模式 (HYBRID 或 TEXT)。如果是 BidiProcessOrder,mode 為選用參數,預設為 HYBRID (語音和文字)。如果是 ProcessOrder (一元 / REST),mode 必須明確設為 TEXT。