Vertex AI Search フォローアップ検索の実装方法

2024/08/01に公開されました。
2024/08/01に更新されました。

フォローアップ検索の実施方法


author: ryutah

はじめに

こんにちは、技術推進グループのグループマネージャryutahです。

今回は、Vertex AI Searchでフォローアップ検索の実装をしました。

フォローアップ検索とは

フォローアップ検索とは、一度行った検索に対して、さらに詳細な質問や指示を与えることで、より精度の高い回答を得られる機能です。過去の検索内容や文脈を考慮した回答が得られるため、より深い情報収集や課題解決に役立ちます。

Vertex AI Searchでは、以下の3点をサポートしています。

  • 自然言語クエリ処理: 人間の言語入力を理解し、クエリの意図を識別して関連性の高い結果を返します。
  • コンテキスト認識: 過去のインタラクションの文脈を理解し、文脈に沿った回答を提供します。
  • マルチターン: ユーザーが連続して質問し、適切な回答を受け取ることができます。

フォローアップ検索を実装してみる

  1. Vertex AI Search のアプリとデータストアの作成
  2. Python での実装

1. Vertex AI Search のアプリとデータストアの作成

Vertex AI Searchのアプリとデータストアの作成方法については、下記のドキュメントを参照してください。

参照: https://cloud.google.com/generative-ai-app-builder/docs/try-enterprise-search

今回は、総務省が公開しているコロナに関するPDF をデータとして使用しました。

2. Python での実装

以下に、今回使用したPythonコードを示します。

rom typing import List

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


def multi_turn_search_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    search_queries: List[str],
):
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    conversation = client.create_conversation(
        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",
            ),
            summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
                summary_result_count=3,
                include_citations=True,
            ),
        )
        response = client.converse_conversation(request)

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


def main():
    project_id = "YOUR_PROJECT_ID"
    location = "YOUR_LOCATION"         # Values: "global", "us", "eu"
    data_store_id = "YOUR_DATA_STORE_ID"
     search_queries = ["コロナの感染率は", "完成しないようにするには"]
    multi_turn_search_sample(project_id=project_id,location=location,data_store_id=data_store_id,search_queries=search_queries)

if __name__ == "__main__":
    main()

このコードでは、multi_turn_search_sample 関数内でフォローアップ検索の処理を実装しています。search_queries に複数の検索クエリをリスト形式で渡すことで、連続した検索が行えます。

上記のコードの実行結果は、以下のようになります。

Reply: 新型コロナウイルスの感染状況は、政府や地方自治体によって様々な統計データを用いて把握されています [1, 2, 3]。 内閣官房は、移動通信事業者から提供された位置情報のビッグデータを活用し、人流データ等を公開しています [3]。 厚生労働省は、提供された分析結果等を基に、医師の配置の最適化や健康相談体制の充実などの各種取組に活用しています [2]。 また、厚生労働省とLINEは、新型コロナウイルスの発生状況などの最新情報や予防法、相談窓口に関する情報を発信しています [3]。 政府は、新型ウイルス感染症対策における情報発信の充実について、ウェブサイトやSNSを活用した情報発信を強化しています [3]。


Reply: 新型コロナウイルスの感染拡大を防ぐためには、政府や地方自治体の指示に従い、外出を控え、人との接触を減らすことが重要です [1, 2, 3]。 特に、密閉空間、密集場所、密接場面の「3密」を避けるように心がけましょう [1, 2, 3]。 手洗い、うがい、マスク着用などの基本的な感染予防対策も徹底しましょう [1, 2, 3]。 新型コロナウイルスに関する最新情報は、政府や地方自治体のウェブサイト、SNSなどで確認しましょう [3]。

通常のVertex AIでは、前の検索内容が保持されませんが、フォローアップ検索を実装することで、前の検索結果や文脈を維持したまま次の検索を実施します。

まとめ

今回は、Vertex AI Searchでフォローアップ検索を簡単に実装する方法を紹介しました。フォローアップ検索は、RAG(Retrieval Augmented Generation)と組み合わせることで、業務効率化や情報収集の精度向上に貢献できると考えられます。

※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。

※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。