BoxLoader 和 BoxBlobLoader
langchain-box
套件提供兩種從 Box 索引檔案的方法:BoxLoader
和 BoxBlobLoader
。BoxLoader
允許您擷取在 Box 中具有文字表示形式的檔案的文字表示形式。BoxBlobLoader
允許您下載任何文件或影像檔案的 Blob,以便使用您選擇的 Blob 剖析器進行處理。
本筆記本詳細介紹了如何開始使用這兩者。如需所有 BoxLoader 功能和組態的詳細文件,請前往 BoxLoader 和 BoxBlobLoader 的 API 參考頁面。
概觀
BoxLoader
類別可協助您從 Box 以 Langchain 的 Document
格式取得非結構化內容。您可以使用包含 Box 檔案 ID 的 List[str]
,或包含 Box 資料夾 ID 的 str
來執行此操作。
BoxBlobLoader
類別可協助您從 Box 以 Langchain 的 Blob
格式取得非結構化內容。您可以使用包含 Box 檔案 ID 的 List[str]
、包含 Box 資料夾 ID 的 str
、搜尋查詢或 BoxMetadataQuery
來執行此操作。
如果從具有資料夾 ID 的資料夾取得檔案,您也可以設定 Bool
以告知載入器也取得該資料夾中的所有子資料夾。
一個 Box 實例可以包含 PB 級的檔案,而資料夾可以包含數百萬個檔案。在選擇要索引的資料夾時,請務必慎重考慮。我們建議永遠不要以遞迴方式從資料夾 0 取得所有檔案。資料夾 ID 0 是您的根資料夾。
BoxLoader
將跳過沒有文字表示形式的檔案,而 BoxBlobLoader
將傳回所有文件和影像檔案的 Blob。
整合詳細資訊
類別 | 套件 | 本地 | 可序列化 | JS 支援 |
---|---|---|---|---|
BoxLoader | langchain_box | ✅ | ❌ | ❌ |
BoxBlobLoader | langchain_box | ✅ | ❌ | ❌ |
載入器功能
來源 | 文件延遲載入 | 非同步支援 |
---|---|---|
BoxLoader | ✅ | ❌ |
BoxBlobLoader | ✅ | ❌ |
設定
為了使用 Box 套件,您需要準備一些東西
- 一個 Box 帳戶 — 如果您不是目前的 Box 客戶,或想在您的生產 Box 實例之外進行測試,您可以使用免費開發人員帳戶。
- 一個 Box 應用程式 — 這在 開發人員主控台中設定,對於 Box AI,必須啟用
Manage AI
範圍。在這裡,您也將選擇您的驗證方法 - 應用程式必須由管理員啟用。對於免費開發人員帳戶,這是註冊該帳戶的任何人。
憑證
在這些範例中,我們將使用權杖驗證。這可以用於任何驗證方法。只需使用任何方法取得權杖即可。如果您想了解更多關於如何在 langchain-box
中使用其他驗證類型,請造訪Box 供應商文件。
import getpass
import os
box_developer_token = getpass.getpass("Enter your Box Developer Token: ")
Enter your Box Developer Token: ········
如果您想取得模型呼叫的自動追蹤,您也可以透過取消註解下方內容來設定您的 LangSmith API 金鑰
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"
安裝
安裝 langchain_box。
%pip install -qU langchain_box
初始化
載入檔案
如果您希望載入檔案,您必須在實例化時提供檔案 ID 的 List
。
這需要 1 個資訊
- box_file_ids (
List[str]
)- Box 檔案 ID 的清單。
BoxLoader
from langchain_box.document_loaders import BoxLoader
box_file_ids = ["1514555423624", "1514553902288"]
loader = BoxLoader(
box_developer_token=box_developer_token,
box_file_ids=box_file_ids,
character_limit=10000, # Optional. Defaults to no limit
)
BoxBlobLoader
from langchain_box.blob_loaders import BoxBlobLoader
box_file_ids = ["1514555423624", "1514553902288"]
loader = BoxBlobLoader(
box_developer_token=box_developer_token, box_file_ids=box_file_ids
)
從資料夾載入
如果您希望從資料夾載入檔案,您必須在實例化時提供包含 Box 資料夾 ID 的 str
。
這需要 1 個資訊
- box_folder_id (
str
)- 包含 Box 資料夾 ID 的字串。
BoxLoader
from langchain_box.document_loaders import BoxLoader
box_folder_id = "260932470532"
loader = BoxLoader(
box_folder_id=box_folder_id,
recursive=False, # Optional. return entire tree, defaults to False
character_limit=10000, # Optional. Defaults to no limit
)
BoxBlobLoader
from langchain_box.blob_loaders import BoxBlobLoader
box_folder_id = "260932470532"
loader = BoxBlobLoader(
box_folder_id=box_folder_id,
recursive=False, # Optional. return entire tree, defaults to False
)
使用 BoxBlobLoader 搜尋檔案
如果您需要搜尋檔案,BoxBlobLoader
提供兩種方法。首先,您可以執行全文檢索,並使用選用的搜尋選項來縮小搜尋範圍。
這需要 1 個資訊
- query (
str
)- 包含要執行的搜尋查詢的字串。
您也可以提供 BoxSearchOptions
物件來縮小搜尋範圍
- box_search_options (
BoxSearchOptions
)
BoxBlobLoader 搜尋
from langchain_box.blob_loaders import BoxBlobLoader
from langchain_box.utilities import BoxSearchOptions, DocumentFiles, SearchTypeFilter
box_folder_id = "260932470532"
box_search_options = BoxSearchOptions(
ancestor_folder_ids=[box_folder_id],
search_type_filter=[SearchTypeFilter.FILE_CONTENT],
created_date_range=["2023-01-01T00:00:00-07:00", "2024-08-01T00:00:00-07:00,"],
file_extensions=[DocumentFiles.DOCX, DocumentFiles.PDF],
k=200,
size_range=[1, 1000000],
updated_data_range=None,
)
loader = BoxBlobLoader(
box_developer_token=box_developer_token,
query="Victor",
box_search_options=box_search_options,
)
您也可以根據 Box Metadata 搜尋內容。如果您的 Box 實例使用 Metadata,您可以搜尋任何附加了特定 Metadata 範本的文件,這些文件符合特定條件,例如傳回任何總額大於或等於 500 美元且在上季建立的發票。
這需要 1 個資訊
- query (
str
)- 包含要執行的搜尋查詢的字串。
您也可以提供 BoxSearchOptions
物件來縮小搜尋範圍
- box_search_options (
BoxSearchOptions
)
BoxBlobLoader Metadata 查詢
from langchain_box.blob_loaders import BoxBlobLoader
from langchain_box.utilities import BoxMetadataQuery
query = BoxMetadataQuery(
template_key="enterprise_1234.myTemplate",
query="total >= :value",
query_params={"value": 100},
ancestor_folder_id="260932470532",
)
loader = BoxBlobLoader(box_metadata_query=query)
載入
BoxLoader
docs = loader.load()
docs[0]
Document(metadata={'source': 'https://dl.boxcloud.com/api/2.0/internal_files/1514555423624/versions/1663171610024/representations/extracted_text/content/', 'title': 'Invoice-A5555_txt'}, page_content='Vendor: AstroTech Solutions\nInvoice Number: A5555\n\nLine Items:\n - Gravitational Wave Detector Kit: $800\n - Exoplanet Terrarium: $120\nTotal: $920')
print(docs[0].metadata)
{'source': 'https://dl.boxcloud.com/api/2.0/internal_files/1514555423624/versions/1663171610024/representations/extracted_text/content/', 'title': 'Invoice-A5555_txt'}
BoxBlobLoader
for blob in loader.yield_blobs():
print(f"Blob({blob})")
Blob(id='1514555423624' metadata={'source': 'https://app.box.com/0/260935730128/260931903795/Invoice-A5555.txt', 'name': 'Invoice-A5555.txt', 'file_size': 150} data="b'Vendor: AstroTech Solutions\\nInvoice Number: A5555\\n\\nLine Items:\\n - Gravitational Wave Detector Kit: $800\\n - Exoplanet Terrarium: $120\\nTotal: $920'" mimetype='text/plain' path='https://app.box.com/0/260935730128/260931903795/Invoice-A5555.txt')
Blob(id='1514553902288' metadata={'source': 'https://app.box.com/0/260935730128/260931903795/Invoice-B1234.txt', 'name': 'Invoice-B1234.txt', 'file_size': 168} data="b'Vendor: Galactic Gizmos Inc.\\nInvoice Number: B1234\\nPurchase Order Number: 001\\nLine Items:\\n - Quantum Flux Capacitor: $500\\n - Anti-Gravity Pen Set: $75\\nTotal: $575'" mimetype='text/plain' path='https://app.box.com/0/260935730128/260931903795/Invoice-B1234.txt')
延遲載入
僅限 BoxLoader
page = []
for doc in loader.lazy_load():
page.append(doc)
if len(page) >= 10:
# do some paged operation, e.g.
# index.upsert(page)
page = []
額外欄位
所有 Box 連接器都提供從 Box FileFull
物件選取額外欄位的功能,以作為自訂 LangChain Metadata 傳回。每個物件都接受一個選用的 List[str]
,稱為 extra_fields
,其中包含傳回物件中的 json 金鑰,例如 extra_fields=["shared_link"]
。
連接器會將此欄位新增至整合需要運作的欄位清單,然後將結果新增至 Document
或 Blob
中傳回的 metadata,例如 "metadata" : { "source" : "source, "shared_link" : "shared_link" }
。如果該檔案沒有該欄位,則會傳回空字串,例如 "shared_link" : ""
。
API 參考
如需所有 BoxLoader 功能和組態的詳細文件,請前往API 參考
協助
如果您有問題,可以查看我們的開發人員文件,或在我們的開發人員社群中與我們聯繫。