データストア検索の構成

ブーストとフィルタの仕様を構成することで、Dialogflow CX データストア ツールから取得される検索結果に影響を与えることができます。これにより、エージェントがデータストアを使用して情報を検索する際に、よりパーソナライズされたコンテキスト認識型のインタラクションが可能になります。

必要に応じて、動的式を含めて、会話のコンテキストに基づいて結果を微調整できます。たとえば、エージェントが、エンドユーザーが「携帯電話」を所有していることを示す情報を取得したとします。会話の後半で「ボイスメールを確認するにはどうすればよいですか?」などの一般的なクエリに回答するときに、スマートフォンに関連するドキュメントをブーストするようにデータストア ツールを構成できます。

データストアの検索結果は、コンソール、API、または Dialogflow CX Messenger の統合を使用して構成できます。

検索条件の入力

検索結果を構成するには、SearchConfig オブジェクトのブースト仕様(BoostSpec)フィールドとフィルタ仕様(FilterSpec)フィールドを使用します。これらの構成は、ツール内のデータストアごとに適用され、接続された各データストアの動作を制御できます。

検索条件は、コンソールを使用するか、直接 API 呼び出しを送信するかのいずれかの方法で構成できます。

この 2 つには、次のような重要な違いがあります。

  • API 呼び出し: DetectIntent API 呼び出しを使用して、SearchConfig で BoostSpec と FilterSpec を送信します。リクエストには、完全な SearchConfig オブジェクトを指定する必要があります。直接 API 呼び出しによって送信された SearchConfig は、コンソールを使用して送信された SearchConfig を常にオーバーライドします。動的式とパラメータ参照はサポートされていません。

  • コンソール: コンソールは、BoostSpec 構成と FilterSpec 構成を使用して、検索リクエストとともに送信する SearchConfig オブジェクトを作成します。必要に応じて、パラメータ参照と動的式を含めて、会話から記録されたコンテキスト データに結果を合わせることができます。完全な SearchConfig オブジェクトではなく、ConditionBoostSpec オブジェクトと、FilterSpecs を作成するためのフィルタ文字列のリストのみを指定する必要があります。

エンドユーザー情報は、detectIntentRequest で JSON として提供されます。想定されるスキーマはないため、オブジェクト プロパティを定義できます。

ブースト仕様(Boost spec)

ブースト仕様を使用すると、特定のドキュメントにブースト値を適用することで、検索結果のランキングを変更できます。1 つのデータストアに複数のブースト仕様を追加できます。

各ブースト仕様は、1 つの ConditionBoostSpec オブジェクトを表す JSON 文字列として入力します。

主なフィールド:

  • condition:(文字列)ブーストを適用するタイミングを指定する式。これは、標準のフィルタ式の構文を使用します。Dialogflow CX 式を使用して、$session.params.YOUR_PARAM_NAME や $request.end-user-metadata.YOUR_KEY などの結果を動的に作成できます。
  • boost:(数値)ブーストの強度を決定する -1.0 ~ 1.0 の値。
    • 正の値を指定すると、一致するドキュメントがプロモートされます。値を 1.0 に設定すると、強力なプロモーションが設定されます。
    • 負の値は、一致するドキュメントの順位を下げます。-1.0 の値を指定すると、大幅に降格されます。
    • 値 0.0 はブーストを適用しないため、使用できません。
  • boostControlSpec: 条件とブーストの基本的な組み合わせよりも、カスタマイズされたランキングをより細かく制御できます。このフィールドの構成の詳細については、リファレンス ドキュメントをご覧ください。

コンソール入力の例:

コンソールでエージェントを構成する場合は、次の形式で ConditionBoostSpecs のリストを指定します。

{
  "condition": "uri: ANY(\"http://www.example.com/docs/$session.params.doc_id\")",
  "boost": 0.5
}

API 入力の例:

API を直接呼び出す場合は、完全な SearchConfig オブジェクトで ConditionBoostSpecs を指定する必要があります。次の検索構成は、ブースト仕様を示しています。

"searchConfig": {
  "boostSpecs": [
    {
      "dataStores": [ "DATASTORE_ID" ],
      "spec": [
        {
          "conditionBoostSpecs": {
            "condition": "CONDITION",
            "boost": "1.0"
          }
        }
      ]
    }
  ]
}

フィルタ仕様(フィルタ仕様)

フィルタ仕様では、定義された条件に一致するドキュメントのみが含まれるように検索結果を制限します。1 つのデータストアに複数のフィルタ仕様を追加できます。

各フィルタ仕様は、文字列式として入力する必要があります。文字列は、標準のフィルタ式の構文に準拠している必要があります。この文字列内で Dialogflow CX 式を使用して、$session.params.YOUR_PARAM_NAME や $request.end-user-metadata.YOUR_KEY などの結果を動的にすることができます。

コンソール フィルタ仕様文字列の例:

コンソールを使用してエージェントを構成する場合は、filter 文字列のリストを指定して FilterSpec オブジェクトを形成する必要があります。

この例では、numeric_field が $session.params.min_value の値以上で、stock_availability が "IN_STOCK" であるドキュメントのみが返されます。

"numeric_field >= $session.params.min_value AND stock_availability: ANY(\"IN_STOCK\")"

API フィルタ構成の例:

API を直接呼び出す場合は、完全な SearchConfig オブジェクトに filter 文字列を指定する必要があります。

"searchConfig": {
  "filterSpecs": [
    {
      "dataStores": [ "DATASTORE_ID" ],
      "filter": "CONDITION"
    }
  ]
}

Dialogflow CX の動的式

BoostSpec 条件と FilterSpec 文字列の両方に Dialogflow CX 式を組み込んで、動的にすることができます。これにより、進行中の会話から取得したコンテキスト データに基づいて検索動作をカスタマイズできます。動的式は、直接 API 呼び出しではサポートされていません。コンソールを使用して構成する場合にのみ使用できます。

会話コンテキスト データには、次の 2 つの方法でアクセスできます。

  • セッション パラメータ: $session.params.YOUR_PARAMETER_ID を使用して会話中に収集された値。
  • エンドユーザーのメタデータ: $request.end-user-metadata.YOUR_KEY を使用して DetectIntentRequest で渡されるエンドユーザーに関するメタデータ。このオプションを使用できるようにするには、DetectIntent 呼び出しの QueryParameters に end_user_metadata が含まれていることを確認します。詳細については、endUserMetadata をご覧ください。

使用可能なシステム関数と式構文の詳細については、条件とシステム関数のリファレンスをご覧ください。

実行時に適用される検索条件

データストア ツールが検索を実行すると、次の処理が行われます。

  1. ブースト仕様に指定した JSON 文字列を評価します。有効な JSON 文字列はそれぞれ ConditionBoostSpec オブジェクトに変換されます。これらは、特定のデータストア接続の BoostSpecs オブジェクトにグループ化され、全体的な SearchConfig に追加されます。
  2. フィルタ仕様に指定した文字列を Dialogflow CX 式として評価します。結果の各フィルタ文字列を使用して、データストアの FilterSpecs オブジェクトを作成します。このオブジェクトも SearchConfig に追加されます。
  3. この動的に構築された SearchConfig を、データストアに送信される検索リクエストの QueryParameters に含めます。

検索条件を構成する

検索条件を構成する前に、次の前提条件が完了していることを確認してください。

  • 既存の Dialogflow CX エージェント。
  • 1 つ以上のデータストアが有効になっているエージェント用に構成されたデータストア ツール。

コンソールの構成

  1. 会話エージェント コンソールを開き、Google Cloud プロジェクトを選択します。
  2. プルダウン メニューからエージェントを選択します。
  3. 左側のメニューに移動し、[ツール] をクリックします。構成するデータストア ツールを選択します。
  4. ツールの編集ページで、[データストア] セクションに移動します。変更するデータストアの横にある設定アイコン(⚙️)をクリックします。
  5. [データストアを構成する] メニューが表示されます。ここで、ブースト仕様とフィルタ仕様を追加して、検索結果を変更できます。
    • ブースト仕様の場合は、ConditionBoostSpec を定義する JSON オブジェクトを指定します。詳細については、ブーストの仕様をご覧ください。
    • [フィルタ仕様] に、フィルタ条件を定義する文字列を指定します。詳細については、フィルタ仕様をご覧ください。
  6. 仕様を追加して構成したら、サイドパネルの下部にある [確認] をクリックします。
  7. データストア ツールの編集ページで [保存] をクリックして変更を保存します。

API 設定

インテント検出リクエストを送信するときに、検索構成データを Dialogflow CX に渡すことができます。この情報はセッションで維持されないため、すべてのインテント検出リクエストで提供する必要があります。

この情報は、Sessions.detectIntent メソッドの queryParams.searchConfig フィールドに入力します。

セッション リファレンスのプロトコルとバージョンを選択:

プロトコル V3 V3beta1
REST セッション リソース セッション リソース
RPC セッション インターフェース セッション インターフェース
C++ SessionsClient 利用できません
C# SessionsClient 利用できません
Go SessionsClient 利用できません
Java SessionsClient SessionsClient
Node.js SessionsClient SessionsClient
PHP 利用不可 利用できません
Python SessionsClient SessionsClient
Ruby 利用不可 利用できません

Dialogflow CX Messenger の構成

検索構成データを Dialogflow CX Messenger の統合に提供できます。詳細については、setContext メソッドをご覧ください。

検索仕様または検索構成を適用するには、ウェブサイトに埋め込む際に、次のスニペットを Dialogflow CX Messenger コードに追加する必要があります。

<script>
  document.addEventListener('df-messenger-loaded', () => {
    const dfMessenger = document.querySelector('df-messenger');
    const searchConfig = { ... }
    dfMessenger.setQueryParameters(searchConfig);
  });
</script>

詳しくは、setQueryParameters メソッドをご覧ください。

トラブルシューティング

次の解決策は、構成中に発生する一般的な問題に対処するものです。さまざまなセッション パラメータとエンドユーザー メタデータ値をトリガーする会話をシミュレートして、構成を徹底的にテストします。

無効な式

Boost Spec 条件または Filter Spec 文字列に無効な Dialogflow CX 式(構文が正しくない、存在しないパラメータを参照しているなど)が含まれている場合、式のコンパイルは失敗します。式コンパイルに関連するエラーは、通常、diagnostic_info フィールド内の DetectIntentResponse で SystemFunctionResults として返されます。

ConditionBoostSpec JSON が無効です

会話エージェント コンソールは、ConditionBoostSpec JSON 文字列を保存するときに検証を行い、有効な JSON であるかどうか、またその構造を ConditionBoostSpec オブジェクトにマッピングできるかどうかを確認します。JSON が有効であっても、基盤となる検索サービスに従って無効な SearchConfig が生成される場合(パラメータ置換後の無効な条件文字列など)、検索サービスはエラーを返します。

ランタイム置換エラー

ConditionBoostSpec JSON 文字列が有効で解析可能であっても、そのフィールド(条件文字列など)内の Dialogflow CX 式のランタイム置換中にエラーが発生した場合、これらのエラーは diagnostic_info で SystemFunctionResults として報告されます。

コンパイル済みの SearchConfig を確認する

クエリの実行時に適用された SearchConfig は、レスポンスの search_signals で確認できます。SearchConfig を確認すると、ここに記載されていないその他の問題に関する分析情報を得ることができます。

次のステップ