デリバリー&テイクアウト AI エージェントのコンセプト

このドキュメントでは、デリバリー&テイクアウト AI Agent API の主なコンセプトの概要について説明します。

エージェントの構成

デリバリー&テイクアウト AI Agent の動作は、BrandStoreMenu の各 API リソースの構成によって影響を受けます。これらのリソースは、レストランの ID、実店舗の所在地、提供する商品を定義し、AI エージェントが注文を処理するために必要なコンテキストを提供します。

ブランド

Brand は最上位のリソースで、そのレストラン ブランドの 1 つ以上の店舗に対応するレストラン ブランドを表します。このレストランのすべての店舗で共有される構成が含まれています。Brand には、挨拶の動作や声の特徴など、エージェント ペルソナの多くの機能の設定を含めることができます。これらの機能の多くは、Store リソースで構成された値、またはセッションごとの構成(セッションのライフサイクルを参照)でオーバーライドできます。

ストア

Store リソースは、Brand に属する単一の物理的なレストランの場所を表します。タイムゾーン、ステータス(ACTIVEDISABLED など)、営業時間、時間帯(特定のメニュー項目が利用可能な「朝食」や「ランチ」などの時間帯)など、その場所固有の構成を定義します。

Menu リソースは、レストランが提供するすべての商品(販売可能なすべての商品の選択肢とカスタマイズを含む)を定義します。MenuStore に関連付ける必要があります。メニューは、単一アイテムの小さなリストから、ネストされた修飾子を含む組み合わせメニューの複雑なツリーまで、さまざまなメニュー構造に対応できるように設計されています。

Menu の主なコンポーネントは次のとおりです。

  • アイテム: 単品の前菜、ドリンク、サイドメニュー、セットメニューなど、販売可能な最上位の商品。
  • ModifierGroups: 「サイドメニューを選択」や「トッピングを追加」など、Item や別の Modifier に適用できる選択肢のコレクション。
  • 修飾子: ModifierGroup 内の個々のオプション(「フライドポテト」、「チーズ増量」、「コーラ」など)。修飾子はアイテムの価格を調整でき、さらにカスタマイズするためにネストされた ModifierGroup を含めることができます。
  • MenuCategories: 「前菜」や「ドリンク」などの組織部門。

Menu リソースは、projects/{project}/locations/{location}/menus/{menu} という形式の名前で識別されます。

メニューデータの構造化の詳細については、メニューデータの統合をご覧ください。

料理の注文セッション

デリバリー&テイクアウト セッションは、デリバリー&テイクアウト AI エージェントの中核であり、お客様と AI エージェント間の会話型インタラクションを可能にします。各セッションは 1 回の食品注文会話を表し、リアルタイムの双方向ストリーミング メソッド(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.modeTEXT(または JSON の場合は 2)に明示的に設定する必要があります。
  • Turn Lifecycle: 最初のターンでは turn_typeINITIALIZE に設定してセッション変数(メニューや店舗のメタデータなど)を挿入し、フォローアップ ターンでは SUBSEQUENT に設定します。

セッションのライフサイクル

デリバリー&テイクアウト AI エージェントのすべてのセッションは、Config メッセージを使用して指定されたクライアント提供の構成で開始する必要があります。Config は以下を指定します。

  • store: 注文が行われる Store の完全なリソース名(例: projects/PROJECT/locations/LOCATION/brands/BRAND/stores/STORE)。セッションは、参照される Store リソースと、そのストアの親 Brand リソースで指定された構成を受け継ぎます。BrandStore の間で構成の競合が発生した場合、Store の構成が優先されます。
  • session: projects/PROJECT/locations/LOCATION/sessions/SESSION 形式の固有のセッション識別子。session_id は、1 つの顧客とのやり取りまたは会話を一意に識別するクライアント生成 ID です。
  • mode: セッションのモード(HYBRID または TEXT)。BidiProcessOrder の場合、mode は省略可能で、デフォルトは HYBRID(音声とテキスト)です。ProcessOrder(単項 / REST)の場合、mode は明示的に TEXT に設定する必要があります