Skip to main content
Google Vertex AI Search(前称 Generative AI App Builder 上的 Enterprise Search)是 Google Cloud 提供的 Vertex AI 机器学习平台的一部分。 Vertex AI Search 让企业能够快速为客户和员工构建由生成式 AI 驱动的搜索引擎。它由多种 Google Search 技术提供支持,包括语义搜索——通过使用自然语言处理和机器学习技术推断内容中的关系以及用户查询意图,从而比传统关键词搜索技术提供更相关的结果。Vertex AI Search 还受益于 Google 在理解用户搜索方式和内容相关性排序方面的专业知识。
Vertex AI Search 可通过 Google Cloud Console 以及 API 访问,以用于企业工作流集成。
本 notebook 演示如何配置 Vertex AI Search 并使用 Vertex AI Search 检索器。Vertex AI Search 检索器封装了 Python 客户端库,并使用它访问搜索服务 API 有关 VertexAISearchRetriever 所有特性和配置的详细文档,请访问 API 参考

集成详情

设置

安装

你需要安装 langchain-google-communitygoogle-cloud-discoveryengine 包来使用 Vertex AI Search 检索器。
pip install -qU langchain-google-community google-cloud-discoveryengine

配置对 Google Cloud 和 Vertex AI Search 的访问

Vertex AI Search 自 2023 年 8 月起已全面开放,无需白名单。 使用检索器之前,需完成以下步骤:

创建搜索引擎并填充非结构化数据存储

设置访问 Vertex AI Search API 的凭证

Vertex AI Search 检索器使用的 Vertex AI Search 客户端库为以编程方式向 Google Cloud 进行身份验证提供了高级语言支持。 客户端库支持应用默认凭证(ADC);库会在一组定义的位置查找凭证,并使用这些凭证对 API 请求进行身份验证。 通过 ADC,无需修改应用代码,即可在各种环境(如本地开发或生产环境)中为应用提供凭证。 如果在 Google Colab 中运行,请使用 google.colab.google.auth 进行身份验证;否则请遵循其中一种支持的方法,确保正确设置应用默认凭证。
import sys

if "google.colab" in sys.modules:
    from google.colab import auth as google_auth

    google_auth.authenticate_user()

配置并使用 Vertex AI Search 检索器

Vertex AI Search 检索器在 langchain_google_community.VertexAISearchRetriever 类中实现。get_relevant_documents 方法返回 langchain.schema.Document 文档列表,其中每个文档的 page_content 字段填充了文档内容。 根据 Vertex AI Search 中使用的数据类型(网站、结构化或非结构化),page_content 字段的填充方式如下:
  • 启用高级索引的网站:与查询匹配的 extractive answer(提取式答案)。metadata 字段填充了提取片段或答案所来源文档的元数据(如有)。
  • 非结构化数据源:与查询匹配的 extractive segment(提取式片段)或 extractive answer(提取式答案)。metadata 字段填充了提取片段或答案所来源文档的元数据(如有)。
  • 结构化数据源:包含从结构化数据源返回的所有字段的字符串 JSON。metadata 字段填充了文档的元数据(如有)。

提取式答案与提取式片段

提取式答案是随每个搜索结果返回的逐字文本,直接从原始文档中提取。提取式答案通常显示在网页顶部附近,为终端用户提供与其查询在上下文上相关的简短答案。提取式答案适用于网站和非结构化搜索。 提取式片段是随每个搜索结果返回的逐字文本,通常比提取式答案更详细。提取式片段可以作为查询的答案显示,也可用于执行后处理任务,以及作为大型语言模型生成答案或新文本的输入。提取式片段适用于非结构化搜索。 有关提取式片段和提取式答案的更多信息,请参阅产品文档 注意:提取式片段需要启用企业版功能。 创建检索器实例时,可以指定多个参数,用于控制访问哪个数据存储,以及如何处理自然语言查询(包括提取式答案和片段的配置)。

必填参数包括

  • project_id - 你的 Google Cloud 项目 ID。
  • location_id - 数据存储的位置。
    • global(默认)
    • us
    • eu
以下之一:
  • search_engine_id - 要使用的搜索应用 ID(混合搜索必填)
  • data_store_id - 要使用的数据存储 ID。
project_idsearch_engine_iddata_store_id 参数可以在检索器构造函数中显式提供,也可以通过环境变量 PROJECT_IDSEARCH_ENGINE_IDDATA_STORE_ID 提供。 还可以配置多个可选参数,包括:
  • max_documents - 用于提供提取式片段或提取式答案的最大文档数
  • get_extractive_answers - 默认情况下,检索器配置为返回提取式片段。
    • 将此字段设置为 True 以返回提取式答案。仅在 engine_data_type 设置为 0(非结构化)时使用。
  • max_extractive_answer_count - 每个搜索结果中返回的最大提取式答案数。
    • 最多返回 5 个答案。仅在 engine_data_type 设置为 0(非结构化)时使用。
  • max_extractive_segment_count - 每个搜索结果中返回的最大提取式片段数。
    • 目前每次返回一个片段。仅在 engine_data_type 设置为 0(非结构化)时使用。
  • filter - 基于数据存储中文档关联元数据的搜索结果过滤表达式。
  • query_expansion_condition - 指定在何种条件下应进行查询扩展的规范。
    • 0 - 未指定查询扩展条件。此时服务器行为默认为禁用。
    • 1 - 禁用查询扩展。即使 SearchResponse.total_size 为零,也只使用精确的搜索查询。
    • 2 - 由搜索 API 构建的自动查询扩展。
  • engine_data_type - 定义 Vertex AI Search 数据类型
    • 0 - 非结构化数据
    • 1 - 结构化数据
    • 2 - 网站数据
    • 3 - 混合搜索

GoogleCloudEnterpriseSearchRetriever 迁移指南

在以前的版本中,此检索器称为 GoogleCloudEnterpriseSearchRetriever 要更新到新检索器,请进行以下更改:
  • 将导入从:from langchain.retrievers import GoogleCloudEnterpriseSearchRetriever 更改为 from langchain_google_community import VertexAISearchRetriever
  • 将所有类引用从 GoogleCloudEnterpriseSearchRetriever 更改为 VertexAISearchRetriever
注意:使用检索器时,如果希望对单个查询进行自动追踪,也可以设置你的 LangSmith API 密钥(取消注释以下内容):
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"

实例化

配置并使用检索器处理带提取式片段的非结构化数据

from langchain_google_community import (
    VertexAIMultiTurnSearchRetriever,
    VertexAISearchRetriever,
)

PROJECT_ID = "<YOUR PROJECT ID>"  # Set to your Project ID
LOCATION_ID = "<YOUR LOCATION>"  # Set to your data store location
SEARCH_ENGINE_ID = "<YOUR SEARCH APP ID>"  # Set to your search app ID
DATA_STORE_ID = "<YOUR DATA STORE ID>"  # Set to your data store ID
retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
)
query = "What are Alphabet's Other Bets?"

result = retriever.invoke(query)
for doc in result:
    print(doc)

配置并使用检索器处理带提取式答案的非结构化数据

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
    max_extractive_answer_count=3,
    get_extractive_answers=True,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

配置并使用检索器处理结构化数据

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
    engine_data_type=1,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

配置并使用检索器处理启用高级网站索引的网站数据

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
    max_extractive_answer_count=3,
    get_extractive_answers=True,
    engine_data_type=2,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

配置并使用检索器处理混合数据

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    search_engine_id=SEARCH_ENGINE_ID,
    max_documents=3,
    engine_data_type=3,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

配置并使用检索器进行多轮搜索

带跟进的搜索基于生成式 AI 模型,与常规非结构化数据搜索不同。
retriever = VertexAIMultiTurnSearchRetriever(
    project_id=PROJECT_ID, location_id=LOCATION_ID, data_store_id=DATA_STORE_ID
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

使用

按照上述示例,使用 invoke 发出单个查询。

API 参考

有关 VertexAISearchRetriever 所有特性和配置的详细文档,请访问 API 参考