データストア ツールは、ウェブサイトのコンテンツやアップロードされたデータに基づいて、AI 生成によるエージェントの回答を提供できます。エージェントは、フルフィルメント中にデータストアからエンドユーザーの質問に対する回答を見つけることができます。
データストア ツール: コンソール
このセクションでは、データストア ツールをエージェントに追加し、フルフィルメントで構成する方法について説明します。
データストア ツールを作成する
- 会話エージェント コンソールを開き、 Google Cloudプロジェクトを選択します。
- プルダウン メニューからエージェントを選択します。
- ページの左端にあるメニューバーで [ツール] を選択します。
- [+ 作成] をクリックします。ツールの固有の名前を入力し、[タイプ] のプルダウン メニューから [データストア] を選択します。必要に応じて、[説明] フィールドにツールの説明を入力します。
- [データストアを追加] をクリックします。表示されたウィンドウには、既存のデータストアのリストが表示されます(存在する場合)。ツールに追加するデータストアを選択します。
- (省略可)Vertex AI Agent Builder コンソールで新しいデータストアを作成するには、[新しいデータストアを作成] をクリックして自動的にリダイレクトします。
- (省略可)新しいデータストアを構成したら、[作成] をクリックします。新しいデータストアをツールに追加するには、Dialogflow CX コンソールの [ツールを作成] メニューに戻り、ページを更新します。新しいデータストアが使用可能なデータストアのリストに表示されます。
- [Create Tool] 構成の上部にある [保存] をクリックして、新しいデータストア ツールを作成します。
データストア ツールをフルフィルメントに追加する
- 左端のメニューバーで [フロー] を選択します。
- フローとページを選択し、[ルート] をクリックしてデータストアで使用します。
- [フルフィルメント] > [データストア ツール] に移動し、プルダウン メニューからデータストア ツールを選択します。
- [フルフィルメント] > [Agent responses] に移動し、[+Add dialogue response] をクリックして、[データストア tool response] をクリックします。
- レスポンスに表示するソースリンクと引用の数を構成し、データストアのレスポンスが空の場合のフォールバック動作を指定します。[静的フォールバック レスポンス] フィールドに静的フォールバック レスポンスを入力します。必要に応じて、[生成的フォールバック] チェックボックスをオンにして、静的フォールバック レスポンスを使用する前に AI を使用してレスポンスを生成します。フォールバック レスポンスをカスタマイズするには、[データストア レスポンス] フォーム ウィンドウの左上にあるレンチアイコンをクリックして、[条件付きレスポンス] ウィンドウを開きます。
- [ルート] メニューの上部にある [保存] をクリックします。
- Dialogflow CX シミュレータに移動して、エージェントの結果をテストします。
省略可能なクエリ オーバーライド セッション パラメータ
セッション パラメータ knowledge.overrides.query を使用して、このデータストア ツールに渡されるクエリをオーバーライドできます。このパラメータが空でない場合、ツールはユーザーのクエリの代わりにこのパラメータを使用します。
データストア ツール: 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"
}
]
}
}
]
}
}
(Playbook ベースのエージェントのみ)データストア ツールの例
データストア ツールのサンプルを作成するとき、ツール入力パラメータ requestBody は、必須の query 文字列とともに、3 つのオプションの入力(filter 文字列、userMetadata 構造化オブジェクト、fallback 文字列)を提供します。
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 生成のエージェント レスポンスを提供できる特殊なタイプの状態ハンドラです。
このハンドラを作成するには、エージェントにデータストアを提供します。
これらのデータストア ハンドラを使用すると、エージェントはエンドユーザーとコンテンツについて会話できます。
制限事項
次の制限が適用されます。
- この機能は、一般提供では一部の言語に対応しています。言語リファレンスのデータストア列をご覧ください。
global、usマルチリージョン、euマルチリージョンのリージョンのみがサポートされています。- チャンクされたデータストアとチャンクされていないデータストアの両方を使用するアプリは対象外です。
アクセス制御
プロジェクト オーナーの場合は、データストア ハンドラの作成に必要な権限が付与されています。プロジェクト オーナーでない場合は、次のロールが必要です。
- Dialogflow Admin
- ディスカバリー エンジン管理者
詳細については、アクセス制御ガイドをご覧ください。
エージェントにデータストアを追加する
まだ行っていない場合は、設定手順に沿ってエージェントを作成します。
エージェントにデータストアを追加するには:
- ページを選択し、[状態ハンドラを追加] をクリックします。
- [データストア] チェックボックスをオンにして、[適用] をクリックします。
- ページの [データストア] セクションの右上にある + 記号をクリックします。
- 表示されたデータストア メニューで、[データストアを追加] をクリックします。
- 既存のデータストアを一覧表示するテーブルが表示されます。使用するデータストアの名前の横にあるチェックボックスをオンにして、[保存] をクリックします。新しいデータストアを作成するには、[新しいデータストアを作成] をクリックします。Vertex AI Agent Builder に自動的にリダイレクトされます。
- (新しいデータストアのみ)データソースを選択し、Vertex AI Agent Builder の手順に沿ってデータストアを構成します。データストアのタイプの構成の詳細については、データストアのドキュメントをご覧ください。[作成] をクリックして、新しいデータストアを作成します。
エージェントをテスト
エージェントのデプロイ
エージェントは、次の方法でデプロイできます。
- 簡単なオプションは、エージェントのユーザー インターフェースを提供する統合を使用することです。各統合には、デプロイの手順が用意されています。
- 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] |