予測入力を設定する

このページでは、Gemini Enterprise の基本的な予測入力機能について説明します。予測入力は、クエリに入力された最初の数文字に基づいてクエリの候補を生成します。

構造化データと非構造化データの場合、デフォルトでは、予測入力はデータストア内のドキュメントの内容に基づいて候補を生成します。ドキュメントのインポート後、デフォルトでは、十分な品質のデータ(通常は数日間)が存在するまで、予測入力は候補の生成を開始しません。API を介して予測入力リクエストを行うと、予測入力は検索履歴やユーザー イベントに基づいて候補を生成できます。

クエリ候補モデルは、予測入力が候補の生成に使用するデータの種類を決定します。クエリ候補モデルは 4 つあります。

  • Document. ドキュメント モデルは、ユーザーがインポートしたドキュメントから候補を生成します。

  • 完了可能フィールド。完了可能フィールド モデルは、構造化データ フィールドから直接取得したテキストを提案します。予測入力候補に使用されるのは、completable でアノテーションされたフィールドのみです。このモデルは構造化データでのみ使用できます。

  • 検索履歴。検索履歴モデルは、SearchService.search API 呼び出しの履歴から候補を生成します。servingConfigs.search メソッドで使用できるトラフィックがない場合は、このモデルを使用しないでください。

  • ユーザー イベント。ユーザー イベント モデルは、ユーザーがインポートした検索イベントから候補を生成します。

予測入力リクエストは dataStores.completeQuery メソッドを使用して送信されます。

次の表に、各データ型で使用可能なクエリ候補モデルのタイプを示します。


クエリ候補モデル

データソース

ウェブサイトのデータ

構造化データ

非構造化データ
ドキュメント ユーザーによるインポート ✔* (デフォルト) ✔(デフォルト)
完了可能フィールド ユーザーによるインポート
検索履歴 自動収集 ✔ (デフォルト)
ユーザー イベント ユーザーによるインポート、またはウィジェットによる自動収集

*: ドキュメント スキーマに title フィールドまたは description フィールドが含まれているか、title または description キー プロパティとして指定されたフィールドが含まれている必要があります。構造化データのスキーマを更新するをご覧ください。

データ型に対するデフォルト モデルを使用しない場合は、予測入力リクエストを送信するときに別のモデルを指定できます。予測入力リクエストは dataStores.completeQuery メソッドを使用して送信されます。詳細については、API の手順: 予測入力リクエストを送信して別のモデルを選択するをご覧ください。

予測入力機能

Gemini Enterprise は、検索時に最も有用な予測を表示する次の予測入力機能をサポートしています。

機能 説明 例または詳細情報
入力ミスを訂正する 入力ミスがある単語のスペルを修正します。 MilcMilk
安全でない用語を削除する
  • Google セーフサーチを利用。
  • 不適切なクエリを削除します。
  • 英語(en)、フランス語(fr)、ドイツ語(de)、イタリア語(it)、ポーランド語(pl)、ポルトガル語(pt)、ロシア語(ru)、スペイン語(es)、ウクライナ語(uk)でサポートされています。
ポルノ、露骨、下品、暴力などの不適切なテキスト。
基本的な個人情報(PII)の表示を防止する Gemini Enterprise は、Sensitive Data Protection を利用して、電話番号やメールアドレスなどの基本的なタイプの PII が表示されないように合理的な努力を払っています。

データストアにメールアドレス jeffersonloveshiking@gmail.com がある場合、ユーザーが検索バーに jef と入力しても、Gemini Enterprise はメールアドレスをオートコンプリートの候補として返しません。

個人情報(PII)の漏洩をより徹底的に防止するには、Gemini Enterprise が提供する検出機能に加えて、独自のデータ損失防止(DLP)ソリューションを適用することをおすすめします。詳細については、PII の漏洩を防ぐをご覧ください。

拒否リスト
  • 拒否リストに記載されている用語を削除します。
詳しくは、予測入力の拒否リストを使用するをご覧ください。
重複排除用語
  • AI を活用したセマンティック理解を利用。
  • 近い用語の場合、どちらの用語も一致しますが、より人気のある用語のみが提案されます。
Shoes for WomenWomens ShoesWomans Shoes は重複除去され、最も人気のあるものだけが候補として表示されます。
テール一致の候補
  • 米国と EU のマルチリージョンでは使用できません。
  • オプション設定。
  • クエリ全体に一致する予測入力がない場合は、クエリの末尾の単語のみに一致する候補を提案します。
  • 医療検索には使用できません。
詳細については、テールマッチの候補をご覧ください。

テール一致の候補

末尾一致の候補は、クエリ文字列の最後の単語に対する完全なプレフィックス一致を使用して作成されます。

たとえば、予測入力リクエストで「songs with he」というクエリが送信されたとします。 末尾一致が有効になっている場合、予測入力では、完全な接頭辞「songs with he」に一致するものがないと判断されることがあります。ただし、クエリの最後の単語「he」は、「hello world」と「hello kitty」と完全に一致する接頭辞です。その場合、完全一致の候補がないため、「songs with hello world」と「songs with hello kitty」が返されます。

この機能を使用すると、空の候補結果を減らし、候補の多様性を高めることができます。これは、データソース(ユーザー イベント数、検索履歴、ドキュメント トピック カバレッジ)が限られている場合に特に役立ちます。ただし、テールマッチの候補を有効にすると、候補の全体的な品質が低下する可能性があります。末尾一致は接頭辞の末尾の単語のみを照合するため、返された候補の一部が意味をなさない場合があります。たとえば、「songs with he」というクエリに対して、「songs with helpers guides」のような末尾一致の候補が返されることがあります。

テール一致の候補は、次の条件を満たす場合にのみ返されます。

  1. include_tail_suggestions が、dataStores.completeQuery リクエストで true に設定されている。

  2. クエリに完全な接頭辞一致の候補がない。

個人情報(PII)の漏洩を防ぐ

PII の定義は広範囲に及び、PII の検出は困難な場合があります。そのため、Gemini Enterprise では、オートコンプリート候補に PII が返されないことを保証できません。

Gemini Enterprise は、機密データの保護の検査サービスを適用して、一般的なタイプの PII が候補として表示されないように検索してブロックします。ただし、データストアに PII が含まれている場合、または検索履歴やユーザー イベントのクエリ候補モデルを使用している場合は、以下を確認して適切な措置を講じてください。

  1. 保護する PII の種類が電話番号やメールアドレスなど、かなり標準的なものである場合は、アプリの予測入力候補を広範囲にテストすることから始めます。Gemini Enterprise では、予測入力候補に PII が返されないことを保証できません。

  2. オートコンプリートのテスト中に PII の漏洩が発見された場合や、保護すべき非標準の PII(独自のユーザー ID など)がすでに存在することがわかっている場合は、オートコンプリートのしきい値とコンテンツ配信パラメータを調整してみてください。詳細については、PII を含む候補が返されるリスクを軽減するをご覧ください。

  3. パラメータの調整だけでは PII の漏洩を防ぐのに十分でない場合は、独自の DLP ソリューションを実装します。データストア、ユーザー イベント、ユーザーの検索クエリで最も検出される可能性の高い PII の種類に合わせて DLP ソリューションをカスタマイズします。Sensitive Data Protection またはサードパーティの DLP サービスを使用できます。次のいずれかの方法を使用します。

    • データストアにドキュメントとユーザー イベントをインポートする前に、PII を除外します。

    • サービング時にユーザーに候補を表示する前に、オートコンプリート候補を確認し、PII を含む候補をブロックします。

  4. 検索履歴モデルまたはユーザー イベント モデルを使用する場合は、検索バーに情報テキストを追加して、検索語句に PII を入力しないようユーザーに伝えます。

  5. PII のブロックについてご不明な点がある場合や、特定の課題に直面した場合は、カスタマー エンジニア(CE)または Google アカウント チームにお問い合わせください。

ウィジェットの予測入力をオンまたはオフにする

ウィジェットの予測入力をオンまたはオフにするには、次の手順を行います。

コンソール

  1. Google Cloud コンソールで、[Gemini Enterprise] ページに移動します。

    Gemini Enterprise

  2. 編集するアプリの名前をクリックします。

  3. [設定] をクリックします。

  4. [UI] タブをクリックします。

  5. [予測入力の候補を表示] オプションを切り替えて、ウィジェットの予測入力の候補のオンとオフを切り替えます。予測入力を有効にすると、候補が表示されるまで 1 ~ 2 日かかります。

予測入力の設定を更新する

UI で予測入力の設定を構成する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[Gemini Enterprise] ページに移動します。

    Gemini Enterprise

  2. 編集するアプリの名前をクリックします。

  3. [設定] をクリックします。

  4. [予測入力] タブをクリックします。

  5. 更新する予測入力設定の新しい値を入力または選択します。

    • 候補の最大数: クエリに対して表示できる予測入力の候補の最大数。
    • トリガーする最小の長さ: 予測入力の候補が表示されるまでに必要な最小文字数。
    • マッチング順序: 予測入力が候補のマッチングを開始できるクエリ文字列内の位置。
    • クエリ候補モデル: 取得された候補の生成に使用されるクエリ候補モデル。これは、queryModel パラメータを使用して dataStores.completeQuery でオーバーライドできます。
    • 予測入力を有効にする: デフォルトでは、十分な品質のデータ(通常は数日間)が収集されるまで、予測入力は候補の提示を開始しません。このデフォルトをオーバーライドして、予測入力の候補をすぐに表示するには、[今すぐ] を選択します。

      [今すぐ] を選択した場合でも、候補の生成に 1 日かかることがあります。また、十分な量の優れたデータが得られるまで、一部の予測入力候補が欠落したり、品質が低下したりすることがあります。

    • 拒否リスト: 拒否リストを Cloud Storage バケットの JSON ファイルとしてインポートします。拒否リストの制約と仕様について詳しくは、予測入力の拒否リストを使用するをご覧ください。

  6. [保存して公開] をクリックします。予測入力がすでに有効になっているエンジンの場合、変更は数分以内に反映されます。

PII を含む候補が返されるリスクを軽減する

エンドユーザーは、運転免許証や電話番号など、非公開にすべきあらゆる種類の個人情報(PII)を保有しています。ただし、ユーザーが自分に固有の検索結果を探すために、これらの PII 情報が検索バーに入力される可能性はあります。

検索履歴またはユーザー イベント モデルを使用しており、ユーザーが検索バーに個人情報を入力する可能性がある場合は、次のパラメータを調整することで個人情報の漏洩を減らすことができます。

  • queryFrequencyThreshold: クエリが予測入力の候補として返されるには、この回数だけ入力されている必要があります。

  • numUniqueUsersThreshold: クエリがオートコンプリート候補として返されるには、この数のユニーク ユーザーによって入力されている必要があります。検索ユーザー イベントuserPseudoId フィールドの値によって、ユーザーがユニークかどうかを判断します。

ユースケースの例

たとえば、ユーザーが非公開にすべきアカウント番号を持っているケースを考えてみましょう。

検索履歴またはユーザー イベントの候補モデルが使用されている場合、これらのアカウント番号は、エンドユーザーが検索する他のすべての用語とともに、候補の生成に使用されます。たとえば、ユーザー A の口座番号 YZ-46789A が検索バーに繰り返し入力され、ユーザー B の口座番号が YZ-42345B である場合、ユーザー B が検索バーに YZ-4 と入力すると、返される予測入力の候補がユーザー A の口座番号になることがあります。

このような漏洩が発生する可能性を減らすため、Gemini Enterprise 管理者は次のことを決定します。

  • queryFrequencyThreshold パラメータの値を 30 に増やします。この場合、1 つの口座番号が頻繁に入力される可能性は非常に低いです。ただし、人気の検索クエリは少なくともその頻度で入力されます。

  • numUniqueUsersThreshold パラメータの値を 6 に増やします。管理者は、異なる userPseudoId に関連付けられた 6 つの検索イベントで、同じアカウント番号が検索バーに入力される可能性は低いと考えています。

手順

予測入力には 2 つのしきい値パラメータがあります。これらのパラメータは Google Cloud コンソールでは使用できませんが、updateCompletionConfig メソッドへの REST API 呼び出しで設定できます。

予測入力のしきい値の設定を構成する手順は次のとおりです。変更するパラメータに応じて、各ステップは省略可能です。

REST

  1. CompletionConfig.queryFrequencyThreshold フィールドを更新します。

    curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "X-Goog-User-Project: PROJECT_ID" \
      https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig?updateMask=queryFrequencyThreshold \
      -d '{
        "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig",
        "queryFrequencyThreshold": QUERY_FREQUENCY_THRESHOLD
      }'
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。

    • DATA_STORE_ID: アプリに関連付けられているデータストアの ID。

    • QUERY_FREQUENCY_THRESHOLD: 検索クエリがオートコンプリート候補として返されるまでに、検索クエリを入力する必要がある最小回数を示す整数値。このカウントは、数か月間のローリング ウィンドウで合計されます。デフォルトは 8 です。

  2. CompletionConfig.numUniqueUsersThreshold フィールドを更新します。

    curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "X-Goog-User-Project: PROJECT_ID" \
      https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig?updateMask=numUniqueUsersThreshold \
      -d '{
        "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/completionConfig",
        "numUniqueUsersThreshold": UNIQUE_USERS
      }'
    

    UNIQUE_USERS は、予測入力の候補として返される前に、特定の検索クエリを入力する必要がある一意のユーザーの最小数を表す整数値に置き換えます。このカウントは、数か月にわたるローリング ウィンドウで合計されます。デフォルトは 3 です。

スキーマ内の完了可能なフィールドのアノテーションを更新する

構造化データ スキーマのフィールドの予測入力を有効にする手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[Gemini Enterprise] ページに移動します。

    Gemini Enterprise

  2. 編集するアプリの名前をクリックします。構造化データを使用する必要があります。

  3. [データ] をクリックします。

  4. [スキーマ] タブをクリックします。

  5. [編集] をクリックして、completable としてマークするスキーマ フィールドを選択します。

  6. [保存] をクリックして、更新したフィールド構成を保存します。これらの候補が生成されて返されるまでには 1 日ほどかかります。

予測入力リクエストを送信する

次のサンプルは、予測入力リクエストを送信する方法を示しています。

REST

API を使用して予測入力リクエストを送信する手順は次のとおりです。

  1. データストア ID を確認します。データストア ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[Gemini Enterprise] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

      [データストア] ページに移動

    2. データストアの名前をクリックします。

    3. データストアの [データ] ページで、データストア ID を取得します。

  2. dataStores.completeQuery メソッドを呼び出します。

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:completeQuery?query=QUERY_STRING"
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。

    • DATA_STORE_ID: アプリに関連付けられているデータストアの ID。

    • QUERY_STRING: 候補の取得に使用される先読み入力。

別のモデルに予測入力リクエストを送信する

別のクエリ候補モデルを使用して予測入力リクエストを送信する手順は次のとおりです。

  1. データストア ID を確認します。データストア ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[Gemini Enterprise] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

      [データストア] ページに移動

    2. データストアの名前をクリックします。

    3. データストアの [データ] ページで、データストア ID を取得します。

  2. dataStores.completeQuery メソッドを呼び出します。

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:completeQuery?query=QUERY_STRING&query_model=QUERY_SUGGESTIONS_MODEL"
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。

    • DATA_STORE_ID: アプリに関連付けられているデータストアの一意の ID。

    • QUERY_STRING: 候補の取得に使用される先読み入力。

    • AUTOCOMPLETE_MODEL: オートコンプリート データ

    • QUERY_SUGGESTIONS_MODEL: リクエストに使用するクエリ候補モデル(documentdocument-completablesearch-historyuser-event)。医療データの場合は、healthcare-default を使用します。

C#

このサンプルを試す前に、Gemini Enterprise クイックスタート: クライアント ライブラリの使用にある C# の設定手順を完了してください。詳細については、Gemini Enterprise C# API のリファレンス ドキュメントをご覧ください。

Gemini Enterprise に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

using Google.Cloud.DiscoveryEngine.V1;

public sealed partial class GeneratedCompletionServiceClientSnippets
{
    /// <summary>Snippet for CompleteQuery</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void CompleteQueryRequestObject()
    {
        // Create client
        CompletionServiceClient completionServiceClient = CompletionServiceClient.Create();
        // Initialize request argument(s)
        CompleteQueryRequest request = new CompleteQueryRequest
        {
            DataStoreAsDataStoreName = DataStoreName.FromProjectLocationDataStore("[PROJECT]", "[LOCATION]", "[DATA_STORE]"),
            Query = "",
            QueryModel = "",
            UserPseudoId = "",
            IncludeTailSuggestions = false,
        };
        // Make the request
        CompleteQueryResponse response = completionServiceClient.CompleteQuery(request);
    }
}

Go

このサンプルを試す前に、Gemini Enterprise クイックスタート: クライアント ライブラリの使用にある Go の設定手順を完了してください。詳細については、Gemini Enterprise Go API のリファレンス ドキュメントをご覧ください。

Gemini Enterprise に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


package main

import (
	"context"

	discoveryengine "cloud.google.com/go/discoveryengine/apiv1"
	discoveryenginepb "cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := discoveryengine.NewCompletionClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &discoveryenginepb.CompleteQueryRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb#CompleteQueryRequest.
	}
	resp, err := c.CompleteQuery(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

Java

このサンプルを試す前に、Gemini Enterprise クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Gemini Enterprise Java API のリファレンス ドキュメントをご覧ください。

Gemini Enterprise に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

import com.google.cloud.discoveryengine.v1.CompleteQueryRequest;
import com.google.cloud.discoveryengine.v1.CompleteQueryResponse;
import com.google.cloud.discoveryengine.v1.CompletionServiceClient;
import com.google.cloud.discoveryengine.v1.DataStoreName;

public class SyncCompleteQuery {

  public static void main(String[] args) throws Exception {
    syncCompleteQuery();
  }

  public static void syncCompleteQuery() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (CompletionServiceClient completionServiceClient = CompletionServiceClient.create()) {
      CompleteQueryRequest request =
          CompleteQueryRequest.newBuilder()
              .setDataStore(
                  DataStoreName.ofProjectLocationDataStoreName(
                          "[PROJECT]", "[LOCATION]", "[DATA_STORE]")
                      .toString())
              .setQuery("query107944136")
              .setQueryModel("queryModel-184930495")
              .setUserPseudoId("userPseudoId-1155274652")
              .setIncludeTailSuggestions(true)
              .build();
      CompleteQueryResponse response = completionServiceClient.completeQuery(request);
    }
  }
}

Node.js

このサンプルを試す前に、Gemini Enterprise クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Gemini Enterprise Node.js API のリファレンス ドキュメントをご覧ください。

Gemini Enterprise に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  Required. The parent data store resource name for which the completion is
 *  performed, such as
 *  `projects/* /locations/global/collections/default_collection/dataStores/default_data_store`.
 */
// const dataStore = 'abc123'
/**
 *  Required. The typeahead input used to fetch suggestions. Maximum length is
 *  128 characters.
 */
// const query = 'abc123'
/**
 *  Specifies the autocomplete data model. This overrides any model specified
 *  in the Configuration > Autocomplete section of the Cloud console. Currently
 *  supported values:
 *  * `document` - Using suggestions generated from user-imported documents.
 *  * `search-history` - Using suggestions generated from the past history of
 *  SearchService.Search google.cloud.discoveryengine.v1.SearchService.Search 
 *  API calls. Do not use it when there is no traffic for Search API.
 *  * `user-event` - Using suggestions generated from user-imported search
 *  events.
 *  * `document-completable` - Using suggestions taken directly from
 *  user-imported document fields marked as completable.
 *  Default values:
 *  * `document` is the default model for regular dataStores.
 *  * `search-history` is the default model for site search dataStores.
 */
// const queryModel = 'abc123'
/**
 *  A unique identifier for tracking visitors. For example, this could be
 *  implemented with an HTTP cookie, which should be able to uniquely identify
 *  a visitor on a single device. This unique identifier should not change if
 *  the visitor logs in or out of the website.
 *  This field should NOT have a fixed value such as `unknown_visitor`.
 *  This should be the same identifier as
 *  UserEvent.user_pseudo_id google.cloud.discoveryengine.v1.UserEvent.user_pseudo_id 
 *  and
 *  SearchRequest.user_pseudo_id google.cloud.discoveryengine.v1.SearchRequest.user_pseudo_id.
 *  The field must be a UTF-8 encoded string with a length limit of 128
 *  characters. Otherwise, an `INVALID_ARGUMENT` error is returned.
 */
// const userPseudoId = 'abc123'
/**
 *  Indicates if tail suggestions should be returned if there are no
 *  suggestions that match the full query. Even if set to true, if there are
 *  suggestions that match the full query, those are returned and no
 *  tail suggestions are returned.
 */
// const includeTailSuggestions = true

// Imports the Discoveryengine library
const {CompletionServiceClient} = require('@google-cloud/discoveryengine').v1;

// Instantiates a client
const discoveryengineClient = new CompletionServiceClient();

async function callCompleteQuery() {
  // Construct request
  const request = {
    dataStore,
    query,
  };

  // Run request
  const response = await discoveryengineClient.completeQuery(request);
  console.log(response);
}

callCompleteQuery();

Python

このサンプルを試す前に、Gemini Enterprise クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Gemini Enterprise Python API のリファレンス ドキュメントをご覧ください。

Gemini Enterprise に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import discoveryengine_v1


def sample_complete_query():
    # Create a client
    client = discoveryengine_v1.CompletionServiceClient()

    # Initialize request argument(s)
    request = discoveryengine_v1.CompleteQueryRequest(
        data_store="data_store_value",
        query="query_value",
    )

    # Make the request
    response = client.complete_query(request=request)

    # Handle the response
    print(response)

Ruby

このサンプルを試す前に、Gemini Enterprise クイックスタート: クライアント ライブラリの使用にある Ruby の設定手順を完了してください。詳細については、Gemini Enterprise Ruby API のリファレンス ドキュメントをご覧ください。

Gemini Enterprise に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

require "google/cloud/discovery_engine/v1"

##
# Snippet for the complete_query call in the CompletionService service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DiscoveryEngine::V1::CompletionService::Client#complete_query.
#
def complete_query
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DiscoveryEngine::V1::CompletionService::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DiscoveryEngine::V1::CompleteQueryRequest.new

  # Call the complete_query method.
  result = client.complete_query request

  # The returned object is of type Google::Cloud::DiscoveryEngine::V1::CompleteQueryResponse.
  p result
end

予測入力の拒否リストを使用する

拒否リストを使用して、特定の用語が予測入力の候補として表示されないようにします。

たとえば、製薬会社を考えてみましょう。薬が FDA の承認を受けなくなったが、データストア内のドキュメントに記載されている場合は、その薬が候補の検索語句として表示されないようにしたい場合があります。この企業は、その薬の名前を拒否リストに追加して、候補として表示されないようにすることができます。

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

  • データストアごとに 1 つの拒否リスト
  • 拒否リストをアップロードすると、そのデータストアの既存の拒否リストが上書きされます。
  • ブロックリストあたり最大 1,000 個の用語
  • キーワードでは大文字と小文字が区別されません
  • 拒否リストをインポートしてから有効になるまで 1~2 日かかります

拒否リストの各エントリは、blockPhrasematchOperator で構成されます。

  • blockPhrase: 拒否リストの用語として文字列を入力します。キーワードは大文字と小文字が区別されません。
  • matchOperator: 次の値を使用できます。
    • EXACT_MATCH: 拒否リストのキーワードと完全に一致するキーワードが候補の検索語句として表示されないようにします。
    • CONTAINS: 拒否リストのキーワードを含む候補が表示されないようにします。

4 つのエントリを含む拒否リストの例を次に示します。

{
    "entries": [
        {"blockPhrase":"Oranges","matchOperator":"CONTAINS"},
        {"blockPhrase":"bAd apples","matchOperator":"EXACT_MATCH"},
        {"blockPhrase":"Cool as A Cucumber","matchOperator":"EXACT_MATCH"},
        {"blockPhrase":"cherry pick","matchOperator":"CONTAINS"}
    ]
}

拒否リストをインポートする前に、Discovery Engine エディタ アクセスに必要なアクセス制御が設定されていることを確認します。

拒否リストは、ローカルの JSON データから、または Cloud Storage からインポートできます。データストアから拒否リストを削除するには、拒否リストを完全に削除します。

ローカル JSON データから拒否リストをインポートする

禁止リストを含むローカル JSON ファイルから禁止リストをインポートするには、次の操作を行います。

  1. 次の形式でローカル JSON ファイルに禁止リストを作成します。各拒否リスト エントリが改行なしで新しい行に記述されていることを確認します。

    {
        "inlineSource": {
            "entries": [
                { "blockPhrase":"TERM_1","matchOperator":"MATCH_OPERATOR_1" },
                { "blockPhrase":"TERM_2","matchOperator":"MATCH_OPERATOR_2" }
            ]
        }
    }
  2. suggestionDenyListEntries:import メソッドに POST リクエストを送信し、JSON ファイルの名前を指定します。

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json; charset=utf-8" \
        --data @DENYLIST_FILE \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/suggestionDenyListEntries:import"
    

    次のように置き換えます。

    • DENYLIST_FILE: 拒否リストの用語を含む JSON ファイルのローカルパス。
    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。

    • DATA_STORE_ID: アプリに関連付けられているデータストアの ID。

拒否リストをインポートしてから、候補のフィルタリングが開始されるまで 1~2 日かかります。

Cloud Storage から拒否リストをインポートする

Cloud Storage の JSON ファイルから拒否リストをインポートするには、次の操作を行います。

  1. 次の形式の JSON ファイルで禁止リストを作成し、Cloud Storage バケットにインポートします。各拒否リスト エントリが改行なしで新しい行に入力されていることを確認します。

    { "blockPhrase":"TERM_1","matchOperator":"MATCH_OPERATOR_1" }
    { "blockPhrase":"TERM_2","matchOperator":"MATCH_OPERATOR_2" }
  2. gcsSource オブジェクトを含むローカル JSON ファイルを作成します。これを使用して、Cloud Storage バケット内の拒否リスト ファイルのロケーションを指定します。

    {
        "gcsSource": {
            "inputUris": [ "DENYLIST_STORAGE_LOCATION" ]
        }
    }

    DENYLIST_STORAGE_LOCATION は、Cloud Storage 内の拒否リストの場所に置き換えます。入力できる URI は 1 つのみです。URI は gs://BUCKET/FILE_PATH の形式で入力する必要があります。

  3. gcsSource オブジェクトを含む suggestionDenyListEntries:import メソッドに POST リクエストを送信します。

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json; charset=utf-8" \
        --data @GCS_SOURCE_FILE \
       "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/suggestionDenyListEntries:import"
    

    次のように置き換えます。

    • GCS_SOURCE_FILE: 拒否リストを指す gcsSource オブジェクトを含むファイルのローカルパス。
    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。

    • DATA_STORE_ID: アプリに関連付けられているデータストアの ID。

拒否リストをインポートしてから、候補のフィルタリングが開始されるまで 1~2 日かかります。

拒否リストを削除する

データストアから拒否リストを削除する手順は次のとおりです。

  1. suggestionDenyListEntries:purge メソッドに POST リクエストを送信します。

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/suggestionDenyListEntries:purge"
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。

    • DATA_STORE_ID: アプリに関連付けられているデータストアの ID。

インポートした予測入力候補のリストを使用する

予測入力データモデルから生成された予測入力候補を使用する代わりに、独自の予測入力候補のリストを提供することもできます。

ほとんどのアプリケーションでは、予測入力データモデルのいずれかから生成された候補を使用すると、より良い結果が得られます。ただし、モデルの提案がニーズに合わない場合や、個別の提案リストを提供することでユーザーのオートコンプリート エクスペリエンスが向上するようなまれな状況も考えられます。

たとえば、小規模なオンライン書店が書籍タイトルのリストをオートコンプリートの候補としてインポートします。お客様が検索バーに入力を開始すると、予測入力候補には常にインポートされたリストの書籍タイトルが表示されます。書籍のリストが変更されると、書店は現在のリストを削除して新しいリストをインポートします。リストの一部は次のようになります。

{"suggestion": "Wuthering Heights", "globalScore": "0.52" },
{"suggestion": "The Time Machine", "globalScore": "0.26" },
{"suggestion": "Nicholas Nickleby", "globalScore": "0.38" },
{"suggestion": "A Little Princess", "globalScore": "0.71" },
{"suggestion": "The Scarlet Letter", "globalScore": "0.32" }

globalScore は、候補のランク付けに使用される [0, 1] の範囲内の浮動小数点数です。または、1 より大きい整数である frequency スコアを使用することもできます。globalScore が使用できない(null に設定されている)場合、frequency スコアは候補のランク付けに使用されます。

予測入力候補を設定してインポートする

BigQuery から予測入力候補のリストを設定してインポートする手順は次のとおりです。

  1. 候補のリストを作成し、BigQuery テーブルに読み込みます。

    少なくとも、各候補を文字列として、グローバル スコアまたは頻度のいずれかとして指定する必要があります。

    候補リストには次のテーブル スキーマを使用します。

    [
      {
        "description": "The suggestion text",
        "mode": "REQUIRED",
        "name": "suggestion",
        "type": "STRING"
      },
      {
        "description": "Global score of this suggestion. Control how this suggestion would be scored and ranked. Set global score or frequency; not both.",
        "mode": "NULLABLE",
        "name": "globalScore",
        "type": "FLOAT"
      },
      {
        "description": "Frequency of this suggestion. Used to rank suggestions when the global score is not available.",
        "mode": "NULLABLE",
        "name": "frequency",
        "type": "INTEGER"
      }
    ]
    

    BigQuery テーブルを作成し、予測入力候補リストでテーブルを読み込む方法については、BigQuery のドキュメントをご覧ください。

  2. BigQuery からリストをインポートします。

    bigquerySource オブジェクトを含む completionSuggestions:import メソッドに POST リクエストを送信します。

    curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -H "X-Goog-User-Project: PROJECT_ID" \
     "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/completionSuggestions:import" \
     -d '{
          "bigquery_source": {"project_id": "PROJECT_ID_SOURCE", "dataset_id": "DATASET_ID", "table_id": "TABLE_ID"}
     }'
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。
    • DATA_STORE_ID: データストアの ID。
    • PROJECT_ID_SOURCE: インポートするデータセットを含むプロジェクト。
    • DATASET_ID: インポートする候補リストのデータセット ID
    • TABLE_ID: インポートする候補リストのテーブル ID
  3. 省略可: 返された name 値をメモし、長時間実行オペレーションの詳細を取得するの手順に沿って、インポート オペレーションが完了するタイミングを確認します。

  4. アプリの予測入力を有効にしていない場合は、予測入力の設定を更新するの手順に沿って操作します。[予測入力を有効にする] を [今すぐ] に設定してください。

  5. インデックス登録が完了し、インポートされた候補が利用可能になるまで数日待ちます。

予測入力リクエストを送信する

予測入力モデルの候補ではなく、インポートされた候補を返す予測入力リクエストを送信するには:

  1. 別のモデルに予測入力リクエストを送信する手順に沿って、AUTOCOMPLETE_MODELimported-suggestion に設定します。

インポートした予測入力候補のリストを削除する

新しい予測入力候補のリストをインポートする前に、既存のリストを削除します。

既存の予測入力候補のリストを削除する手順は次のとおりです。

  1. completionSuggestions:purge メソッドに POST リクエストを送信します。

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/dataStores/DATA_STORE_ID/completionSuggestions:purge"
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの番号または ID。

    • DATA_STORE_ID: アプリに関連付けられているデータストアの ID。

高度なドキュメント データモデル

Gemini Enterprise は、予測入力用の高度なデータモデルを提供します。このデータモデルは、インポートしたドキュメントに基づいて、Google の大規模言語モデル(LLM)を活用して高品質の予測入力候補を生成します。

この機能は試験運用中です。この機能の使用をご希望の場合は、 Google Cloud アカウント チームにお問い合わせのうえ、許可リストへの追加をご依頼ください。

高度なドキュメント データモデルは、医療検索や米国と EU のマルチリージョンでは使用できません。