Google 雲端硬碟
Google 雲端硬碟是由 Google 開發的檔案儲存和同步服務。
本筆記本涵蓋如何從 Google 雲端硬碟
載入文件。目前僅支援 Google 文件
。
先決條件
- 建立 Google Cloud 專案或使用現有專案
- 啟用 Google Drive API
- 授權桌面應用程式的憑證
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
- 資料夾:https://drive.google.com/drive/u/0/folders/1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5 -> 資料夾 ID 為
"1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5"
- 文件:https://docs.google.com/document/d/1bfaMQ18_i56204VaQDVeAFpqEijJTgvurupdEDiaUQw/edit -> 文件 ID 為
"1bfaMQ18_i56204VaQDVeAFpqEijJTgvurupdEDiaUQw"
%pip install --upgrade --quiet langchain-google-community[drive]
from langchain_google_community import 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()
您可以傳遞 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()
您可以傳遞 load_extended_matadata=True,將 Google 雲端硬碟文件擴展詳細資訊新增至元數據。
doc[0].metadata
自訂搜尋模式
所有與 Google list()
API 相容的參數都可以設定。
若要指定 Google 請求的新模式,您可以使用 PromptTemplate()
。提示的變數可以使用建構函式中的 kwargs
進行設定。提供了一些預先格式化的請求(使用 {query}
、{folder_id}
和/或 {mime_type}
)
您可以自訂選取檔案的條件。提供了一組預先定義的篩選器
範本 | 描述 |
---|---|
gdrive-all-in-folder | 從 folder_id 傳回所有相容的檔案 |
gdrive-query | 在所有雲端硬碟中搜尋 query |
gdrive-by-name | 搜尋名稱為 query 的檔案 |
gdrive-query-in-folder | 在 folder_id 中搜尋 query (如果 recursive=true ,則包含子資料夾) |
gdrive-mime-type | 搜尋特定的 mime_type |
gdrive-mime-type-in-folder | 在 folder_id 中搜尋特定的 mime_type |
gdrive-query-with-mime-type | 搜尋具有特定 mime_type 的 query |
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] + "...")
轉換可以以 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] + "...")