Skip to main content
langchain-box 包提供了两种从 Box 索引文件的方法:BoxLoaderBoxBlobLoaderBoxLoader 允许您导入在 Box 中具有文本表示形式的文件的文本内容。BoxBlobLoader 允许您下载任何文档或图像文件的 blob,以便使用您选择的 blob 解析器进行处理。 本笔记本详细介绍了这两种方式的入门方法。有关所有 BoxLoader 功能和配置的详细文档,请访问 API 参考页面:BoxLoaderBoxBlobLoader

概述

BoxLoader 类帮助您以 LangChain 的 Document 格式从 Box 获取非结构化内容。您可以使用包含 Box 文件 ID 的 List[str],或包含 Box 文件夹 ID 的 str 来实现这一点。 BoxBlobLoader 类帮助您以 LangChain 的 Blob 格式从 Box 获取非结构化内容。您可以使用包含 Box 文件 ID 的 List[str]、包含 Box 文件夹 ID 的 str、搜索查询或 BoxMetadataQuery 来实现这一点。 如果从文件夹 ID 获取文件,您还可以设置一个 Bool 来告知加载器获取该文件夹中的所有子文件夹。
一个 Box 实例可以包含 PB 级别的文件,文件夹可以包含数百万个文件。请谨慎选择要索引的文件夹。我们建议切勿以递归方式获取文件夹 0 中的所有文件。文件夹 ID 0 是您的根文件夹。
BoxLoader 将跳过没有文本表示的文件,而 BoxBlobLoader 将为所有文档和图像文件返回 blob。

集成详情

本地可序列化JS 支持
BoxLoaderlangchain_box
BoxBlobLoaderlangchain_box

加载器特性

数据源文档懒加载异步支持
BoxLoader
BoxBlobLoader

安装配置

要使用 Box 包,您需要以下几项:
  • 一个 Box 账户 —— 如果您不是现有 Box 客户,或希望在生产 Box 实例之外进行测试,可以使用免费开发者账户
  • 一个 Box 应用 —— 在开发者控制台中配置,对于 Box AI,必须启用 Manage AI 权限范围。在这里您还需要选择身份验证方法。
  • 该应用必须经过管理员批准。对于免费开发者账户,批准者即为注册账户的用户。

凭证

在这些示例中,我们将使用 token 身份验证。这可以与任何身份验证方法一起使用,只需通过任何方式获取 token 即可。如果您想了解如何在 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 元数据查询

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
Invoice Number: A5555

Line Items:
    - Gravitational Wave Detector Kit: $800
    - Exoplanet Terrarium: $120
Total: $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"] 连接器会将此字段添加到集成正常运行所需的字段列表中,然后将结果添加到 DocumentBlob 返回的元数据中,例如 "metadata" : { "source" : "source", "shared_link" : "shared_link" }。如果该文件没有该字段,将返回空字符串,例如 "shared_link" : ""

API 参考

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

帮助

如果您有疑问,可以查阅我们的开发者文档或在我们的开发者社区中联系我们。