跳到主要内容
Open In ColabOpen on GitHub

Microsoft SharePoint

Microsoft SharePoint 是一个基于网站的协作系统,它使用工作流应用程序、“列表”数据库和其他 Web 部件及安全功能,以增强业务团队的协作能力,由 Microsoft 开发。

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

先决条件

  1. 按照 Microsoft identity platform 说明注册应用程序。
  2. 注册完成后,Azure 门户会显示应用注册的“概览”窗格。您会看到应用程序(客户端)ID。此值也称为 client ID,在 Microsoft identity platform 中唯一标识您的应用程序。
  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(或 web ID),请使用:https://<tenant>.sharepoint.com/sites/<site-name>/_api/web/id 并复制 Edm.Guid 属性的值。
  11. SharePoint site ID 具有以下格式:<tenant-name>.sharepoint.com,<Collection ID>,<subsite ID>。您可以保留该值以在下一步中使用。
  12. 访问 Graph Explorer Playground 以获取您的 Document Library ID。第一步是确保您使用与您的 SharePoint 站点关联的帐户登录。然后,您需要向 https://graph.microsoft.com/v1.0/sites/<SharePoint site ID>/drive 发送请求,响应将返回一个有效负载,其中包含一个 id 字段,该字段保存您的 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"

此加载器使用一种名为代表用户的身份验证。这是一个需要用户同意的两步身份验证。当您实例化加载器时,它将调用并打印一个 URL,用户必须访问该 URL 以授予应用所需的权限。然后,用户必须访问此 URL 并授予应用程序同意。之后,用户必须复制结果页面 URL 并将其粘贴回控制台。如果登录尝试成功,该方法将返回 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 而不是文件夹路径,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,
)

您可以通过将 handlers 参数传递给 SharePointLoader 来覆盖此行为。传递一个字典,将文件扩展名(如 "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 = 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()
}

此页是否对您有帮助?