Microsoft OneDrive
Microsoft OneDrive (原名
SkyDrive
) 是由微軟營運的檔案託管服務。
本筆記本涵蓋了如何從 OneDrive
載入文檔。預設情況下,文檔載入器會載入 pdf
、doc
、docx
和 txt
檔案。您可以通過提供適當的解析器來載入其他檔案類型(詳見下文)。
先決條件
- 請依照 Microsoft identity platform 的指示註冊應用程式。
- 註冊完成後,Azure 入口網站會顯示應用程式註冊的「概觀」窗格。您會看到應用程式 (用戶端) ID。此值也稱為
client ID
,在 Microsoft identity platform 中唯一識別您的應用程式。 - 在步驟 項目 1 中,您可以將重新導向 URI 設定為
https://127.0.0.1:8000/callback
- 在步驟 項目 1 中,於「應用程式密碼」區段下產生新的密碼 (
client_secret
)。 - 請依照此文檔中的指示,將以下
SCOPES
(offline_access
和Files.Read.All
) 新增至您的應用程式。 - 請訪問 Graph Explorer Playground 以取得您的
OneDrive ID
。第一步是確保您使用與您的 OneDrive 帳戶相關聯的帳戶登入。然後您需要向https://graph.microsoft.com/v1.0/me/drive
發出請求,回應將傳回一個包含欄位id
的 payload,其中包含您的 OneDrive 帳戶的 ID。 - 您需要使用命令
pip install o365
安裝 o365 套件。 - 在步驟結束時,您必須擁有以下值
CLIENT_ID
CLIENT_SECRET
DRIVE_ID
🧑 從 OneDrive 攝取文檔的指示
🔑 身份驗證
預設情況下,OneDriveLoader
期望 CLIENT_ID
和 CLIENT_SECRET
的值必須儲存為名為 O365_CLIENT_ID
和 O365_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")
身份驗證完成後,載入器將在 ~/.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)
🗂️ 文檔載入器
📑 從 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()
📑 從文檔 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()
📑 選擇支援的檔案類型和首選解析器
預設情況下,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()
}