> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-docs-zh.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Gemini Enterprise Agent Platform 搜索集成

> 使用 LangChain Python 集成 Gemini Enterprise 智能体平台搜索检索器。

> [Gemini 企业智能体平台上的智能体搜索](https://cloud.google.com/enterprise-search)（曾被称为在`Generative AI App Builder`上的`Enterprise Search`）是`Google Cloud`提供的 [Gemini 企业智能体平台](https://cloud.google.com/products/gemini-enterprise-agent-platform) 机器学习平台的一部分。
>
> `Agent Search on Gemini Enterprise Agent Platform`使组织能够快速为客户和员工构建基于生成式 AI 的搜索引擎。它基于多种`Google Search`技术，包括语义搜索，通过使用自然语言处理和机器学习技术来推断内容以及用户查询输入中的意图关系，从而帮助提供比传统基于关键词的搜索技术更相关的结果。Gemini 企业智能体平台上的智能体搜索也受益于 Google 在理解用户如何搜索方面的专业知识，并考虑内容相关性来排序显示的结果。

> `Agent Search on Gemini Enterprise Agent Platform`可在`Google Cloud Console`中获取，并通过 API 用于企业工作流集成。

本笔记本演示了如何配置`Agent Search on Gemini Enterprise Agent Platform`并使用 Gemini 企业智能体平台上的智能体搜索 [检索器](https://langchain-docs-zh.mintlify.site/langchain/oss/deepagents/retrieval.md)。Gemini 企业智能体平台上的智能体搜索检索器封装了 [Python 客户端库](https://cloud.google.com/generative-ai-app-builder/docs/libraries#client-libraries-install-python)，并使用它来访问 [搜索服务 API](https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1beta.services.search_service)。

有关所有`VertexAISearchRetriever`功能和配置的详细文档，请访问 [API 参考](https://reference.langchain.com/python/langchain-google-community/vertex_ai_search/VertexAISearchRetriever)。

### 集成细节

## 设置

### 安装

您需要安装`langchain-google-community`和`google-cloud-discoveryengine`包才能使用 Gemini 企业智能体平台上的智能体搜索检索器。

```python theme={null}
pip install -qU langchain-google-community google-cloud-discoveryengine
```

### 配置对 Google Cloud 和智能体搜索的访问

截至 2023 年 8 月，Gemini 企业智能体平台上的智能体搜索通常无需白名单即可使用。

在您可以使用检索器之前，需要完成以下步骤：

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

* 按照 [Gemini 企业智能体平台上的智能体搜索入门指南](https://cloud.google.com/generative-ai-app-builder/docs/try-enterprise-search)中的说明设置 Google Cloud 项目和 Gemini 企业智能体平台上的智能体搜索。
* 使用 Google Cloud [控制台创建非结构化数据存储](https://cloud.google.com/generative-ai-app-builder/docs/create-engine-es#unstructured-data)
  * 使用`gs://cloud-samples-data/gen-app-builder/search/alphabet-investor-pdfs` Cloud Storage 文件夹中的示例 PDF 文档填充它。
  * 确保使用`Cloud Storage (without metadata)`选项。

#### 设置访问智能体搜索 API 的凭证

Gemini 企业智能体平台上的智能体搜索检索器使用的[智能体搜索客户端库](https://cloud.google.com/generative-ai-app-builder/docs/libraries)为 Google Cloud 编程方式身份验证提供了高级语言支持。
客户端库支持 [应用默认凭证 (ADC)](https://cloud.google.com/docs/authentication/application-default-credentials)；库会在一组预定义的位置查找凭证，并使用这些凭证对 API 请求进行身份验证。
使用 ADC，您可以在各种环境中（如本地开发或生产）向应用程序提供凭证，而无需修改应用程序代码。

如果在 [Google Colab](https://colab.google)中运行，请使用`google.colab.google.auth`进行身份验证，否则请遵循 [支持的方法](https://cloud.google.com/docs/authentication/application-default-credentials)之一，以确保您的应用默认凭证已正确设置。

```python theme={null}
import sys

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

    google_auth.authenticate_user()
```

### 配置和使用智能体搜索检索器

Gemini 企业智能体平台上的智能体搜索检索器在`langchain_google_community.VertexAISearchRetriever`类中实现。`get_relevant_documents`方法返回一个`langchain.schema.Document`文档列表，其中每个文档的`page_content`字段都填充了文档内容。
根据 Agent Search on Gemini Enterprise Agent Platform 中使用的数据类型（网站、结构化或非结构化），`page_content`字段按以下方式填充：

* 带高级索引的网站：一个`extractive answer`，它与查询匹配。`metadata`字段填充了从中提取片段或答案的文档的元数据（如果有）。
* 非结构化数据源：一个`extractive segment`或一个`extractive answer`，它与查询匹配。`metadata`字段填充了从中提取片段或答案的文档的元数据（如果有）。
* 结构化数据源：一个包含从结构化数据源返回的所有字段的字符串 json。`metadata`字段填充了文档的元数据（如果有）

#### 提取式答案和提取式片段

提取式答案是直接从原始文档中返回的逐字文本，它与每个搜索结果一起返回。提取式答案通常显示在网页顶部附近，为最终用户提供与他们的查询上下文相关的简短答案。提取式答案适用于网站和非结构化搜索。

提取式片段是直接与每个搜索结果一起返回的逐字文本。提取式片段通常比提取式答案更冗长。提取式片段可以作为查询的答案显示，可用于执行后处理任务，并作为大型语言模型的输入以生成答案或新文本。提取式片段适用于非结构化搜索。

有关提取式片段和提取式答案的更多信息，请参阅 [产品文档](https://cloud.google.com/generative-ai-app-builder/docs/snippets)。

注意：提取式片段需要启用 [企业版](https://cloud.google.com/generative-ai-app-builder/docs/about-advanced-features#enterprise-features)功能。

在创建检索器实例时，您可以指定一些参数来控制访问哪个数据存储以及如何处理自然语言查询，包括提取式答案和片段的配置。

#### 必填参数是

* `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\_size 为零，也仅使用精确搜索查询。
  * `2` - 由 Search API 构建的自动查询扩展。
* `engine_data_type` - 定义 Gemini Enterprise Agent 平台上的 Agent 搜索数据类型
  * `0` - 非结构化数据
  * `1` - 结构化数据
  * `2` - 网站数据
  * `3` - [混合搜索](https://cloud.google.com/generative-ai-app-builder/docs/create-data-store-es#multi-data-stores)

### `GoogleCloudEnterpriseSearchRetriever` 迁移指南

在之前的版本中，此检索器称为 `GoogleCloudEnterpriseSearchRetriever`。

要更新到新的检索器，请进行以下更改：

* 更改导入：`from langchain.retrievers import GoogleCloudEnterpriseSearchRetriever` -> `from langchain_google_community import VertexAISearchRetriever`。
* 将所有类引用从 `GoogleCloudEnterpriseSearchRetriever` 更改为 `VertexAISearchRetriever`。

注意：在使用检索器时，如果您希望从单个查询中获取自动跟踪，也可以通过取消注释下方设置您的 [LangSmith](https://docs.langchain.com/langsmith/observability) API 密钥：

```python theme={null}
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"
```

## 实例化

### 配置和使用用于 **非结构化** 数据的检索器（提取式片段）

```python theme={null}
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
```

```python theme={null}
retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
)
```

```python theme={null}
query = "What are Alphabet's Other Bets?"

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

### 配置和使用用于 **非结构化** 数据的检索器（提取式答案）

```python theme={null}
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)
```

### 配置和使用用于 **结构化** 数据的检索器

```python theme={null}
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)
```

### 配置和使用用于 **网站** 数据的检索器（高级网站索引）

```python theme={null}
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)
```

### 配置和使用用于 **混合** 数据的检索器

```python theme={null}
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)
```

### 配置和使用用于多轮搜索的检索器

[带后续问题的搜索](https://cloud.google.com/generative-ai-app-builder/docs/multi-turn-search) 基于生成式 AI 模型，并且与常规非结构化数据搜索不同。

```python theme={null}
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 参考](https://reference.langchain.com/python/langchain-google-community/vertex_ai_search/VertexAISearchRetriever)。

***

> 官方原文：[src/oss/python/integrations/retrievers/google\_vertex\_ai\_search.mdx](https://github.com/langchain-ai/docs/blob/main/src/oss/python/integrations/retrievers/google_vertex_ai_search.mdx) · 非官方翻译，译文由 AI 生成，以英文原文为准。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.