Skip to main content
Open In ColabOpen on GitHub

微软 SharePoint

Microsoft SharePoint 是由微软开发的一个基于网站的协作系统,它使用工作流应用程序、‘列表’数据库和其他网页组件及安全功能来赋能业务团队协同工作。

此笔记本介绍了如何从SharePoint文档库加载文档。默认情况下,文档加载器会加载pdfdocdocxtxt文件。如果您需要加载其他文件类型,请提供相应的解析器(请参阅下方更多信息)。

前置条件

  1. 使用Microsoft身份平台注册应用程序的说明。
  2. 注册完成后,Azure门户将显示应用注册的概述窗格。您会看到应用程序(客户端)ID。这个值也被称为client ID,它是您的应用程序在Microsoft身份平台中的唯一标识符。
  3. 在您将要遵循的步骤项1中,您可以将重定向URI设置为https://login.microsoftonline.com/common/oauth2/nativeclient
  4. 在步骤 项目1 中,您将在应用程序密钥部分生成一个新密码 (client_secret)。
  5. 按照此文档中的说明,将以下SCOPES(包括offline_accessSites.Read.All)添加到您的应用程序中。
  6. 要从您的文档库检索文件,您需要其ID。为了获取它,您需要Tenant NameCollection IDSubsite ID的值。
  7. 要找到你的Tenant Name,请按照此文档中的说明操作。一旦获取到这个值,请移除.onmicrosoft.com并保留剩余部分作为你的Tenant Name
  8. 要获得您的Collection IDSubsite ID,您将需要您的SharePoint site-name。您的SharePoint站点URL具有以下格式https://<tenant-name>.sharepoint.com/sites/<site-name>。此URL的最后一部分是site-name
  9. 要获取站点 Collection ID,请在浏览器中访问此URL:https://<tenant>.sharepoint.com/sites/<site-name>/_api/site/id,然后复制Edm.Guid属性的值。
  10. 使用以下代码获取Subsite ID(或网页ID):https://<tenant>.sharepoint.com/sites/<site-name>/_api/web/id,并复制Edm.Guid属性的值。
  11. The SharePoint site ID 有以下格式: <tenant-name>.sharepoint.com,<Collection ID>,<subsite ID>。您可以保留该值以在下一步中使用。
  12. Visit the Graph Explorer Playground to obtain your Document Library ID. The first step is to ensure you are logged in with the account associated with your SharePoint site. Then you need to make a request to https://graph.microsoft.com/v1.0/sites/<SharePoint site ID>/drive and the response will return a payload with a field id that holds the ID of your Document Library ID.

🧑‍💻 指南:从SharePoint文档库导入您的文件

🔑 认证

默认情况下,SharePointLoader 假设 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"

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

from langchain_community.document_loaders.sharepoint import SharePointLoader

loader = SharePointLoader(document_library_id="YOUR DOCUMENT LIBRARY ID")
API 参考:SharePointLoader

完成身份验证后,加载器将在~/.credentials/文件夹中存储一个令牌(o365_token.txt)。此令牌可以在不需要之前所述的手动粘贴步骤的情况下用于后续的身份验证。为了使用此令牌进行身份验证,在加载器的实例化过程中需要将auth_with_token参数更改为True。

from langchain_community.document_loaders.sharepoint import SharePointLoader

loader = SharePointLoader(document_library_id="YOUR DOCUMENT LIBRARY ID", auth_with_token=True)
API 参考:SharePointLoader

🗂️ 文档加载器

📑 加载文档库目录中的文档

SharePointLoader 可以从文档库中的特定文件夹加载文件。例如,您想要加载存储在文档库中 Documents/marketing 文件夹内的所有文件。

from langchain_community.document_loaders.sharepoint import SharePointLoader

loader = SharePointLoader(document_library_id="YOUR DOCUMENT LIBRARY ID", folder_path="Documents/marketing", auth_with_token=True)
documents = loader.load()
API 参考:SharePointLoader

如果您收到错误Resource not found for the segment,请尝试使用folder_id而不是文件夹路径,该路径可以从Microsoft Graph API中获得。

loader = SharePointLoader(document_library_id="YOUR DOCUMENT LIBRARY ID", auth_with_token=True
folder_id="<folder-id>")
documents = loader.load()

如果您希望从根目录加载文档,可以省略folder_idfolder_pathdocuments_ids,加载器将加载根目录。

# loads documents from root directory
loader = SharePointLoader(document_library_id="YOUR DOCUMENT LIBRARY ID", auth_with_token=True)
documents = loader.load()

结合recursive=True,你可以简单地加载整个SharePoint中的所有文档:

# loads documents from root directory
loader = SharePointLoader(document_library_id="YOUR DOCUMENT LIBRARY ID",
recursive=True,
auth_with_token=True)
documents = loader.load()

📑 从文档ID列表加载文档

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

例如,要检索存储在data/finance/文件夹中的所有对象的信息,您需要向:https://graph.microsoft.com/v1.0/drives/<document-library-id>/root:/data/finance:/children发送请求。一旦您获得了感兴趣的ID列表,就可以使用以下参数实例化加载器。

from langchain_community.document_loaders.sharepoint import SharePointLoader

loader = SharePointLoader(document_library_id="YOUR DOCUMENT LIBRARY ID", object_ids=["ID_1", "ID_2"], auth_with_token=True)
documents = loader.load()
API 参考:SharePointLoader

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

默认情况下 SharePointLoader 使用默认解析器加载 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,
)

您可以通过向 `1` 传递 `0` 参数来覆盖此行为。 传入一个字典,该字典映射文件扩展名(如 `2`, `3` 等)或 MIME 类型(如 `4`, `5` 等),以指定解析器。请注意,您必须使用其中一种方式进行映射,而不能混合使用两者。

Do not include the leading dot for file extensions.

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

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

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

在多个文件扩展名映射到相同的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()
}