本指南将帮助你开始使用 Box 检索器 。有关所有 BoxRetriever 功能和配置的详细文档,请参阅 API 参考 。
BoxRetriever 类帮助你以 LangChain 的 Document 格式从 Box 获取非结构化内容。你可以通过基于全文搜索的文件搜索来实现这一点,或者使用 Box AI 检索包含针对文件进行 AI 查询结果的 Document 。这需要包含一个 List[str],其中包含 Box 文件 ID,例如 ["12345","67890"]
Box AI 需要 Enterprise Plus 许可证
没有文本表示的文件将被跳过。
集成详情
1:自带数据(即索引和搜索自定义文档语料库):
检索器 自托管 云端服务 包 BoxRetriever ❌ ✅ langchain-box
要使用 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: " )
如果你想要从各个查询中获取自动追踪,也可以通过取消以下注释来设置你的 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
实例化
现在我们可以实例化我们的检索器:
from langchain_box import BoxRetriever
retriever = BoxRetriever ( box_developer_token = box_developer_token )
为了进行更精细的搜索,我们提供了一系列选项来帮助你缩小结果范围。这使用 langchain_box.utilities.SearchOptions 结合 langchain_box.utilities.SearchTypeFilter 和 langchain_box.utilities.DocumentFiles 枚举来过滤创建日期、文件搜索部分,甚至将搜索范围限制到特定文件夹。
有关更多信息,请查看 API 参考 。
from langchain_box . utilities import BoxSearchOptions , DocumentFiles , SearchTypeFilter
box_folder_id = "260931903795"
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," ],
k = 200 ,
size_range = [ 1 , 1000000 ],
updated_data_range = None ,
)
retriever = BoxRetriever (
box_developer_token = box_developer_token , box_search_options = box_search_options
)
retriever . invoke ( "AstroTech Solutions" )
[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')]
Box AI
from langchain_box import BoxRetriever
box_file_ids = [ "1514555423624" , "1514553902288" ]
retriever = BoxRetriever (
box_developer_token = box_developer_token , box_file_ids = box_file_ids
)
使用方法
query = "What was the most expensive item purchased"
retriever . invoke ( query )
[Document(metadata={'source': 'Box AI', 'title': 'Box AI What was the most expensive item purchased'}, page_content='The most expensive item purchased is the **Gravitational Wave Detector Kit** from AstroTech Solutions, which costs **$800**.')]
使用 Box AI 和 BoxRetriever,你可以返回提示的答案、Box 用于获取答案的引用,或两者都返回。无论你如何选择使用 Box AI,检索器都返回一个 List[Document] 对象。我们通过两个 bool 参数提供此灵活性:answer 和 citations。answer 默认为 True,citations 默认为 False,因此如果你只想要答案,可以省略两者。如果你想要两者,只需包含 citations=True;如果只想要引用,则包含 answer=False 和 citations=True。
同时获取两者
retriever = BoxRetriever (
box_developer_token = box_developer_token , box_file_ids = box_file_ids , citations = True
)
retriever . invoke ( query )
[Document(metadata={'source': 'Box AI', 'title': 'Box AI What was the most expensive item purchased'}, page_content='The most expensive item purchased is the **Gravitational Wave Detector Kit** from AstroTech Solutions, which costs **$800**.'),
Document(metadata={'source': 'Box AI What was the most expensive item purchased', 'file_name': 'Invoice-A5555.txt', 'file_id': '1514555423624', 'file_type': 'file'}, page_content='Vendor: AstroTech Solutions\nInvoice Number: A5555\n\nLine Items:\n - Gravitational Wave Detector Kit: $800\n - Exoplanet Terrarium: $120\nTotal: $920')]
仅获取引用
retriever = BoxRetriever (
box_developer_token = box_developer_token ,
box_file_ids = box_file_ids ,
answer = False ,
citations = True ,
)
retriever . invoke ( query )
[Document(metadata={'source': 'Box AI What was the most expensive item purchased', 'file_name': 'Invoice-A5555.txt', 'file_id': '1514555423624', 'file_type': 'file'}, page_content='Vendor: AstroTech Solutions\nInvoice Number: A5555\n\nLine Items:\n - Gravitational Wave Detector Kit: $800\n - Exoplanet Terrarium: $120\nTotal: $920')]
作为 agent 工具使用
与其他检索器一样,BoxRetriever 也可以作为工具添加到 LangGraph agent 中。
from langchain_classic import hub
from langchain . agents import AgentExecutor , create_openai_tools_agent
from langchain . tools . retriever import create_retriever_tool
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," ],
k = 200 ,
size_range = [ 1 , 1000000 ],
updated_data_range = None ,
)
retriever = BoxRetriever (
box_developer_token = box_developer_token , box_search_options = box_search_options
)
box_search_tool = create_retriever_tool (
retriever ,
"box_search_tool" ,
"This tool is used to search Box and retrieve documents that match the search criteria" ,
)
tools = [ box_search_tool ]
prompt = hub . pull ( "hwchase17/openai-tools-agent" )
prompt . messages
llm = ChatOpenAI ( temperature = 0 , openai_api_key = openai_key )
agent = create_openai_tools_agent ( llm , tools , prompt )
agent_executor = AgentExecutor ( agent = agent , tools = tools )
/Users/shurrey/local/langchain/.venv/lib/python3.11/site-packages/langsmith/client.py:312: LangSmithMissingAPIKeyWarning: API key must be provided when using hosted LangSmith API
warnings.warn(
result = agent_executor . invoke (
{
"input" : "list the items I purchased from AstroTech Solutions from most expensive to least expensive"
}
)
print ( f "result { result [ ' output ' ] } " )
result The items you purchased from AstroTech Solutions from most expensive to least expensive are:
1. Gravitational Wave Detector Kit: $800
2. Exoplanet Terrarium: $120
Total: $920
额外字段
所有 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 参考
有关所有 BoxRetriever 功能和配置的详细文档,请参阅 API 参考 。
如有问题,可查看我们的开发者文档 或在我们的开发者社区 中联系我们。
通过 MCP 将这些文档连接 到 Claude、VSCode 等以获取实时答案。