>Google Vertex AI 搜索 (formerly known as Enterprise Search on Generative AI App Builder) 是 Vertex AI 机器学习平台的一部分,由 Google Cloud. > >Vertex AI Search 使组织能够为客户和员工快速构建由生成式 AI 驱动的搜索引擎。它由多种 Google Search 技术提供支持,包括语义搜索。语义搜索通过使用自然语言处理和机器学习技术来推断内容中的关系和用户查询输入的意图,从而帮助提供比传统基于关键词的搜索技术更相关的结果。Vertex AI 搜索还受益于 Google 在理解用户搜索方式方面的专业知识,并将内容相关性纳入显示结果的排序中。
>Vertex AI Search 在 Google Cloud Console 中可用,并通过 API 进行企业工作流集成。
本笔记本演示如何配置 Vertex AI Search 并使用 Vertex AI 搜索 检索器。Vertex AI 搜索检索器封装了 Python 客户端库 并使用它访问 Search Service API.
有关 VertexAISearchRetriever 所有功能和配置的详细文档,请访问 API 参考.
集成详情
设置
安装
您需要安装 langchain-google-community 和 google-cloud-discoveryengine 包才能使用 Vertex AI 搜索检索器。
pip install -qU langchain-google-community google-cloud-discoveryengine
配置对 Google Cloud 和 Vertex AI 搜索的访问
Vertex AI 搜索于 2023 年 8 月全面开放,无需申请。
在您可以使用检索器之前,需要完成以下步骤:
创建搜索引擎并填充非结构化数据存储
- - 按照 Vertex AI 搜索入门指南 中的说明设置 Google Cloud 项目和 Vertex AI 搜索。
- - 使用 Google Cloud Console 创建非结构化数据存储
- - 使用
gs://cloud-samples-data/gen-app-builder/search/alphabet-investor-pdfsCloud Storage 文件夹中的示例 PDF 文档填充它。 - - 确保使用
Cloud Storage (without metadata)option.
设置凭据以访问 Vertex AI 搜索 API
Vertex AI 搜索检索器使用的 Vertex AI 搜索客户端库 提供高级语言支持以编程方式向 Google Cloud 进行身份验证。 客户端库支持 应用程序默认凭据 (ADC);这些库在一组定义的位置中查找凭据,并使用这些凭据对 API 请求进行身份验证。 通过 ADC,您可以在多种环境(如本地开发或生产环境)中向应用程序提供凭据,而无需修改应用程序代码。
如果在 Google Colab 中进行身份验证 google.colab.google.auth 否则请按照以下 支持的方法之一 来确保您的应用默认凭据已正确设置。
if "google.colab" in sys.modules:
from google.colab import auth as google_auth
google_auth.authenticate_user()
配置并使用 Vertex AI 搜索检索器
Vertex AI Search 检索器在 langchain_google_community.VertexAISearchRetriever 类中实现。 get_relevant_documents 方法返回 langchain.schema.Document 文档列表,其中每个文档的 page_content 字段填充了文档内容。 根据 Vertex AI Search 中使用的数据类型(网站、结构化或非结构化), page_content 字段的填充方式如下:
- - 高级索引网站:
extractive answer与查询匹配。metadata字段填充了从中提取片段或答案的文档的元数据(如果有)。 - - 非结构化数据源:
extractive segmentor anextractive answer与查询匹配。metadata字段填充了从中提取片段或答案的文档的元数据(如果有)。 - - 结构化数据源:包含从结构化数据源返回的所有字段的字符串 JSON。
metadata字段填充了文档的元数据(如果有)
提取式答案和提取式片段
提取式答案是从每个搜索结果中返回的原文文本。它直接从原始文档中提取。提取式答案通常显示在网页顶部附近,为最终用户提供与查询上下文相关的简短答案。提取式答案适用于网站搜索和非结构化搜索。
提取式片段是从每个搜索结果中返回的原文文本。提取式片段通常比提取式答案更详细。提取式片段可以作为查询的答案显示,也可以用于执行后处理任务和作为大型语言模型的输入以生成答案或新文本。提取式片段适用于非结构化搜索。
有关提取式片段和提取式答案的更多信息,请参阅 产品文档.
注意:提取式片段需要启用 企业版 功能。
创建检索器实例时,您可以指定多个参数来控制要访问哪个数据存储以及如何处理自然语言查询,包括提取式答案和片段的配置。
必需参数为
- -
project_id- 您的 Google Cloud 项目 ID。 - -
location_id- 数据存储的位置。 - -
global(默认) - -
us - -
eu
以下之一:
- -
search_engine_id- 您要使用的搜索应用的 ID。(混合搜索的必填项) - -
data_store_id- 您要使用的数据存储的 ID。
需要指定 project_id, search_engine_id 和 data_store_id 参数可以在检索器的构造函数中显式提供,也可以通过环境变量提供 - PROJECT_ID, SEARCH_ENGINE_ID 和 DATA_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_大小为零。 - -
2- 由 Search 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 = "" # Set to your Project ID
LOCATION_ID = "" # Set to your data store location
SEARCH_ENGINE_ID = "" # Set to your search app ID
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 参考.