跳到主要內容
Open In ColabOpen on GitHub

Google 雲端硬碟

Google 雲端硬碟是由 Google 開發的檔案儲存和同步服務。

本筆記本涵蓋如何從 Google 雲端硬碟 載入文件。目前僅支援 Google 文件

先決條件

  1. 建立 Google Cloud 專案或使用現有專案
  2. 啟用 Google Drive API
  3. 授權桌面應用程式的憑證
  4. pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

🧑 攝取您的 Google 文件資料的說明

將環境變數 GOOGLE_APPLICATION_CREDENTIALS 設定為空字串 ("")。

預設情況下,GoogleDriveLoader 預期 credentials.json 檔案位於 ~/.credentials/credentials.json,但可以使用 credentials_path 關鍵字引數設定此路徑。token.json 也是如此 - 預設路徑:~/.credentials/token.json,建構函式參數:token_path

第一次使用 GoogleDriveLoader 時,您的瀏覽器中會顯示使用者驗證的同意畫面。驗證後,token.json 將在提供的路徑或預設路徑自動建立。此外,如果該路徑已存在 token.json,則不會提示您進行驗證。

GoogleDriveLoader 可以從 Google 文件文件 ID 清單或資料夾 ID 載入。您可以從 URL 取得您的資料夾和文件 ID

%pip install --upgrade --quiet langchain-google-community[drive]
from langchain_google_community import GoogleDriveLoader
API 參考文件:GoogleDriveLoader
loader = GoogleDriveLoader(
folder_id="1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5",
token_path="/path/where/you/want/token/to/be/created/google_token.json",
# Optional: configure whether to recursively fetch files from subfolders. Defaults to False.
recursive=False,
)
docs = loader.load()

當您傳遞 folder_id 時,預設會載入文件、試算表和 PDF 類型的所有檔案。您可以透過傳遞 file_types 引數來修改此行為

loader = GoogleDriveLoader(
folder_id="1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5",
file_types=["document", "sheet"],
recursive=False,
)

傳入選用的檔案載入器

在處理 Google 文件和 Google 試算表以外的檔案時,傳遞選用的檔案載入器給 GoogleDriveLoader 會很有幫助。如果您傳入檔案載入器,則該檔案載入器將用於不具有 Google 文件或 Google 試算表 MIME 類型的文件。以下是如何使用檔案載入器從 Google 雲端硬碟載入 Excel 文件的範例。

from langchain_community.document_loaders import UnstructuredFileIOLoader
from langchain_google_community import GoogleDriveLoader
file_id = "1x9WBtFPWMEAdjcJzPScRsjpjQvpSo_kz"
loader = GoogleDriveLoader(
file_ids=[file_id],
file_loader_cls=UnstructuredFileIOLoader,
file_loader_kwargs={"mode": "elements"},
)
docs = loader.load()
docs[0]

您也可以使用以下模式處理包含混合檔案和 Google 文件/試算表的資料夾

folder_id = "1asMOHY1BqBS84JcRbOag5LOJac74gpmD"
loader = GoogleDriveLoader(
folder_id=folder_id,
file_loader_cls=UnstructuredFileIOLoader,
file_loader_kwargs={"mode": "elements"},
)
docs = loader.load()
docs[0]

擴展用法

外部(非官方)組件可以管理 Google 雲端硬碟的複雜性:langchain-googledrive。它與 langchain_community.document_loaders.GoogleDriveLoader 相容,並且可以取代它使用。

為了與容器相容,驗證使用環境變數 GOOGLE_ACCOUNT_FILE 作為憑證檔案(適用於使用者或服務)。

%pip install --upgrade --quiet  langchain-googledrive
folder_id = "root"
# folder_id='1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5'
# Use the advanced version.
from langchain_googledrive.document_loaders import GoogleDriveLoader
loader = GoogleDriveLoader(
folder_id=folder_id,
recursive=False,
num_results=2, # Maximum number of file to load
)

預設情況下,具有這些 MIME 類型所有檔案都可以轉換為 Document

  • text/text
  • text/plain
  • text/html
  • text/csv
  • text/markdown
  • image/png
  • image/jpeg
  • application/epub+zip
  • application/pdf
  • application/rtf
  • application/vnd.google-apps.document (GDoc)
  • application/vnd.google-apps.presentation (GSlide)
  • application/vnd.google-apps.spreadsheet (GSheet)
  • application/vnd.google.colaboratory (Notebook colab)
  • application/vnd.openxmlformats-officedocument.presentationml.presentation (PPTX)
  • application/vnd.openxmlformats-officedocument.wordprocessingml.document (DOCX)

可以更新或自訂此設定。請參閱 GDriveLoader 的文件。

但是,必須安裝相應的套件。

%pip install --upgrade --quiet  unstructured
for doc in loader.load():
print("---")
print(doc.page_content.strip()[:60] + "...")

載入驗證身分

Google 雲端硬碟載入器擷取的每個檔案的授權身分可以與每個 Document 的元數據一起載入。

from langchain_google_community import GoogleDriveLoader

loader = GoogleDriveLoader(
folder_id=folder_id,
load_auth=True,
# Optional: configure whether to load authorized identities for each Document.
)

doc = loader.load()
API 參考文件:GoogleDriveLoader

您可以傳遞 load_auth=True,將 Google 雲端硬碟文件存取身分新增至元數據。

doc[0].metadata

載入擴展元數據

以下額外欄位也可以在每個 Document 的元數據中擷取

  • full_path - Google 雲端硬碟中檔案的完整路徑。
  • owner - 檔案的擁有者。
  • size - 檔案的大小。
from langchain_google_community import GoogleDriveLoader

loader = GoogleDriveLoader(
folder_id=folder_id,
load_extended_matadata=True,
# Optional: configure whether to load extended metadata for each Document.
)

doc = loader.load()
API 參考文件:GoogleDriveLoader

您可以傳遞 load_extended_matadata=True,將 Google 雲端硬碟文件擴展詳細資訊新增至元數據。

doc[0].metadata

自訂搜尋模式

所有與 Google list() API 相容的參數都可以設定。

若要指定 Google 請求的新模式,您可以使用 PromptTemplate()。提示的變數可以使用建構函式中的 kwargs 進行設定。提供了一些預先格式化的請求(使用 {query}{folder_id} 和/或 {mime_type}

您可以自訂選取檔案的條件。提供了一組預先定義的篩選器

範本描述
gdrive-all-in-folderfolder_id 傳回所有相容的檔案
gdrive-query在所有雲端硬碟中搜尋 query
gdrive-by-name搜尋名稱為 query 的檔案
gdrive-query-in-folderfolder_id 中搜尋 query(如果 recursive=true,則包含子資料夾)
gdrive-mime-type搜尋特定的 mime_type
gdrive-mime-type-in-folderfolder_id 中搜尋特定的 mime_type
gdrive-query-with-mime-type搜尋具有特定 mime_typequery
gdrive-query-with-mime-type-and-folder搜尋具有特定 mime_type 且位於 folder_id 中的 query
loader = GoogleDriveLoader(
folder_id=folder_id,
recursive=False,
template="gdrive-query", # Default template to use
query="machine learning",
num_results=2, # Maximum number of file to load
supportsAllDrives=False, # GDrive `list()` parameter
)
for doc in loader.load():
print("---")
print(doc.page_content.strip()[:60] + "...")

您可以自訂您的模式。

from langchain_core.prompts.prompt import PromptTemplate

loader = GoogleDriveLoader(
folder_id=folder_id,
recursive=False,
template=PromptTemplate(
input_variables=["query", "query_name"],
template="fullText contains '{query}' and name contains '{query_name}' and trashed=false",
), # Default template to use
query="machine learning",
query_name="ML",
num_results=2, # Maximum number of file to load
)
for doc in loader.load():
print("---")
print(doc.page_content.strip()[:60] + "...")
API 參考文件:PromptTemplate

轉換可以以 Markdown 格式管理

  • bullet
  • link
  • table
  • titles

將屬性 return_link 設定為 True 以匯出連結。

GSlide 和 GSheet 的模式

參數模式接受不同的值

  • "document":傳回每個文件的內文
  • "snippets":傳回每個檔案的描述(在 Google 雲端硬碟檔案的元數據中設定)。

參數 gslide_mode 接受不同的值

  • "single":一個包含 <PAGE BREAK> 的文件
  • "slide":每個投影片一個文件
  • "elements":每個元素一個文件。
loader = GoogleDriveLoader(
template="gdrive-mime-type",
mime_type="application/vnd.google-apps.presentation", # Only GSlide files
gslide_mode="slide",
num_results=2, # Maximum number of file to load
)
for doc in loader.load():
print("---")
print(doc.page_content.strip()[:60] + "...")

參數 gsheet_mode 接受不同的值

  • "single":每行產生一個文件
  • "elements":一個包含 Markdown 陣列和 <PAGE BREAK> 標籤的文件。
loader = GoogleDriveLoader(
template="gdrive-mime-type",
mime_type="application/vnd.google-apps.spreadsheet", # Only GSheet files
gsheet_mode="elements",
num_results=2, # Maximum number of file to load
)
for doc in loader.load():
print("---")
print(doc.page_content.strip()[:60] + "...")

進階用法

所有 Google 檔案在元數據中都有「描述」。此欄位可用於記憶文件的摘要或其他索引標籤(請參閱方法 lazy_update_description_with_summary())。

如果您使用 mode="snippet",則只有描述會用於內文。否則,metadata['summary'] 具有該欄位。

有時,可以使用特定篩選器從檔案名稱中擷取某些資訊,以選取具有特定條件的檔案。您可以使用篩選器。

有時,會傳回許多文件。沒有必要同時將所有文件都放在記憶體中。您可以使用方法的惰性版本,一次取得一個文件。最好使用複雜的查詢來代替遞迴搜尋。對於每個資料夾,如果您啟用 recursive=True,則必須套用查詢。

import os

loader = GoogleDriveLoader(
gdrive_api_file=os.environ["GOOGLE_ACCOUNT_FILE"],
num_results=2,
template="gdrive-query",
filter=lambda search, file: "#test" not in file.get("description", ""),
query="machine learning",
supportsAllDrives=False,
)
for doc in loader.load():
print("---")
print(doc.page_content.strip()[:60] + "...")

此頁面是否對您有幫助?