跳至主要內容

Microsoft OneDrive

Microsoft OneDrive (前身為 SkyDrive) 是由 Microsoft 營運的檔案託管服務。

本筆記本涵蓋如何從 OneDrive 載入文件。預設情況下,文件載入器會載入 pdfdocdocxtxt 檔案。您可以透過提供適當的剖析器來載入其他檔案類型(請參閱下文了解更多資訊)。

先決條件

  1. 依照 Microsoft 身分識別平台的指示註冊應用程式。
  2. 註冊完成後,Azure 入口網站會顯示應用程式註冊的「概觀」窗格。您會看到應用程式 (用戶端) ID。也稱為 client ID,此值可唯一識別您在 Microsoft 身分識別平台中的應用程式。
  3. 在您將於項目 1 中執行的步驟中,您可以將重新導向 URI 設定為 https://127.0.0.1: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,
)

您可以透過傳遞 handlers 參數給 OneDriveLoader 來覆寫此行為。傳遞一個字典,將檔案副檔名(例如 "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()
}

此頁面是否有幫助?