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元数据搜索内容。如果您的Box实例使用元数据,您可以搜索附加了特定元数据模板并满足特定条件的任何文档,例如返回上季度创建的总金额大于或等于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\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"]
。
连接器将将此字段添加到集成功能所需的字段列表中,然后将结果添加到Document
或Blob
中返回的元数据中,例如"metadata" : { "source" : "source, "shared_link" : "shared_link" }
。如果该文件不可用此字段,则将返回为空字符串,例如"shared_link" : ""
。
API 参考
有关所有BoxLoader功能和配置的详细文档,请访问API参考
帮助
如果您有任何疑问,可以查看我们的开发者文档或在我们的开发者社区中联系我们。