Skip to main content
Open In ColabOpen on GitHub

BoxLoader 和 BoxBlobLoader

The langchain-box 包提供两种方法从 Box 索引您的文件:BoxLoaderBoxBlobLoaderBoxLoader 允许您导入 Box 中具有文本表示形式的文件的文本表示形式。BoxBlobLoader 允许下载任何文档或图像文件的 blob,以便使用您选择的 blob 解析器进行处理。

这本笔记本详细介绍了如何使用这两种工具。有关 BoxLoader 所有功能和配置的详细文档,请参阅 BoxLoaderBoxBlobLoader 的 API 参考页面。

概览

The BoxLoader类帮助你将Box中的非结构化内容获取到Langchain的Document格式中。你可以通过包含Box文件ID的List[str]来实现,或者通过包含Box文件夹ID的str来实现。

The BoxBlobLoader 类别帮助你将 Box 中的非结构化内容转换为 Langchain 的 Blob 格式。你可以使用包含 Box 文件 ID 的 List[str]、包含 Box 文件夹 ID 的 str、搜索查询或 BoxMetadataQuery 来实现。

如果要从带有文件夹ID的文件夹中获取文件,您还可以设置Bool以告诉加载器获取该文件夹中的所有子文件夹。

信息

Box实例可以包含PB级别的文件,文件夹中可能包含数百万个文件。在选择要索引的文件夹时,请务必谨慎。我们建议您从不递归地获取所有来自文件夹0的文件。文件夹ID 0是您的根文件夹。

The BoxLoader 将跳过没有文本表示的文件,而 BoxBlobLoader 将返回所有文档和图像文件的二进制数据。

集成细节

Class本地序列化JS支持
BoxLoaderlangchain_box
BoxBlobLoaderlangchain_box

加载器功能

来源文档延迟加载异步支持
BoxLoader
BoxBlobLoader

设置

要使用 Box 包,您需要几件事:

  • 如果您不是当前的Box客户或希望在生产Box实例之外进行测试,可以使用一个免费开发者账号
  • 一个 Box 应用 — 这需要在 开发者控制台 中进行配置,对于 Box AI,必须启用 Manage AI 权限范围。在此处,您还需要选择您的认证方式
  • The app must be 由管理员启用. 对于免费开发者账号,这是指最初注册该账号的人。

Credentials

对于这些示例,我们将使用[token认证](0)。这可以与任何[认证方法](1)一起使用。只需使用任何方法获取令牌即可。如果您想了解更多关于如何在2中使用其他认证类型的信息,请访问[Box提供者](3)文档。

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
)

Load from folder

如果您希望从文件夹加载文件,您必须在初始化时提供一个str和Box文件夹ID。

这需要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件信息:

  • 查询 (str)- 包含要执行的搜索查询字符串。

您也可以提供一个BoxSearchOptions对象以缩小搜索范围

  • box_search_options (BoxSearchOptions)
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 元数据搜索内容。如果您使用了元数据的 Box 实例,您可以搜索任何带有特定元数据模板且满足某些条件的文档,例如返回所有总金额大于或等于 500 美元并且是在上一季度创建的所有发票。

这需要1件信息:

  • 查询 (str)- 包含要执行的搜索查询字符串。

您也可以提供一个BoxSearchOptions对象以缩小搜索范围

  • box_search_options (BoxSearchOptions)

BoxBlobLoader 元数据查询

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 元数据的能力。每个对象接受一个可选的参数 List[str],名为 extra_fields,包含返回对象中的 json 键,例如 extra_fields=["shared_link"]

The connector will add this field to the list of fields the integration needs to function and then add the results to the metadata returned in the Document or Blob, like "metadata" : { "source" : "source, "shared_link" : "shared_link" }. If the field is unavailable for that file, it will be returned as an empty string, like "shared_link" : "".

API 参考

详细介绍了所有BoxLoader功能和配置的文档,请访问API参考

帮助

如果您有任何问题,可以查看我们的开发者文档或在我们的开发者社区中与我们联系。