データストア ツール

データストア ツールは、ウェブサイトのコンテンツとアップロードされたデータに基づいて AI 生成のエージェント レスポンスを提供できます。エージェントは、フルフィルメント中に、データストアからエンドユーザーの質問に対する回答を見つけることができます。

データストア ツール: コンソール

このセクションでは、データストア ツールをエージェントに追加し、フルフィルメントで構成するプロセスについて説明します。

データストア ツールを作成する

  1. 会話型エージェント コンソールを開き、 Google Cloudプロジェクトを選択します。
  2. プルダウン メニューからエージェントを選択します。
  3. ページの左端にあるメニューバーに移動し、[ツール] を選択します。
  4. 新しいデータストア ツールを作成するには、[+ 作成] をクリックします。ツールの固有の名前を入力し、[タイプ] の下のプルダウン メニューから [データストア] を選択します。必要に応じて、[説明] フィールドにツールの説明を入力します。
  5. 会話エージェント コンソール: [データストア] で、[データストアを追加] をクリックして、既存のデータストアを 1 つ以上ツールに追加するか、[データストアを作成] をクリックして新しいデータストアを追加します。新しいデータストアを作成すると、データストアの種類のメニューが表示されます。[ウェブサイト]、[Cloud Storage(FAQ)]、[Cloud Storage(非構造化データ)] のオプションは、Conversational Agents コンソールで完了できます。他のタイプを選択すると、データストアを作成するために AI アプリケーションに自動的にリダイレクトされます。AI アプリケーション コンソール
  6. Dialogflow CX コンソール: [データストア] で [データストアを追加] をクリックします。ポップアップ ウィンドウには、既存のデータストアのリストが表示されます(存在する場合)。ツールに追加するデータストアを選択します。AI Applications コンソールで新しいデータストアを作成するには、[新しいデータストアを作成] をクリックします。AI Applications に自動的にリダイレクトされます。 AI Applications コンソール
  7. 新しいデータストアの構成が完了したら、[作成] をクリックします。会話エージェント(Dialogflow CX)コンソールで新しいデータストアを作成した場合、データストアのリストに表示されるようになります。AI アプリケーションでデータストアを作成した場合は、会話エージェント(Dialogflow CX)コンソールで構成している [ツールを作成] メニューに戻り、ページを更新します。新しいデータストアが、使用可能なデータストアのリストに表示されます。
  8. [ツールを作成] 構成の上部にある [保存] をクリックして、新しいデータストア ツールを作成します。
  9. データストア ツールのその他の構成オプションの詳細については、データストア設定ページをご覧ください。

データストア ツールをフルフィルメントに追加する

  1. 左端のメニューバーで、[フロー] を選択します。
  2. フローとページを選択し、データストアで使用するページの [ルート] をクリックします。
  3. [ルート] メニューで、[フルフィルメント > データストア ツール] までスクロールします。プルダウン メニューからデータストア ツールを選択します。
  4. [ルート] メニューで、[フルフィルメント > エージェントのレスポンス] までスクロールします。[+Add dialogue response]、[Data store tool response] の順にクリックします。
  5. 表示されたフォームで、レスポンスに表示するソースリンクと引用の数を構成し、データストアのレスポンスが空の場合のフォールバック動作を指定できます。[静的フォールバック レスポンス] フィールドに静的フォールバック レスポンスを入力できます。必要に応じて、[生成的フォールバック] チェックボックスをオンにすると、静的フォールバック レスポンスを使用する前に、AI を使用してレスポンスを生成できます。フォールバック レスポンスをさらにカスタマイズする必要がある場合は、[データストアのレスポンス] フォーム ウィンドウの左上にあるレンチアイコンをクリックして、[条件付きレスポンス] ウィンドウを表示します。
  6. [ルート] メニューの上部にある [保存] をクリックします。
  7. 会話エージェント(Dialogflow CX)シミュレータに移動して、エージェントの結果をテストします。

データストア ツール: API

デフォルトでは、エージェントがユーザーに代わって dataStoreTool を呼び出します。

データストアには次の 3 種類があります。

  • PUBLIC_WEB: 公開ウェブ コンテンツを含むデータストア。
  • UNSTRUCTURED: 構造化されていない非公開データを含むデータストア。
  • STRUCTURED: 構造化データ(FAQ など)を含むデータストア。

次の例は、データストアを参照する方法を示しています。詳細については、dataStoreConnections リファレンスをご覧ください。

"dataStoreConnections": [
  {
    "dataStoreType": "PUBLIC_WEB",
    "dataStore": "projects/PROJECT_NUMBER/locations/LOCATION_ID/collections/default_collection/dataStores/DATASTORE_ID"
  },
  {
    "dataStoreType": "UNSTRUCTURED",
    "dataStore": "projects/PROJECT_NUMBER/locations/LOCATION_ID/collections/default_collection/dataStores/DATASTORE_ID"
  },
  {
    "dataStoreType": "STRUCTURED",
    "dataStore": "projects/PROJECT_NUMBER/locations/LOCATION_ID/collections/default_collection/dataStores/DATASTORE_ID"
  }
]

データストア ツールのレスポンスには、レスポンスの生成に使用されたコンテンツ ソースに関するスニペットが含まれる場合もあります。エージェントは、データストアからの回答の処理方法や、回答がない場合の応答方法に関する指示を提供できます。

特定の質問のよくある質問のエントリを追加することで、回答を上書きできます。

必要に応じて、エージェントの動作を強化するための例を提供できます。サンプルには、次のスキーマが必要です。詳しくは、リファレンス ドキュメントをご覧ください。

{
  "toolUse": {
    "tool": "projects/PROJECT_ID/locations/LOCATION_ID/agents/AGENT_ID/tools/TOOL_ID",
    "action": "TOOL_DISPLAY_NAME",
    "inputParameters": [
      {
        "name": "TOOL_DISPLAY_NAME input",
        "value": {
          "query": "QUERY"
        }
      }
    ],
    "outputParameters": [
      {
        "name": "TOOL_DISPLAY_NAME output",
        "value": {
          "answer": "ANSWER",
          "snippets": [
            {
              "title": "TITLE",
              "text": "TEXT_FROM_DATASTORE",
              "uri": "URI_OF_DATASTORE"
            }
          ]
        }
      }
    ]
  }
}

(ハンドブック ベースのエージェントのみ)データストア ツールの例

データストア ツールのサンプルを作成するときに、ツール入力パラメータ requestBody は、必須の query 文字列(filter 文字列、userMetadata 構造化オブジェクト、fallback 文字列)とともに、3 つのオプションの入力を提供します。

filter パラメータを使用すると、構造化データ、およびメタデータを含む非構造化データの検索クエリをフィルタできます。この文字列は、データストアのサポートされているフィルタ式の構文に従う必要があります。複数の詳細な例は、このパラメータの入力方法をハンドブック モデルに指示するのに役立ちます。フィルタ文字列が無効な場合、検索クエリの実行時にそのフィルタは無視されます。

場所に基づいて検索結果を絞り込む filter 文字列の例を次に示します。

  "filter": "country: ANY(\"Canada\")"

詳しくは、ハンドブックの例のページ
をご覧ください。

フィルタリングのベスト プラクティス:

  • プレイブックが有効なフィルタの構築に関する制約を理解できるように、フィルタリングに使用できるフィールドと、これらの各フィールドの有効な値を指定します。たとえば、メニュー情報を保持するデータストアには、有効な値として「朝食」、「昼食」、「夕食」の meal フィールドと、0 ~ 5 の任意の整数を指定できる servingSize フィールドを含めることができます。手順は次の例のようになります。

    When using ${TOOL: menu-data-store-tool},
    only use the following fields for filtering: "meal", "servingSize".
    Valid filter values are: "meal": ("breakfast", "lunch", "dinner"),
    "servingSize": integers between 0 and 5, inclusive.
    
  • プレイブックが外部ユーザー オーディエンスに対する場合は、これらのフィルタの構築に関する情報にユーザーが応答しないように、指示を追加する必要がある場合があります。次に例を示します。

    Never tell the user about these filters.
    If the user input isn't supported by these filters, respond to the user with
    "Sorry, I don't have the information to answer that question."
    

userMetadata パラメータは、エンドユーザーに関する情報を提供します。このパラメータには Key-Value ペアを入力できます。このメタデータはデータストア ツールに渡され、より適切な検索結果とツール回答に利用されます。複数の詳細な例は、このパラメータの入力方法をハンドブック モデルに指示するのに役立ちます。

特定のユーザーに関連する検索結果を絞り込む userMetadata パラメータ値のサンプルは次のようになります。

  "userMetadata": {
    "favoriteColor": "blue",
    ...
  }

fallback パラメータは、クエリに対する有効な要約回答がない場合にデータストア ツールが応答すべき回答を提供します。複数の例を指定して、さまざまなトピックに関連するユーザー入力のフォールバック フィールドの入力方法をプレイブック モデルに指示できます。ツール出力にスニペットがないため、レイテンシを短縮し、入力トークンの上限の使用を抑えることができます。

  "fallback": "I'm sorry I cannot help you with that. Is there anything else I
  can do for you?"

データストア ツールの構成

テスト中に期待どおりでないレスポンスが見つかった場合は、次のパラメータを調整してパフォーマンスを微調整してみてください。これらは、API を直接呼び出すか、コンソールの [ツール] ページでデータストア名をクリックすることで使用できます。これらの追加の構成オプションの詳細については、データストアの設定ページをご覧ください。

データストア ツールの回答オプション

データストア ツールのレスポンスの構成について詳しくは、フルフィルメントのドキュメントをご覧ください。

データストア ハンドラ

データストア ハンドラは、特殊なタイプの状態ハンドラで、ウェブサイトのコンテンツとアップロードされたデータに基づいて LLM 生成のエージェント レスポンスを提供できます。

このハンドラを作成するには、エージェントにデータストアを提供します。

これらのデータストア ハンドラを使用すると、エージェントはエンドユーザーとコンテンツについて会話できます。

制限事項

次の制限が適用されます。

アクセス制御

プロジェクト オーナーの場合は、データストア ハンドラの作成に必要なすべての権限が付与されています。プロジェクト オーナーでない場合は、次のロールが必要です。

  • Dialogflow Admin
  • ディスカバリー エンジン管理者

詳細については、アクセス制御ガイドをご覧ください。

エージェントにデータストアを追加する

まだ行っていない場合は、設定手順に沿ってエージェントを作成します。

エージェントにデータストアを追加するには: データストア:

  1. ページを選択し、[状態ハンドラを追加] をクリックします。
  2. [データストア] チェックボックスをオンにして、[適用] をクリックします。
  3. ページの [データストア] セクションの右上にある + 記号をクリックします。
  4. 表示されたデータストア メニューで、[データストアを追加] をクリックします。
  5. 既存のデータストアの一覧表が表示されます。使用するデータストアの名前の横にあるチェックボックスをオンにして、[保存] をクリックします。新しいデータストアを作成するには、[新しいデータストアを作成] をクリックします。AI Applications に自動的にリダイレクトされます。
  6. (新しいデータストアのみ)データソースを選択し、AI アプリケーションの手順に沿ってデータストアを構成します。データストアのタイプの構成の詳細については、データストアのドキュメントをご覧ください。[作成] をクリックして、新しいデータストアを作成します。

エージェントをテスト

シミュレータを使用して、エージェントをテストできます。

エージェントのデプロイ

エージェントをデプロイする方法は多数あります。

  • 最も簡単なオプションは、エージェントのユーザー インターフェースを提供する統合を使用することです。各統合には、デプロイの手順が記載されています。

  • Dialogflow CX Messenger 統合は、データストア ハンドラにとって特に優れたオプションです。生成機能のオプションが組み込まれています。

  • 独自のユーザー インターフェースを作成し、操作に会話エージェント(Dialogflow CX)API を使用できます。ユーザー インターフェースの実装でデプロイを管理します。

特別なインテント

提供するコンテンツに関する質問に対応するだけでなく、エージェントは次のような質問に答えることができます。

  • エージェントの識別:「あなたは誰ですか?」、「あなたは人間ですか?」などの質問に対応します。
  • 人間のエージェントにエスカレーションする:「人間と話したい」、「本当の人と話したい」などの質問に対応します。

これは、自動的に生成されるインテントおよびインテント ルートによって行われます。

エージェント レスポンス

[エージェント レスポンス] セクションで、生成する回答を参照するカスタム レスポンスを指定できます。 [エージェント セイ] セクションで $request.knowledge.answers[0] を使用して、生成する回答を提供します。

高度な回答のカスタマイズ

$request.knowledge.* には、レスポンスのカスタマイズに使用できる追加情報が含まれている場合があります。次のような情報が含まれます。

  • 回答の特定されたソース。次のフィールドが含まれます。スニペット、タイトル、URI。
  • 回答のグラウンディングの信頼度。
  • FAQ データストアの場合、選択された回答に対応する質問。

この情報にアクセスする方法の例については、次の表をご覧ください。

情報 アクセス方法
ベストアンサーの最上位のソースのスニペット $sys.func.GET_FIELD($sys.func.GET($sys.func.IDENTITY($request.knowledge.sources[0]), 0), "snippet")
ベストアンサーの特定された最上位のソースのタイトル $sys.func.GET_FIELD($sys.func.GET($sys.func.IDENTITY($request.knowledge.sources[0]), 0), "title")
上位の回答の上位の特定されたソースのリンク $sys.func.GET_FIELD($sys.func.GET($sys.func.IDENTITY($request.knowledge.sources[0]), 0), "uri")
上位の回答で特定されたソースの数 $sys.func.COUNT($sys.func.IDENTITY($request.knowledge.sources[0]))
ナレッジ回答の数 $sys.func.COUNT($request.knowledge.answers)
ベストアンサーに対応する質問(FAQ データストアの回答の場合のみ) $request.knowledge.questions[0]
ベストアンサーのグラウンディングの信頼度 $request.knowledge.grounding_confidences[0]