跳到主要内容
Open In ColabOpen on GitHub

微软 OneDrive

Microsoft OneDrive (前称 SkyDrive) 是微软运营的文件托管服务。

本笔记本介绍了如何从 OneDrive 加载文档。默认情况下,文档加载器会加载 pdfdocdocxtxt 文件。您可以通过提供适当的解析器来加载其他文件类型(详见下文)。

先决条件

  1. 按照 Microsoft 身份平台 的说明注册应用程序。
  2. 注册完成后,Azure 门户会显示应用注册的“概述”窗格。您将看到“应用程序(客户端)ID”。此值也称为 客户端 ID,它在 Microsoft 身份平台中唯一标识您的应用程序。
  3. 在遵循第 1 项步骤时,您可以将重定向 URI 设置为 https://:8000/callback
  4. 在您将遵循的第 1 项步骤中,在“应用程序密钥”部分下生成一个新密码(client_secret)。
  5. 按照此文档中的说明,将以下 SCOPES (offline_accessFiles.Read.All) 添加到您的应用程序。
  6. 访问 Graph Explorer Playground 以获取您的 OneDrive ID。第一步是确保您已登录与您的 OneDrive 帐户关联的帐户。然后,您需要向 https://graph.microsoft.com/v1.0/me/drive 发出请求,响应将返回一个包含字段 id 的负载,该字段保存您的 OneDrive 帐户的 ID。
  7. 您需要使用命令 pip install o365 安装 o365 包。
  8. 完成这些步骤后,您必须拥有以下值
  • CLIENT_ID
  • CLIENT_SECRET
  • DRIVE_ID

🧑 从 OneDrive 摄取文档的说明

🔑 身份验证

默认情况下,OneDriveLoader 要求 CLIENT_IDCLIENT_SECRET 的值必须分别存储为名为 O365_CLIENT_IDO365_CLIENT_SECRET 的环境变量。您可以通过应用程序根目录下的 .env 文件或在脚本中使用以下命令传递这些环境变量。

os.environ['O365_CLIENT_ID'] = "YOUR CLIENT ID"
os.environ['O365_CLIENT_SECRET'] = "YOUR CLIENT SECRET"

此加载器使用一种名为代表用户的身份验证。这是一种需要用户同意的两步身份验证。当您实例化加载器时,它将打印一个 URL,用户必须访问该 URL 以同意应用程序所需的权限。然后用户必须访问此 URL 并同意应用程序。之后,用户必须复制结果页面的 URL 并将其粘贴回控制台。如果登录尝试成功,该方法将返回 True。

from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID")
API 参考:OneDriveLoader

身份验证完成后,加载器会将一个令牌(o365_token.txt)存储在 ~/.credentials/ 文件夹中。此令牌以后可用于无需之前说明的复制/粘贴步骤即可进行身份验证。要使用此令牌进行身份验证,您需要在加载器实例化时将 auth_with_token 参数更改为 True。

from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID", auth_with_token=True)
API 参考:OneDriveLoader

🗂️ 文档加载器

📑 从 OneDrive 目录加载文档

OneDriveLoader 可以从您的 OneDrive 中特定文件夹加载文档。例如,您希望加载存储在 OneDrive 中 Documents/clients 文件夹下的所有文档。

from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID", folder_path="Documents/clients", auth_with_token=True)
documents = loader.load()
API 参考:OneDriveLoader

📑 从文档 ID 列表加载文档

另一种可能性是为您要加载的每个文档提供 object_id 列表。为此,您需要查询 Microsoft Graph API 以查找您感兴趣的所有文档 ID。此链接提供了有助于检索文档 ID 的端点列表。

例如,要检索存储在 Documents 文件夹根目录下的所有对象的信息,您需要向:https://graph.microsoft.com/v1.0/drives/{YOUR DRIVE ID}/root/children 发出请求。一旦您拥有感兴趣的 ID 列表,就可以使用以下参数实例化加载器。

from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID", object_ids=["ID_1", "ID_2"], auth_with_token=True)
documents = loader.load()
API 参考:OneDriveLoader

📑 选择支持的文件类型和首选解析器

默认情况下,OneDriveLoader 使用默认解析器(见下文)加载 document_loaders/parsers/registry 中定义的文件类型。

def _get_default_parser() -> BaseBlobParser:
"""Get default mime-type based parser."""
return MimeTypeBasedParser(
handlers={
"application/pdf": PyMuPDFParser(),
"text/plain": TextParser(),
"application/msword": MsWordParser(),
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": (
MsWordParser()
),
},
fallback_parser=None,
)

您可以通过向 OneDriveLoader 传递 handlers 参数来覆盖此行为。传递一个字典,将文件扩展名(例如 “doc”“pdf” 等)或 MIME 类型(例如 “application/pdf”“text/plain” 等)映射到解析器。请注意,您必须专门使用文件扩展名或 MIME 类型,不能混用。

文件扩展名不包含前导点。

# using file extensions:
handlers = {
"doc": MsWordParser(),
"pdf": PDFMinerParser(),
"mp3": OpenAIWhisperParser()
}

# using MIME types:
handlers = {
"application/msword": MsWordParser(),
"application/pdf": PDFMinerParser(),
"audio/mpeg": OpenAIWhisperParser()
}

loader = OneDriveLoader(document_library_id="...",
handlers=handlers # pass handlers to OneDriveLoader
)

如果多个文件扩展名映射到相同的 MIME 类型,则最后一个字典项将生效。示例

# 'jpg' and 'jpeg' both map to 'image/jpeg' MIME type. SecondParser() will be used 
# to parse all jpg/jpeg files.
handlers = {
"jpg": FirstParser(),
"jpeg": SecondParser()
}