フォローアップ付きの検索

このページでは、Vertex AI Search のフォローアップ付き検索について説明します。また、API 呼び出しを使用して実装する方法も説明します。

検索ウィジェットにフォローアップ付きの検索を追加する場合は、検索ウィジェットの結果を構成するをご覧ください。

フォローアップ付き検索は、非構造化データウェブサイトを使用する検索アプリに適用されます。

フォローアップ付き検索は Vertex AI エージェント アプリには適用されません。Vertex AI エージェント アプリは、エンドユーザーとコンテンツについて会話できるエージェントを使用します。Vertex AI エージェントの詳細については、Vertex AI エージェントの概要をご覧ください。

フォローアップ付き検索について

フォローアップによる検索は、生成 AI モデルに基づいています。フォローアップ付き検索は、同じ検索セッション内の以前のクエリを考慮するため、通常の非構造化データ検索とは異なります。

フォローアップ付き検索は、以下をサポートしています。

  • 自然言語クエリ処理: 人間の言語入力を処理して理解し、クエリの背後にある意図を特定して、関連する結果を返します。

  • コンテキスト認識: 以前のやり取りのコンテキストを理解し、コンテキストに応じた回答を提供します。

  • マルチターン: ユーザーがフォローアップの質問をして、関連する回答を受け取ることができます。

フォローアップ付き検索の例

フォローアップ付き検索の例を次に示します。メキシコでの休暇について調べたいとします。

  • お客様: メキシコで休暇を過ごすのに最適な時期はいつですか?

  • フォローアップ付きの検索: メキシコで休暇を過ごすのに最適な時期は乾季です。これは 11 月から 4 月までです。

  • お客様: 為替レートはいくらですか?

  • フォローアップ付きの検索: 1 米ドルは約 17.65 メキシコペソに相当します。

  • お客様: 12 月の平均気温はどれくらいですか?

  • フォローアップ付きの検索: 平均気温は華氏 70~78 度です。カンクンの平均気温は華氏 77 度までです。

通常の検索では、メキシコの為替レートが求められていることを認識できないため、「為替レートはいくらですか?」という質問には回答できません。同様に、通常の検索では、メキシコの気温を示すコンテキストが維持されません。

会話について

フォローアップ付き検索では、会話はユーザーが提供するテキスト クエリと Vertex AI Search が提供するレスポンスで構成されます。

これらのクエリとレスポンスのペアは、メッセージと呼ばれることもあります。上の例では、2 番目のメッセージは「為替レートはいくらですか?」と「1 米ドルは約 17.65 メキシコペソに相当します」で構成されています。

会話は、非構造化データが保存されている同じデータストアに保存されます。データストアでは、会話は会話リソースで表されます。 クエリ メッセージとレスポンス メッセージに加えて、会話リソースには次のものも含まれます。

  • 一意の名前(会話 ID)。

  • ステータス(進行中または完了)。

  • ユーザー疑似 ID(ユーザーを追跡する訪問者 ID)。プログラムで割り当てることができます。

  • 開始時刻と終了時刻。

始める前に

次の前提条件を満たしていることを確認してください。要件は、アプリの種類によって異なります。

会話を保存してレスポンスを取得する

コマンドラインまたはクライアント ライブラリを使用して、検索レスポンスの生成と、フォローアップを含む検索の会話の保存を行うことができます。

REST

コマンドラインを使用して会話を作成し、ユーザーの入力からレスポンスを生成する手順は次のとおりです。

  1. 会話履歴を保存するデータストアを指定します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations" \
    -d '{
      "user_pseudo_id": "USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • USER_PSEUDO_ID: 検索訪問者をトラッキングするための固有識別子。たとえば、HTTP Cookie を使用して、1 台のデバイス上の訪問者を一意に識別できます。

    POST コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
  2. 検索レスポンスを生成し、データストアの新しい会話または既存の会話に追加します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "filter": "FILTER"
    }'
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • CONVERSATION_ID: 会話の一意の ID(123456 など)。フォローアップ付き検索の会話では、すべてのターンで同じ会話 ID を使用します。

    • FREE_TEXT: ユーザーの質問を含む自由形式の文字列(例: what is bigquery?

    • FILTER: フィルタ式を使用して検索をフィルタリングするためのテキスト フィールド。デフォルト値は空文字列です。 フィルタの作成方法は、ウェブサイトのデータか、メタデータを含む非構造化データかによって異なります。詳細については、フォローアップ付きの検索をフィルタするをご覧ください。

    POST コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
    }
    },
    "conversation": {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id",
    "messages": [
      {
        "userInput": {
          "input": "what is bigquery?"
        }
      },
      {
        "reply": {
          "summary": {
            "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
          }
        }
      }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    },
    "searchResults": [
    {
      "id": "c86f19582746b56f71c9bb6929893835",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/c86f19582746b56f71c9bb6929893835",
        "id": "c86f19582746b56f71c9bb6929893835",
        "derivedStructData": {
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/94627ee0249dfdfda25b1b158c717bca.txt",
          "snippets": [
            {
              "snippet_status": "SUCCESS",
              "snippet": "For larger websites, talk to the IT team and/or utilize a big data solution such as Google \u003cb\u003eBigQuery\u003c/b\u003e to extract all URLs. It may also be necessary to ask the ..."
            }
          ],
          "extractive_answers": [
            {
              "content": "Alternatively, load the Server Log Files into Google BigQuery and use the Google BigQuery interface or the 360 Data Studio to analyze the data. To monitor the indexation numbers of the HTTP and the HTTPS version, keep an eye on all submitted XML Sitemaps."
            }
          ]
        }
      }
    },
    {
      "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/774bd7ce2a3509ab4bbd1fc876f39dc2",
        "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "This consists of a collection of virtual tables. A virtual table exists for every queryable object type (content type if you prefer) in the repository. Each row in these virtual tables correspond to an instance of the corresponding object type (or of one of its subtypes)."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/28841ef8590a105e9415f1390648a811.txt"
        }
      }
    },
    {
      "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/3e1d306e49aefd9e23f2d5f7a66e6c76",
        "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "Other logo switches are based on search terms. For instance, if the term "ASCII art" is searched, an ASCII art version of the Google logo will appear next to the search box."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/98008df3eef5d3ee1661c52f23189190.txt"
        }
      }
    },
    {
      "id": "cf94e24aacd47cd2c2f5effcbdeda832",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/cf94e24aacd47cd2c2f5effcbdeda832",
        "id": "cf94e24aacd47cd2c2f5effcbdeda832",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "The company is listed on the NASDAQ stock exchange under the ticker symbols GOOGL and GOOG, and on the Frankfurt Stock Exchange under the ticker symbol GGQ1. These ticker symbols now refer to Alphabet Inc., Google's holding company, since the fourth quarter of 2015."
            }
          ],
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/d80204083ef1096799fa4b7257548b33.txt"
        }
      }
    },
    {
      "id": "05bc6497a4e7e6ca36b2e495b354b764",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/05bc6497a4e7e6ca36b2e495b354b764",
        "id": "05bc6497a4e7e6ca36b2e495b354b764",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "SQL injection countermeasures are designed to utilize secure programming methods. By changing the variables used by the application code, weaknesses in applications can be greatly minimized. This report will detail how to perform a SQL injection and explore the best countermeasures to prevent the attack."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/7cba75d646f5774a21d96801bec68bb3.txt",
          "snippets": [
            {
              "snippet_status": "NO_SNIPPET_AVAILABLE",
              "snippet": "No snippet is available for this page."
            }
          ]
        }
      }
    }
    ]
    }
  3. 会話の新しい質問ごとに手順 2 を繰り返します。

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

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

from typing import List

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# data_store_id = "YOUR_DATA_STORE_ID"
# search_queries = ["YOUR_FIRST_SEARCH_QUERY", "YOUR_SECOND_SEARCH_QUERY"]


def multi_turn_search_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    search_queries: List[str],
) -> List[discoveryengine.ConverseConversationResponse]:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # Initialize Multi-Turn Session
    conversation = client.create_conversation(
        # The full resource name of the data store
        # e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}
        parent=client.data_store_path(
            project=project_id, location=location, data_store=data_store_id
        ),
        conversation=discoveryengine.Conversation(),
    )


    for search_query in search_queries:
        # Add new message to session
        request = discoveryengine.ConverseConversationRequest(
            name=conversation.name,
            query=discoveryengine.TextInput(input=search_query),
            serving_config=client.serving_config_path(
                project=project_id,
                location=location,
                data_store=data_store_id,
                serving_config="default_config",
            ),
            # Options for the returned summary
            summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
                # Number of results to include in summary
                summary_result_count=3,
                include_citations=True,
            ),
        )
        response = client.converse_conversation(request)

        print(f"Reply: {response.reply.summary.summary_text}\n")

        for i, result in enumerate(response.search_results, 1):
            result_data = result.document.derived_struct_data
            print(f"[{i}]")
            print(f"Link: {result_data['link']}")
            print(f"First Snippet: {result_data['snippets'][0]['snippet']}")
            print(
                "First Extractive Answer: \n"
                f"\tPage: {result_data['extractive_answers'][0]['pageNumber']}\n"
                f"\tContent: {result_data['extractive_answers'][0]['content']}\n\n"
            )
        print("\n\n")

フォローアップ付きの検索をフィルタする

フォローアップ付き検索でクエリを実行する場合は、filter フィールドを含めて、レスポンスの取得元となるドキュメントのプールを制限できます。フィルタはフィルタ式を使用して作成します。使用するフィルタ式は、ウェブサイト データとメタデータを含む非構造化データのどちらがあるかによって異なります。

ウェブサイト データのフィルタ式

ウェブサイト データを含むデータストアがある場合は、高度なウェブサイト インデックス登録を使用したフィルタ式のフィルタ式を使用して、フォローアップ クエリで検索をフィルタできます。フィルタ式を作成したら、会話を保存してレスポンスを取得するのステップ 2 で filter フィールドの値に使用します。

メタデータを含む非構造化データのフィルタ式

メタデータを含む非構造化データを含むデータストアがある場合は、フォローアップ クエリを使用して検索をフィルタし、ドキュメントに含まれるメタデータ フィールドに基づいてドキュメントを返すようにできます。メタデータを使用して通常の検索(フォローアップなし)をフィルタする方法については、構造化データまたは非構造化データの検索をフィルタするをご覧ください。同じ原則を使用して、メタデータを使用してフォローアップ付きの検索をフィルタできます。フィルタ式を作成したら、会話を保存してレスポンスを取得するのステップ 2 で filter フィールドの値として使用します。

サマリーを構成する

フォローアップ付き検索からのレスポンス メッセージは、summaryText で返される生成されたサマリーです。生成されたサマリーは、さまざまな方法で構成できます。以降のセクションで詳しく説明します。

検索結果で引用を取得する

引用は、指定されている場合、検索サマリーにインラインで配置される番号です。これらの番号は、サマリー内の特定の文がどの検索結果から取得されたかを示します。

引用を取得するには:

  • 手順 2 を除き、会話を保存してチャット レスポンスを取得するの手順に沿って操作します。includeCitations を true に設定する summarySpec フィールドを含むこのコマンドを実行します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "include_citations": true }
    }'
    

    クリックして、サンプル コマンドからのレスポンスを表示します。

    {
    "reply": {
    "summary": {
    }
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly [1]. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data [2, 3].",
      "safetyAttributes": {
        "categories": [
          "Finance",
          "Legal"
        ]

引用番号はサマリー テキストに含まれます。引用番号は、返された検索結果を指し、1 からインデックス付けされます。たとえば、[1] は、その文が最初の検索結果に関連付けられていることを意味します。[2, 3] は、2 番目と 3 番目の検索結果の両方に該当する文であることを意味します。

敵対的クエリを無視する

敵対的クエリには否定的なコメントが含まれるか、安全でないポリシー違反の出力を生成するように設計されています。敵対的クエリに対して検索サマリーを返さないように指定できます。敵対的クエリが無視されると、summaryText プロパティには、検索サマリーが返されないことを示すボイラープレート テキストが含まれます。検索ドキュメントは、検索サマリーに対しては返されませんが、敵対的クエリに対して返されます。

敵対的クエリに対して検索結果のサマリーを返さないように指定するには:

  • 手順 2 を除き、会話を保存してチャット レスポンスを取得するの手順に沿って操作します。ignoreAdversarialQuery を true に設定する summarySpec フィールドを含むこのコマンドを実行します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignoreAdversarialQuery": true }
    }'
    

    クリックして、敵対的クエリからのレスポンスの一部を表示します。

    "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "ADVERSARIAL_QUERY_IGNORED"
      ]

サマリーを求めていないクエリを無視する

サマリーを求めていないクエリは、要約に適さない結果を返します。たとえば、「空はなぜ青いのか」や「世界一のサッカー選手は誰ですか?」はサマリーを求めるクエリですが、「SFO 空港」や「2026 年ワールドカップ」はそうではありません。このようなクエリは、ナビゲーション クエリである可能性が高いです。サマリーを求めていないクエリに対して検索サマリーを返さないように指定できます。検索ドキュメントは、検索サマリーに対しては返されませんが、サマリーを求めていないクエリに対して返されます。

サマリーを求めていないクエリに対して検索サマリーを返さないように指定するには:

  • 手順 2 を除き、会話を保存してチャット レスポンスを取得するの手順に沿って操作します。ignoreNonSummarySeekingQuery を true に設定する summarySpec フィールドを含むこのコマンドを実行します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignore_non_summary_seeking_query": true }
    }'
    

    クリックして、敵対的クエリからのレスポンスの一部を表示します。

     "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "NON_SUMMARY_SEEKING_QUERY_IGNORED"
      ]

サマリーに使用する結果の数を設定する

サマリーの生成に使用する結果の数を指定できます。デフォルトでは、summaryResultCount フィールドが設定されていない場合、返されたすべての結果を使用してサマリーが生成されます。

サマリーに使用する上位の結果の数を設定するには:

  • 手順 2 を除き、会話を保存してチャット レスポンスを取得するの手順に沿って操作します。summaryResultCount を設定する summarySpec フィールドを含むこのコマンドを実行します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "summary_result_count": NUMBER_OF_RESULTS }
    }'
    

    NUMBER_OF_RESULTS: 検索サマリーを生成する上位結果の数。返された結果の数が summaryResultCount 未満の場合は、すべての結果からサマリーが生成されます。最大値は 5 です。

カスタマイズされたサマリーを取得する

サマリーをリクエストするときに modelPromptSpec.preamble フィールドに自然言語の指示を指定すると、カスタマイズされたサマリーを取得できます。

長さや詳細レベル、出力のスタイル(「シンプル」など)、出力の言語、回答の焦点、形式(表、箇条書き、XML など)などのカスタマイズをリクエストできます。

たとえば、「BigQuery のメリットは何ですか?」というクエリに対して、次の例のようなカスタマイズ指示を入力できます。

  • 指示の例: "please show the answer format in an ordered list"

    回答例:

    The benefits of BigQuery are:
    
    1. Increased business productivity
    2. IT staff productivity
    3. Reduced infrastructure costs
    4. Loading and exporting data are free
    
  • 指示の例: give a very detailed answer

    回答例:

    BigQuery is a serverless, highly scalable, and cost-effective cloud data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that takes care of provisioning, scaling, and managing the underlying infrastructure, so you can focus on analyzing your data. BigQuery is also integrated with other Google Cloud services, such as Google Kubernetes Engine, Cloud Data Fusion, and Cloud Dataproc, making it easy to build and deploy data pipelines.
    
    Here are some of the benefits of using BigQuery:
    
    * **Fast and scalable:** BigQuery can process petabytes of data very quickly, and it can scale to handle even the most demanding workloads. * **Cost-effective:** BigQuery is a very cost-effective way to store and analyze data. You only pay for the data that you use, and there are no upfront costs or commitments. * **Secure:** BigQuery is a secure platform that meets the needs of even the most security-conscious organizations. * **Easy to use:** BigQuery is easy to use, even for non-technical users. It has a simple and intuitive user interface, and it supports a variety of data sources. * **Integrated with other Google Cloud services:** BigQuery is integrated with other Google Cloud services, making it easy to build and deploy data pipelines.
    
    If you are looking for a fast, scalable, and cost-effective way to analyze your data, then BigQuery is a great option.
    

カスタマイズされたサマリーを取得するには:

  • 手順 2 を除き、会話を保存してチャット レスポンスを取得するの手順に沿って操作します。modelPromptSpec.preamble でカスタマイズの指示を設定する summarySpec フィールドを含むこのコマンドを実行します。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
      -d '{
        "query": { "input": "FREE_TEXT"},
        "summarySpec": {
          "modelPromptSpec": {
            "preamble": "CUSTOMIZATION_INSTRUCTIONS"
          }
        }
      }'
    
    • CUSTOMIZATION_INSTRUCTIONS: カスタマイズの指示(文字列)。

セーフサーチを使用すると、露骨な表現を含む、安全でない、ポリシーに違反する出力コンテンツをサマリー レスポンスから除外できます。セーフサーチの詳細については、Vertex AI Search の安全設定をご覧ください。

チャット レスポンスにセーフサーチを適用するには:

  • 手順 2 を除き、会話を保存してチャット レスポンスを取得するの手順に沿って操作します。クエリで safe_search を指定します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "safe_search": true
    }'
    

保存されている会話を表示、変更する

コマンドラインを使用して、保存されている会話を取得、削除、更新、一覧表示できます。

データストアから会話を取得する

データストアから特定の会話の詳細をすべて取得するには:

  • 次の curl コマンドを実行します。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • CONVERSATION_ID: 会話の ID

    GET コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
    "state": "IN_PROGRESS",
    "userPseudoId": "2040473575290303058",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:11:24.046735Z"
    }

データストアから会話を削除する

デフォルトでは、60 日より前の会話は自動的に削除されます。ただし、特定の会話を削除する場合(たとえば、機密コンテンツが誤って含まれている場合など)は、この API 呼び出しを使用して削除します。

データストアから会話を削除するには:

  • 次の curl コマンドを実行します。

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • CONVERSATION_ID: 会話の ID

    DELETE コマンドのレスポンスは次のようになります。

    {}
    

会話を更新する

会話を更新する理由はさまざまです。 たとえば、次のいずれかを行うためです。

  • 会話に完了のマークを付ける

  • ある会話のメッセージを別の会話に統合する

  • user_pseudo_id を変更する

会話の state を更新するには:

  • 次の curl コマンドを実行します。

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID?updateMask=state" \
    -d '{
      "state": "NEW_STATE"
    }'
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • CONVERSATION_ID: 更新する会話の ID

    • NEW_STATE: 状態の新しい値(例: COMPLETED

    PATCH コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "COMPLETED",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

会話の user_pseudo_id を更新するには:

  • 次の curl コマンドを実行します。

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID?updateMask=user_pseudo_id" \
    -d '{
      "user_pseudo_id": "NEW_USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • CONVERSATION_ID: 更新する会話の ID

    • NEW_USER_PSEUDO_ID: ユーザーの疑似 ID の新しい値

    PATCH コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

上記のコマンドは、user_pseudo_id. を変更する方法を示しています。ただし、user_pseudo_id会話リソースの他のフィールドに置き換えることで、会話内の他のフィールドを更新できます。

すべての会話を一覧表示する

データストア内のすべての会話を一覧表示するには:

  • 次の curl コマンドを実行します。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations"
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    GET コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    },
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
      "state": "IN_PROGRESS",
      "userPseudoId": "2040473575290303058",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ]
    }
    ]
    }

レスポンスには、会話のリストと next_page_token が含まれます。next_page_token が返されない場合、一覧表示する会話はありません。

デフォルトのページサイズは 50 です。

フィルタで会話を一覧表示する

データストア内のすべての会話を一覧表示する代わりに、オープンしているすべての会話や、特定のユーザーに関連付けられているすべての会話を一覧表示できます。

たとえば、クローズした検索を、そのうちの 1 つを再び開くオプション付きでユーザーに提示できます。

これを行うには、特定のフィルタに一致する会話を一覧表示します。 user_pseudo_id または stateIN_PROGRESS または COMPLETED)。

ユーザーの会話を一覧表示する

ユーザーまたは訪問者に関連付けられている会話を一覧表示するには:

  • 次の curl コマンドを実行します。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations?filter=user_pseudo_id=USER_PSEUDO_ID"
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • USER_PSEUDO_ID: 会話を一覧表示するユーザーの疑似 ID。

    GET コマンドのレスポンスは次のようになります。

    GET コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

ユーザーと状態の会話を一覧表示する

特定の状態(オープンまたはクローズ)にあり、かつ、ユーザーまたは訪問者に関連付けられている会話を一覧表示するには:

  • 次の curl コマンドを実行します。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/conversations?filter=user_pseudo_id=USER_PSEUDO_ID%20AND%20state=STATE"
    
    • PROJECT_ID: Google Cloud プロジェクトのプロジェクト番号または ID

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

    • USER_PSEUDO_ID: 会話を一覧表示するユーザーの疑似 ID。

    • STATE: 会話がオープンかクローズか(IN_PROGRESS または COMPLETED

    GET コマンドのレスポンスは次のようになります。

    GET コマンドからのレスポンスの例については、こちらをクリックしてください。

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

フィルタリング構文の一般的な情報については、AIP-160 フィルタリングをご覧ください。

関連する質問は、検索結果に加えて関連する質問を返すことができる、許可リストきのプレビュー版機能です。

たとえば、「メキシコで休暇を過ごすのに最適な時期はいつですか?」という質問をするときに、質問への回答に加えて、検索では、「メキシコで休暇を過ごすのに最も安い月はいつですか?」や「メキシコの観光シーズンはいつですか?」など、質問する可能性のある他を提示します。

検索アプリで関連する質問を返すようにするには、Google アカウント チームに連絡し、関連する質問を有効にするプロジェクトとアプリを指定します。デフォルトのサービス提供構成を使用していない場合は、サービス提供構成の名前も指定する必要があります。

関連する質問の機能が有効になると、質問は ConverseConversationResponse で文字列として返されます。

詳細

  • summaryResultCountincludeCitationsignoreAdversarialQueryignoreNonSummarySeekingQuery フィールドの詳細については、Vertex AI Agent Builder API ドキュメントの SummarySpec をご覧ください。

  • 検索のサマリーを取得するその他の例については、サマリーを取得するをご覧ください。