会話アクション

会話型アクションを使用すると、ユーザーがプロダクトやサービスにアクセスできるようにする独自の会話型インターフェースによって Google アシスタントを拡張できます。アクションは、アシスタントの強力な自然言語理解(NLU)エンジンを利用して、自然言語入力を処理して理解し、その入力に基づいてタスクを実行します。

概要

会話型アクションは、会話へのエントリ ポイント(呼び出しと呼ばれます)を定義するシンプルなオブジェクトです。

  • 「呼び出し」とは、アクションの 1 つと会話を開始するようユーザーがアシスタントに指示する方法を定義するものです。アクションの呼び出しは、ユーザーがアクションをリクエストしたときに一致する単一のインテントによって定義されます。
  • 会話は、アクションの呼び出し後にユーザーがそのアクションとやり取りする方法を定義します。インテントタイプシーンプロンプトを使って会話を作成します。
  • さらに、アクションは、Webhook を介してアクションと通信するウェブサービスであるフルフィルメントに、追加の作業を委任できます。これにより、データの検証、他のウェブサービスの呼び出し、ビジネス ロジックの実行などを行うことができます。

ユーザーにとって重要なユースケースに基づいて、1 つまたは複数のアクションを Actions プロジェクトと呼ばれる論理コンテナにバンドルします。Actions プロジェクトには、呼び出しモデル全体(すべての呼び出しのコレクション)が含まれており、ユーザーはこれにより、会話モデル内の論理的な場所(ユーザーが発話できるすべてのこと、そしてユーザーにどのような応答を返すことができるか)から始めることができます。

図 1. 会話モデルへのエントリ ポイントとして機能するアクションのコレクション。呼び出し可能なインテントは、グローバルであるとみなされます。

呼び出し

呼び出しは、ブランド、名前、ペルソナを表す表示名に関連付けられます。表示名は、ユーザーがアシスタントにアクションを呼び出せるようにします。この表示名を単独で使用する(メイン呼び出しと呼びます)か、オプションのディープリンク フレーズと組み合わせてアクションを呼び出すこともできます。

たとえば、ユーザーは「Facts about Google」という表示名のプロジェクト内で、次のフレーズを話しかけて 3 つの別々のアクションを呼び出すことができます。

  • 「OK Google, Google の豆知識を教えて」
  • 「OK Google, Google の豆知識を教えて」
  • 「OK Google, Google の豆知識を聞いて、歴史上の事実を知りたい」

この例の最初の呼び出しはメイン呼び出しです。この呼び出しは、actions.intent.MAIN という名前の特別なシステム インテントに関連付けられています。2 番目と 3 番目の呼び出しは、ユーザーが特定の機能をリクエストできるように追加のフレーズを指定できるディープリンク呼び出しです。これらの呼び出しは、グローバルとして指定したユーザー インテントに対応しています。この例の各呼び出しは、会話へのエントリ ポイントを提供し、1 つのアクションに対応しています。

図 2. メイン呼び出しの例

図 2 は、一般的なメイン呼び出しフローを示しています。

  1. ユーザーがアクションをリクエストする際、通常は表示名を使ってアシスタントにリクエストします。
  2. アシスタントは、ユーザーのリクエストを、リクエストに一致する対応するインテントと照合します。この場合は actions.intent.MAIN です。
  3. アクションはインテントの一致が通知され、対応するプロンプトでユーザーとの会話を開始します。

会話

会話は、アクションが呼び出された後にユーザーが操作する方法を定義します。やり取りを作成するには、会話のための有効なユーザー入力、その入力を処理するロジック、ユーザーに応答するためのプロンプトを定義します。次の図と説明は、会話の低レベルのコンポーネント(インテントタイプシーンプロンプト)に対する一般的な会話のターンの仕組みを示しています。

図 3. 会話の例

図 3 は、一般的な会話のターンを示しています。

  1. ユーザーが何かを言うと、アシスタント NLU が入力を適切なインテントと照合します。インテントの言語モデルがユーザー入力にほぼ一致するか完全に一致する場合、そのインテントは一致とみなされます。言語モデルを定義するには、トレーニング フレーズ(ユーザーが発話したいことの例)を指定します。アシスタントは、これらのトレーニング フレーズを受け取って拡張し、インテントの言語モデルを作成します。
  2. アシスタント NLU はインテントに一致すると、入力から必要なパラメータを抽出できます。これらのパラメータには、日付や数値などの型が関連付けられています。インテントのトレーニング フレーズの特定の部分にアノテーションを付けて、抽出したいパラメータを指定します。
  3. その後、一致したインテントがシーンで処理されます。シーンは、アクションの論理的なエグゼキュータ、つまり手間のかかる作業を行い、会話を進めるために必要なロジックを実行すると考えることができます。シーンはループ実行され、インテント パラメータの検証、スロットフィルの実行、ユーザーへのプロンプトの送信などを行える柔軟な実行ライフサイクルが提供されます。
  4. シーンの実行が完了すると、通常はユーザーにプロンプトを返して会話を続けるか、必要に応じて会話を終了できます。

フルフィルメント

呼び出し中または会話中に、アクションは、フルフィルメント サービスに通知する Webhook をトリガーして、なんらかのタスクを実行することができます。

図 4. 会話の例

図 4 は、フルフィルメントを使用してプロンプトを生成する方法について説明します。これは、フルフィルメントの一般的な使用方法を示しています。

  1. アクションの実行の特定の時点で、JSON ペイロードを使用して登録済みの Webhook ハンドラ(フルフィルメント サービス)にリクエストを送信する Webhook をトリガーできます。
  2. フルフィルメントは、REST API を呼び出してデータ検索を行ったり、JSON ペイロードのデータの一部を検証したりするなど、リクエストを処理します。フルフィルメントを使用する一般的な方法は、実行時に動的プロンプトを生成して、現在のユーザーに合わせて会話をカスタマイズする方法です。
  3. フルフィルメントは、JSON ペイロードを含むレスポンスをアクションに返します。ペイロードのデータを使用して実行を続行し、ユーザーに応答できます。