> ## 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 Classroom 集成

> 使用 LangChain Python 集成 Google Classroom 文档加载器

> [Google Classroom](https://edu.google.com/workspace-for-education/classroom/)是由Google为教育领域开发的免费学习管理系统，作为Google Workspace教育套件的一部分。它帮助教育工作者管理作业、任务和沟通。

此页面介绍了如何使用`GoogleClassroomLoader`从Google Classroom加载数据。加载器从[Classroom API](https://developers.google.com/classroom)获取课程、作业（courseWork）、公告、课程材料、学生提交、评分表、主题和班级名单，并将每个项目转换为LangChain `Document`。

当课堂项目包含文件附件时，加载器会自动从Google Drive下载并解析这些文件，支持PDF、DOCX、CSV、纯文本、Google Docs、 Sheets、Slides和图片格式。

如需了解更多关于此包的信息，请访问 [GitHub](https://github.com/ayanokojix21/langchain-google-classroom)。

## 概览

| 类别 | 包 | 可序列化 |
| :- | :- | :- |
| `GoogleClassroomLoader` | [`langchain-google-classroom`](https://pypi.org/project/langchain-google-classroom/) | ✅ |

### 集成细节

| 来源 | 文档懒加载 | 异步支持 |
| :- | :-: | :-: |
| `GoogleClassroomLoader` | ✅ | ✅ |

## 先决条件

使用此加载器需要以下条件：

1. [Google Cloud项目](https://developers.google.com/workspace/guides/create-project)
2. 启用[Classroom API](https://console.cloud.google.com/apis/library/classroom.googleapis.com)
3. 启用[Drive API](https://console.cloud.google.com/apis/library/drive.googleapis.com)（用于文件附件）
4. 选择以下认证方式：
   * **OAuth 2.0凭据**—适用于个人Google账户或测试环境
   * **服务账户凭据**—适用于Google Workspace域名（生产环境）

## 安装

安装集成包：

```bash theme={null}
pip install -qU langchain-google-classroom
```

要启用PDF和DOCX附件解析，通过可选的`parsers`扩展安装：

```bash theme={null}
pip install -qU "langchain-google-classroom[parsers]"
```

## 凭据

### 选项A：OAuth 2.0（个人账户）

1. 在[Google Cloud控制台](https://console.cloud.google.com/apis/credentials)创建**OAuth 2.0客户端ID**（桌面应用）
2. 下载客户端密钥文件并保存为`credentials.json`在当前工作目录
3. 首次运行时将打开浏览器进行用户授权，生成的令牌会缓存至`token.json`

```python theme={null}
from langchain_google_classroom import GoogleClassroomLoader

loader = GoogleClassroomLoader()
# Opens browser for OAuth consent on first run
docs = loader.load()
```

### 选项B：服务账户（Google Workspace）

1. 在[Google Cloud控制台](https://console.cloud.google.com/iam-admin/serviceaccounts)创建服务账户
2. 启用[域级委托](https://developers.google.com/identity/protocols/oauth2/service-account#delegatingauthority)
3. 下载密钥文件并保存为`service_account.json`

```python theme={null}
from langchain_google_classroom import GoogleClassroomLoader

loader = GoogleClassroomLoader(
    service_account_file="service_account.json",
)
docs = loader.load()
```

## 实例化

```python theme={null}
from langchain_google_classroom import GoogleClassroomLoader

loader = GoogleClassroomLoader(
    course_ids=["123456789"],  # Optional: specific courses. Loads all if omitted.
    load_assignments=True,     # courseWork items (default: True)
    load_announcements=True,   # announcements (default: True)
    load_materials=True,       # courseWorkMaterials (default: True)
    load_attachments=True,     # resolve Drive file attachments (default: True)
)
```

### 构造函数参数

| 参数 | 类型 | 默认值 | 描述 |
| :- | :- | :- | :- |
| `course_ids` | `list[str]`或 `None` | `None` | 要加载的课程ID。当设置为 `None` 时加载所有可访问课程 |
| `load_assignments` | `bool` | `True` | 加载courseWork项目 |
| `load_announcements` | `bool` | `True` | 加载公告 |
| `load_materials` | `bool` | `True` | 加载课程材料 |
| `load_attachments` | `bool` | `True` | 下载并生成Drive文件附件 |
| `parse_attachments` | `bool` | `True` | 使用内置解析器解析附件内容（安装`langchain-google-classroom[parsers]`支持PDF/DOCX，或设置`parse_attachments=False`跳过解析） |
| `file_parser_cls` | `type[BaseBlobParser]`或 `None` | `None` | 自定义附件解析类（替换内置解析器） |
| `load_submissions` | `bool` | `False` | 加载学生提交（自动添加所需权限） |
| `load_topics` | `bool` | `False` | 加载课程主题（自动添加所需权限） |
| `load_roster` | `bool` | `False` | 加载师生名单（自动添加所需权限） |
| `load_images` | `bool` | `False` | 处理图片附件（需要 `vision_model`） |
| `vision_model` | `BaseChatModel`或 `None` | `None` | 支持图像理解的视觉型LLM（用于PDF和图片中的图像解析） |
| `max_file_size` | `int` | `50000000` | 附件文件最大字节数（超过此值跳过） |
| `service_account_file` | `str`或 `None` | `None` | 服务账户密钥JSON文件路径 |
| `token_file` | `str`或 `None` | `None` | OAuth令牌缓存JSON文件路径 |
| `client_secrets_file` | `str`或 `None` | `None` | OAuth客户端密钥JSON文件路径 |

## 加载数据

使用 `load()`一次性获取所有文档：

```python theme={null}
from langchain_google_classroom import GoogleClassroomLoader

loader = GoogleClassroomLoader(
    course_ids=["123456789"],
)
docs = loader.load()
print(f"Loaded {len(docs)} documents")
```

每个 `Document`包含结构化 `page_content` 和富文本 `metadata`：

```python theme={null}
doc = docs[0]
print(doc.page_content[:200])
print(doc.metadata)
```

```python theme={null}
# Example metadata
{
    "source": "google_classroom",
    "content_type": "assignment",
    "course_id": "123456789",
    "course_name": "Introduction to Computer Science",
    "title": "Week 3: Data Structures",
    "created_time": "2025-03-15T10:30:00.000Z",
    "updated_time": "2025-03-15T10:30:00.000Z",
    "alternate_link": "https://classroom.google.com/...",
}
```

## 懒加载

对于大型课程或内存受限环境，使用 `lazy_load()` 分流逐个加载文档：

```python theme={null}
from langchain_google_classroom import GoogleClassroomLoader

loader = GoogleClassroomLoader(
    course_ids=["123456789"],
)

for doc in loader.lazy_load():
    print(f"[{doc.metadata['content_type']}] {doc.metadata.get('title', '')}")
```

## 异步加载

加载器支持通过 `alazy_load()` 异步迭代：

```python theme={null}
import asyncio
from langchain_google_classroom import GoogleClassroomLoader


async def main():
    loader = GoogleClassroomLoader(
        course_ids=["123456789"],
    )
    docs = []
    async for doc in loader.alazy_load():
        docs.append(doc)
    return docs


docs = asyncio.run(main())
```

## 加载额外数据类型

### 学生提交

```python theme={null}
loader = GoogleClassroomLoader(
    course_ids=["123456789"],
    load_submissions=True,
)
docs = loader.load()
# Includes documents with content_type="submission"
```

### 主题

```python theme={null}
loader = GoogleClassroomLoader(
    course_ids=["123456789"],
    load_topics=True,
)
docs = loader.load()
# Includes documents with content_type="topic"
```

### 班级名单（学生和教师）

```python theme={null}
loader = GoogleClassroomLoader(
    course_ids=["123456789"],
    load_roster=True,
)
docs = loader.load()
# Includes documents with content_type="student" and content_type="teacher"
```

## 文件附件解析

当 `load_attachments=True`（默认值）时，加载器会解析每个课堂项目的Google Drive附件，生成额外的 `Document` 对象。

### 支持格式

| 格式 | 解析器 | 备注 |
| :- | :- | :- |
| PDF | `PDFParser` | 提取文本；可选视觉LLM解析嵌入图像 |
| DOCX | `DocxParser` | 提取文本和表格 |
| CSV | `CSVParser` | 每行一个文档，支持表头格式化 |
| 纯文本 | `TextParser` | UTF-8解码 |
| 图片（PNG/JPEG等） | `ImageParser` | 需要 `vision_model` 和 `load_images=True` |
| Google Docs/Sheets/Slides | 导出后解析 | 通过Drive API自动导出为PDF/CSV/纯文本 |

### 使用视觉LLM解析图片

要处理图片附件并从PDF页面提取视觉上下文，需提供支持图像理解的模型：

```python theme={null}
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_google_classroom import GoogleClassroomLoader

loader = GoogleClassroomLoader(
    course_ids=["123456789"],
    load_attachments=True,
    load_images=True,
    vision_model=ChatGoogleGenerativeAI(model="gemini-2.0-flash"),
)
docs = loader.load()
```

### 使用自定义文件解析器

可通过实现 `BaseBlobParser` 子类替换内置解析器：

```python theme={null}
from langchain_community.document_loaders.parsers.pdf import PyMuPDFParser
from langchain_google_classroom import GoogleClassroomLoader

loader = GoogleClassroomLoader(
    course_ids=["123456789"],
    file_parser_cls=PyMuPDFParser,
)
docs = loader.load()
```

## API参考

* **PyPI:** [`langchain-google-classroom`](https://pypi.org/project/langchain-google-classroom/)
* **源码:** [GitHub](https://github.com/ayanokojix21/langchain-google-classroom)

***

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


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