Google Drive
Google Drive 是由 Google 開發的檔案儲存和同步服務。
本筆記本涵蓋如何從 Google Drive
載入文件。目前僅支援 Google Docs
。
先決條件 (Prerequisites)
- 建立一個 Google Cloud 專案或使用現有專案
- 啟用 Google Drive API
- 授權桌面應用程式憑證
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
🧑 如何擷取您的 Google Docs 資料的指示 (🧑 Instructions for ingesting your Google Docs data)
將環境變數 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 Docs 文件 ID 清單或資料夾 ID 載入。 您可以從 URL 取得您的資料夾和文件 ID
- 資料夾 (Folder):https://drive.google.com/drive/u/0/folders/1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5 -> 資料夾 ID 為
"1yucgL9WGgWZdM1TOuKkeghlPizuzMYb5"
- 文件 (Document):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,
)
傳遞可選的文件載入器 (Passing in Optional File Loaders)
處理 Google Docs 和 Google Sheets 以外的檔案時,傳遞一個可選的文件載入器給 GoogleDriveLoader
很有幫助。 如果您傳遞一個檔案載入器,該檔案載入器將用於沒有 Google Docs 或 Google Sheets MIME 類型的文件。 以下是一個如何使用檔案載入器從 Google Drive 載入 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 Docs/Sheets 的資料夾
folder_id = "1asMOHY1BqBS84JcRbOag5LOJac74gpmD"
loader = GoogleDriveLoader(
folder_id=folder_id,
file_loader_cls=UnstructuredFileIOLoader,
file_loader_kwargs={"mode": "elements"},
)
docs = loader.load()
docs[0]
擴展用法 (Extended usage)
一個外部(非官方)組件可以管理 Google Drive 的複雜性: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] + "...")
載入驗證身分 (Loading auth Identities)
Google Drive Loader 擷取的每個檔案的授權身分可以與每個 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 Drive 文件存取身分新增至元資料。
doc[0].metadata
載入擴展元資料 (Loading extended metadata)
以下額外欄位也可以在每個 Document 的元資料中擷取
- full_path - Google Drive 中檔案的完整路徑。
- 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 Drive 文件擴展詳細資訊新增至元資料。
doc[0].metadata
自訂搜尋模式 (Customize the search pattern)
所有與 Google list()
API 相容的參數都可以設定。
要指定 Google 請求的新模式,您可以使用 PromptTemplate()
。 提示的變數可以使用建構函式中的 kwargs
進行設定。 提出了一些預先格式化的請求(使用 {query}
、{folder_id}
和/或 {mime_type}
)
您可以自訂選擇檔案的條件。 提出了一組預定義的篩選器
template | description |
---|---|
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 | 在 folder_id 中使用特定的 mime_type 搜尋 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 格式中管理
- 項目符號
- 連結
- 表格
- 標題
設定屬性 return_link
為 True
以匯出連結。
GSlide 和 GSheet 的模式
參數 mode 接受不同的值
- "document": 傳回每個文件的主體
- "snippets": 傳回每個檔案的描述(設定在 Google Drive 檔案的 metadata 中)。
參數 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 檔案在 metadata 中都有一個 'description'。此欄位可用於記憶文件的摘要或其他索引標籤(參閱方法 lazy_update_description_with_summary()
)。
如果您使用 mode="snippet"
,則只會將 description 用於主體。否則,metadata['summary']
具有該欄位。
有時,可以使用特定的篩選器從檔案名稱中提取一些資訊,以使用特定條件選擇某些檔案。您可以使用篩選器。
有時,會傳回許多文件。沒有必要同時將所有文件都放在記憶體中。您可以使用方法的 lazy 版本,一次取得一個文件。最好使用複雜的查詢來代替遞迴搜尋。如果您啟用 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] + "...")