跳到主要內容
Open In ColabOpen on GitHub

Microsoft OneDrive

Microsoft OneDrive (原名 SkyDrive) 是由微軟營運的檔案託管服務。

本筆記本涵蓋了如何從 OneDrive 載入文檔。預設情況下,文檔載入器會載入 pdfdocdocxtxt 檔案。您可以通過提供適當的解析器來載入其他檔案類型(詳見下文)。

先決條件

  1. 請依照 Microsoft identity platform 的指示註冊應用程式。
  2. 註冊完成後,Azure 入口網站會顯示應用程式註冊的「概觀」窗格。您會看到應用程式 (用戶端) ID。此值也稱為 client ID,在 Microsoft identity platform 中唯一識別您的應用程式。
  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 的 payload,其中包含您的 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"

此載入器使用一種稱為代表用戶的身份驗證。這是一個包含用戶同意的 2 步驟身份驗證。當您實例化載入器時,它將呼叫並列印一個 URL,用戶必須訪問該 URL 以授予應用程式所需的權限的同意。然後,用戶必須訪問此 URL 並同意應用程式。然後,用戶必須複製結果頁面 URL 並將其貼回控制台。如果登入嘗試成功,該方法將傳回 True。

from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID")
API 參考文檔:OneDriveLoader

身份驗證完成後,載入器將在 ~/.credentials/ 資料夾中儲存一個令牌 (o365_token.txt)。此令牌稍後可用於身份驗證,而無需執行先前說明的複製/貼上步驟。若要使用此令牌進行身份驗證,您需要在實例化載入器時將 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()
}

此頁面是否對您有幫助?