> ## 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.

# Google drive 集成

> Google Drive 是由 Google 开发的一款文件存储和同步服务。

> [Google Drive](https://en.wikipedia.org/wiki/Google_Drive) 是由 Google 开发的一款文件存储和同步服务。

本笔记本介绍了如何从 `Google Drive` 加载文档。目前仅支持 `Google Docs`。

## 前置条件

1. 创建 Google Cloud 项目或使用现有项目
2. 启用 [Google Drive API](https://console.cloud.google.com/flows/enableapi?apiid=drive.googleapis.com)
3. [为桌面应用授权凭据](https://developers.google.com/drive/api/quickstart/python#authorize_credentials_for_a_desktop_application)
4. `pip install -U google-api-python-client google-auth-httplib2 google-auth-oauthlib`

## 🧑 加载 Google 文档数据的操作步骤

将环境变量 `GOOGLE_APPLICATION_CREDENTIALS` 设置为空字符串（`""`）。

默认情况下，`GoogleDriveLoader`（即 GoogleDriveLoader）期望 `credentials.json` 文件位于 `~/.credentials/credentials.json`，但可通过 `credentials_path` 关键字参数重新指定。`token.json` 的默认路径是 `~/.credentials/token.json`，构造函数参数为 `token_path`。

首次使用 GoogleDriveLoader 时，浏览器会显示用户认证同意屏幕。认证通过后，`token.json` 将自动在指定或默认路径创建。若该路径已存在 `token.json`，则不会再次提示认证。

`GoogleDriveLoader` 支持通过 Google Docs 文档 ID 或文件夹 ID 加载数据。可通过以下 URL 获取 ID：

* 文件夹：[drive.google.com/drive/u/0/folders/1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5](https://drive.google.com/drive/u/0/folders/1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5) → 文件夹 ID 为 `"1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5"`
* 文档：[docs.google.com/document/d/1bfaMQ18\_i56204VaQDVeAFpqEijJTgvurupdEDiaUQw/edit](https://docs.google.com/document/d/1bfaMQ18_i56204VaQDVeAFpqEijJTgvurupdEDiaUQw/edit) → 文档 ID 为 `"1bfaMQ18_i56204VaQDVeAFpqEijJTgvurupdEDiaUQw"`

```python theme={null}
pip install -qU langchain-google-community[drive]
```

```python theme={null}
from langchain_google_community import GoogleDriveLoader
```

```python theme={null}
loader = GoogleDriveLoader(
    folder_id="1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5",
    token_path="/path/where/you/want/token/to/be/created/google_token.json",
    # Optional: configure whether to recursively fetch files from subfolders. Defaults to False.
    recursive=False,
)
```

```python theme={null}
docs = loader.load()
```

当传递 `folder_id` 时，默认加载文档、表格和 PDF 文件。可通过 `file_types` 参数修改此行为

```python theme={null}
loader = GoogleDriveLoader(
    folder_id="1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5",
    file_types=["document", "sheet"],
    recursive=False,
)
```

## 可选文件加载器配置

处理非 Google Docs/Sheets 文件时，可通过 `GoogleDriveLoader` 传入可选文件加载器。若传入加载器，则用于处理非 Google 文档格式的文件。例如加载 Excel 文件：

> [!WARNING]
>
> `langchain-community`包已不再维护。从`langchain_community`导入的示例可能过时或无法使用。请谨慎使用。

```python theme={null}
from langchain_community.document_loaders import UnstructuredFileIOLoader
from langchain_google_community import GoogleDriveLoader
```

```python theme={null}
file_id = "1x9WBtFPWMEAdjcJzPScRsjpjQvpSo_kz"
loader = GoogleDriveLoader(
    file_ids=[file_id],
    file_loader_cls=UnstructuredFileIOLoader,
    file_loader_kwargs={"mode": "elements"},
)
```

```python theme={null}
docs = loader.load()
```

```python theme={null}
docs[0]
```

也可处理混合格式的文件夹：

```python theme={null}
folder_id = "1asMOHY1BqBS84JcRbOag5LOJac74gpmD"
loader = GoogleDriveLoader(
    folder_id=folder_id,
    file_loader_cls=UnstructuredFileIOLoader,
    file_loader_kwargs={"mode": "elements"},
)
```

```python theme={null}
docs = loader.load()
```

```python theme={null}
docs[0]
```

```python theme={null}
```

## 扩展用法

可通过第三方组件 `langchain-googledrive`（Spring AI 开发）管理 Google Drive 的复杂性。该组件兼容 `langchain_community.document_loaders.GoogleDriveLoader`（LangChain）并可用于替换。

为兼容容器环境，认证使用 `̀GOOGLE_ACCOUNT_FILE` 环境变量关联凭据文件（用户或服务）

```python theme={null}
pip install -qU  langchain-googledrive
```

```python theme={null}
folder_id = "root"
# folder_id='1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5'
```

```python theme={null}
# Use the advanced version.
from langchain_googledrive.document_loaders import GoogleDriveLoader
```

```python theme={null}
loader = GoogleDriveLoader(
    folder_id=folder_id,
    recursive=False,
    num_results=2,  # Maximum number of file to load
)
```

默认支持以下 MIME 类型转换为 `Document`：

* text/text
* text/plain
* text/html
* text/csv
* text/markdown
* image/png
* image/jpeg
* application/epub+zip
* application/pdf
* application/rtf
* application/vnd.google-apps.document (GDoc)
* application/vnd.google-apps.presentation (GSlide)
* application/vnd.google-apps.spreadsheet (GSheet)
* application/vnd.google.colaboratory (Notebook Colab)
* application/vnd.openxmlformats-officedocument.presentationml.presentation (PPTX)
* application/vnd.openxmlformats-officedocument.wordprocessingml.document (DOCX)

它是可更新或自定义的。请参阅 `GDriveLoader` 的文档。

必须安装相应的包。

```python theme={null}
pip install -qU  unstructured
```

```python theme={null}
for doc in loader.load():
    print("---")
    print(doc.page_content.strip()[:60] + "...")
```

### 加载身份验证信息

Google Drive 加载器处理的所有文件都会加载与其关联的授权身份，同时附加元数据。

```python theme={null}
from langchain_google_community import GoogleDriveLoader

loader = GoogleDriveLoader(
    folder_id=folder_id,
    load_auth=True,
    # Optional: configure whether to load authorized identities for each Document.
)

doc = loader.load()
```

您可以通过设置 `load_auth=True` 在元数据中添加 Google Drive 文件访问身份。

```python theme={null}
doc[0].metadata
```

### 加载扩展元数据

每个文档的元数据中还包含以下扩展字段：

* full\_path - Google Drive 中文件/文件夹的完整路径
* owner - 文件/文件夹的所有者
* size - 文件/文件夹的大小

```python theme={null}
from langchain_google_community import GoogleDriveLoader

loader = GoogleDriveLoader(
    folder_id=folder_id,
    load_extended_matadata=True,
    # Optional: configure whether to load extended metadata for each Document.
)

doc = loader.load()
```

您可以通过设置 `load_extended_metadata=True` 在元数据中添加 Google Drive 文件扩展信息。

```python theme={null}
doc[0].metadata
```

### 自定义搜索模式

所有兼容 Google [`list()`](https://developers.google.com/drive/api/v3/reference/files/list)
API 的参数均可设置。

要指定 Google 请求的新模式，可以使用 `PromptTemplate()`。
在构造函数中通过 `kwargs` 可设置提示词变量。
以下是一些预格式化的请求示例（使用 `{query}`, `{folder_id}` 和/或 `{mime_type}`）：

您可以通过自定义筛选条件来选择文件。以下是一些预定义的过滤模板：

| 模板 | 描述 |
| - | - |
| gdrive-all-in-folder | 从 `folder_id` 中返回所有兼容文件 |
| gdrive-query | 在所有驱动器中搜索 `query` |
| gdrive-by-name | 搜索名称为 `query` 的文件 |
| gdrive-query-in-folder | 在 `folder_id` 中搜索 `query`（若 `recursive=true` 则递归搜索子文件夹） |
| gdrive-mime-type | 搜索特定 `mime_type` |
| gdrive-mime-type-in-folder | 在 `folder_id` 中搜索特定 `mime_type` |
| gdrive-query-with-mime-type | 搜索 `query` 且具有特定 `mime_type` |
| gdrive-query-with-mime-type-and-folder | 搜索 `query` 且具有特定 `mime_type`，同时位于 `folder_id` 中 |

```python theme={null}
loader = GoogleDriveLoader(
    folder_id=folder_id,
    recursive=False,
    template="gdrive-query",  # Default template to use
    query="machine learning",
    num_results=2,  # Maximum number of file to load
    supportsAllDrives=False,  # GDrive `list()` parameter
)
for doc in loader.load():
    print("---")
    print(doc.page_content.strip()[:60] + "...")
```

您可以通过自定义搜索模式。

```python theme={null}
from langchain_core.prompts.prompt import PromptTemplate

loader = GoogleDriveLoader(
    folder_id=folder_id,
    recursive=False,
    template=PromptTemplate(
        input_variables=["query", "query_name"],
        template="fullText contains '{query}' and name contains '{query_name}' and trashed=false",
    ),  # Default template to use
    query="machine learning",
    query_name="ML",
    num_results=2,  # Maximum number of file to load
)
for doc in loader.load():
    print("---")
    print(doc.page_content.strip()[:60] + "...")
```

该转换支持处理 Markdown 格式：

* 列表项
* 链接
* 表格
* 标题

将属性 `return_link` 设置为 `True` 以导出链接。

#### GSlide 和 GSheet 模式

参数 `mode` 接受以下值：

* "document" : 返回每个文档的正文内容
* "snippets" : 返回文件描述（设置在 Google Drive 文件元数据中）

参数 `gslide_mode` 接受以下值：

* "single" : 单文档包含 \<PAGE BREAK>
* "slide" : 按幻灯片分文档
* "elements" : 每个元素单独成文档

```python theme={null}
loader = GoogleDriveLoader(
    template="gdrive-mime-type",
    mime_type="application/vnd.google-apps.presentation",  # Only GSlide files
    gslide_mode="slide",
    num_results=2,  # Maximum number of file to load
)
for doc in loader.load():
    print("---")
    print(doc.page_content.strip()[:60] + "...")
```

参数 `gsheet_mode` 接受以下值：

* `"single"`: 每行生成一个文档
* `"elements"` : 使用 Markdown 数组及 \<PAGE BREAK> 标签生成文档

```python theme={null}
loader = GoogleDriveLoader(
    template="gdrive-mime-type",
    mime_type="application/vnd.google-apps.spreadsheet",  # Only GSheet files
    gsheet_mode="elements",
    num_results=2,  # Maximum number of file to load
)
for doc in loader.load():
    print("---")
    print(doc.page_content.strip()[:60] + "...")
```

### 高级用法

所有Google文件在元数据中都有一个'description'字段。此字段可用于记录文档的摘要或其他索引标签（参见方法 `lazy_update_description_with_summary()`）。

如果您使用 `mode="snippet"`，则仅使用'description'字段作为主体内容。否则， `metadata['summary']` 包含该字段。

有时，可以通过特定的过滤器从文件名中提取某些信息，以根据特定标准筛选文件。您可以使用过滤器。

有时返回的文档数量较多。无需将所有文档同时加载到内存中。您可以使用懒加载版本的方法，逐个获取文档。建议使用复杂查询替代递归搜索。若启用 `recursive=True`，则需要对每个文件夹应用查询。

```python theme={null}
import os

loader = GoogleDriveLoader(
    gdrive_api_file=os.environ["GOOGLE_ACCOUNT_FILE"],
    num_results=2,
    template="gdrive-query",
    filter=lambda search, file: "#test" not in file.get("description", ""),
    query="machine learning",
    supportsAllDrives=False,
)
for doc in loader.load():
    print("---")
    print(doc.page_content.strip()[:60] + "...")
```

***

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


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