langchain-box 패키지는 Box에서 파일을 인덱싱하는 두 가지 방법을 제공합니다: BoxLoader와 BoxBlobLoader. BoxLoader를 사용하면 Box에서 텍스트 표현이 있는 파일의 텍스트 표현을 수집할 수 있습니다. BoxBlobLoader를 사용하면 원하는 blob parser로 처리하기 위해 모든 문서 또는 이미지 파일의 blob을 다운로드할 수 있습니다.
이 노트북은 이 두 가지 방법을 시작하는 방법을 자세히 설명합니다. 모든 BoxLoader 기능 및 구성에 대한 자세한 문서는 BoxLoader 및 BoxBlobLoader의 API Reference 페이지를 참조하세요.
BoxLoader 클래스는 Box의 비정형 콘텐츠를 LangChain의 Document 형식으로 가져오는 데 도움을 줍니다. Box file ID를 포함하는 List[str] 또는 Box folder ID를 포함하는 str을 사용하여 이 작업을 수행할 수 있습니다.
BoxBlobLoader 클래스는 Box의 비정형 콘텐츠를 LangChain의 Blob 형식으로 가져오는 데 도움을 줍니다. Box file ID를 포함하는 List[str], Box folder ID를 포함하는 str, 검색 쿼리 또는 BoxMetadataQuery를 사용하여 이 작업을 수행할 수 있습니다.
folder ID로 폴더에서 파일을 가져오는 경우, 해당 폴더의 모든 하위 폴더를 가져오도록 loader에 지시하는 Bool을 설정할 수도 있습니다.
Box 인스턴스는 페타바이트의 파일을 포함할 수 있으며, 폴더는 수백만 개의 파일을 포함할 수 있습니다. 인덱싱할 폴더를 선택할 때 의도적으로 선택하세요. 그리고 folder 0에서 재귀적으로 모든 파일을 가져오지 않는 것을 권장합니다. Folder ID 0은 루트 폴더입니다.
BoxLoader는 텍스트 표현이 없는 파일을 건너뛰는 반면, BoxBlobLoader는 모든 문서 및 이미지 파일에 대한 blob을 반환합니다.
Integration 세부 정보
Loader 기능
| Source | Document Lazy Loading | Async Support |
|---|
| BoxLoader | ✅ | ❌ |
| BoxBlobLoader | ✅ | ❌ |
Box 패키지를 사용하려면 몇 가지가 필요합니다:
- Box 계정 — 현재 Box 고객이 아니거나 프로덕션 Box 인스턴스 외부에서 테스트하려는 경우 무료 개발자 계정을 사용할 수 있습니다.
- Box 앱 — 이것은 개발자 콘솔에서 구성되며, Box AI의 경우
Manage AI scope가 활성화되어 있어야 합니다. 여기에서 인증 방법도 선택합니다.
- 앱은 관리자가 활성화해야 합니다. 무료 개발자 계정의 경우 계정에 가입한 사람이 관리자입니다.
자격 증명
이 예제에서는 token 인증을 사용합니다. 이것은 모든 인증 방법과 함께 사용할 수 있습니다. 어떤 방법론을 사용하든 token을 가져오기만 하면 됩니다. langchain-box에서 다른 인증 유형을 사용하는 방법에 대해 자세히 알아보려면 Box provider 문서를 방문하세요.
import getpass
import os
box_developer_token = getpass.getpass("Enter your Box Developer Token: ")
Enter your Box Developer Token: ········
모델 호출의 자동 추적을 활성화하려면 LangSmith API key를 설정하세요:
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"
langchain_box를 설치합니다.
pip install -qU langchain_box
초기화
파일 로드
파일을 로드하려면 인스턴스화 시 file id의 List를 제공해야 합니다.
이를 위해서는 1가지 정보가 필요합니다:
- box_file_ids (
List[str])- Box file 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 folder ID가 포함된 str을 제공해야 합니다.
이를 위해서는 1가지 정보가 필요합니다:
- box_folder_id (
str)- Box folder 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를 사용하는 경우, 지난 분기에 생성된 $500 이상의 총액을 가진 모든 송장을 반환하는 것과 같이 특정 기준을 충족하는 특정 Metadata Template이 첨부된 모든 문서를 검색할 수 있습니다.
이를 위해서는 1가지 정보가 필요합니다:
- query (
str)- 수행할 검색 쿼리를 포함하는 문자열.
검색 범위를 좁히기 위해 BoxSearchOptions 객체를 제공할 수도 있습니다
- box_search_options (
BoxSearchOptions)
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')
{'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')
Lazy Load
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 connector는 Box FileFull 객체에서 추가 필드를 선택하여 사용자 정의 LangChain metadata로 반환하는 기능을 제공합니다. 각 객체는 extra_fields=["shared_link"]와 같이 반환 객체의 json key를 포함하는 extra_fields라는 선택적 List[str]을 허용합니다.
connector는 이 필드를 integration이 작동하는 데 필요한 필드 목록에 추가한 다음 "metadata" : { "source" : "source, "shared_link" : "shared_link" }와 같이 Document 또는 Blob에서 반환된 metadata에 결과를 추가합니다. 해당 파일에 대해 필드를 사용할 수 없는 경우 "shared_link" : ""와 같이 빈 문자열로 반환됩니다.
API reference
모든 BoxLoader 기능 및 구성에 대한 자세한 문서는 API reference를 참조하세요.
도움말
질문이 있으시면 개발자 문서를 확인하거나 개발자 커뮤니티에서 문의하실 수 있습니다.