データストア ツール

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

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

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

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

  1. 会話エージェント コンソールを開き、プロジェクトを選択します。 Google Cloud
  2. プルダウン メニューからエージェントを選択します。
  3. ページの左端にあるメニューバーに移動し、[ツール] を選択します。
  4. 新しいデータストア ツールを作成するには、[+ 作成] をクリックします。ツールの一意の名前を入力し、[タイプ] のプルダウン メニューから [データストア] を選択します。必要に応じて、[説明] フィールドにツールの説明を入力します。
  5. [データストア] で、[データストアを追加] をクリックします。ポップアップ ウィンドウに、既存のデータストア(存在する場合)のリストが表示されます。ツールに追加するデータストアを選択します。
  6. (省略可)Agent Builder コンソールで新しいデータストアを作成するには、[新しいデータストアの作成] をクリックします。自動的にリダイレクトされます。 Agent Builder コンソール
  7. (省略可)新しいデータストアの構成が完了したら、[作成] をクリックします。新しいデータストアをツールに追加するには、会話エージェント(Dialogflow CX)コンソールで構成している [Create Tool] メニューに戻り、ページを更新します。使用可能なデータストアのリストに新しいデータストアが表示されます。
  8. [ツールを作成] 構成の上部にある [保存] をクリックして、新しいデータストア ツールを作成します。

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

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

データストア ツール: API

ツールごとに、各タイプのデータストアを 1 つ設定できます。ツールはこれらの各データストアにクエリを実行します。デフォルトでは、エージェントがユーザーに代わって 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\")"

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

フィルタリングに関するベスト プラクティス:

  • プレイブックが有効なフィルタの構築に関する制約を理解できるように、フィルタリングに使用できるフィールドと、これらの各フィールドの有効な値を指定します。たとえば、メニュー情報を保持するデータストアには、有効な値として「breakfast」、「lunch」、「dinner」の 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 を直接呼び出すか、コンソールの [ツール] ページでデータストア名をクリックすることで使用できます。

グラウンディングの信頼度

会話エージェント(Dialogflow CX)は、接続されたデータストアのコンテンツから生成されたレスポンスごとに信頼度レベルを計算します。これにより、レスポンス内のすべての情報がデータストア内の情報でサポートされていることの信頼度を測定します。許可するレスポンスを調整するには、満足できる最も低い信頼度レベルを選択します。指定した値以上の回答のみ信頼度が表示されます

信頼度レベルには、VERY_LOWLOWMEDIUMHIGHVERY_HIGH の 5 つがあります。

データストア モデルの選択

会話エージェント(Dialogflow CX)には、データストアで使用できる複数のモデルが用意されています。別のモデルを選択すると、データストア ツールのパフォーマンスに影響する可能性があります。一覧については、モデルのドキュメントをご覧ください。

要約プロンプト

プロンプトは、事前定義されたプレースホルダを含むテキスト テンプレートです。プレースホルダは実行時に適切な値に置き換えられ、生成されたテキストが AI モデルに送信されます。デフォルトのプロンプトを使用するか、独自のカスタム プロンプトを指定できます。カスタム プロンプトは、結果にプラスまたはマイナスの影響を与える可能性があります。

カスタム プロンプトのテキストを微調整して、追加の手順と詳細な例を含めることで、モデルが生成した結果に影響を与えることができます。カスタム プロンプトの作成方法については、データストアの設定のドキュメントをご覧ください。

ペイロードの設定

ペイロード設定を使用すると、レスポンス ペイロードにデータストア スニペットをリッチ コンテンツとして追加できます。このスニペットはメッセンジャーにレンダリングされます。この機能はオンまたはオフに切り替えることができます。

データストア ツールのレスポンス オプション

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

データストア ハンドラ

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

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

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

制限事項

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

アクセス制御

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

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

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

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

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

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

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

エージェントをテスト

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

エージェントのデプロイ

エージェントをデプロイする方法はいくつかあります。

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

  • 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)
ベストアンサーに対応する質問(よくある質問データストアの回答のみ) $request.knowledge.questions[0]
上位の回答の信頼度を基盤とする $request.knowledge.grounding_confidences[0]