Azure Blob Storage는 클라우드를 위한 Microsoft의 객체 스토리지 솔루션입니다. Blob Storage는 대량의 비정형 데이터를 저장하는 데 최적화되어 있습니다. 비정형 데이터는 텍스트나 바이너리 데이터와 같이 특정 데이터 모델이나 정의를 따르지 않는 데이터입니다.
Azure Blob Storage는 다음과 같은 용도로 설계되었습니다:
  • 브라우저에 이미지나 문서를 직접 제공
  • 분산 액세스를 위한 파일 저장
  • 비디오 및 오디오 스트리밍
  • 로그 파일 작성
  • 백업 및 복원, 재해 복구 및 아카이빙을 위한 데이터 저장
  • 온프레미스 또는 Azure 호스팅 서비스에서 분석할 데이터 저장
이 노트북은 Azure Blob Storage의 컨테이너에서 document 객체를 로드하는 방법을 다룹니다. document loader에 대한 자세한 문서는 Azure Blob Storage Loader API Reference를 참조하세요.
langchain_community의 이전 AzureBlobStorageFileLoaderAzureBlobStorageContainerLoader 대신 이 새로운 loader를 사용하는 것이 권장됩니다. 새 loader로 마이그레이션하는 자세한 지침은 migration guide를 참조하세요.

Setup

pip install -qU langchain-azure-storage
from langchain_azure_storage.document_loaders import AzureBlobStorageLoader

컨테이너에서 로드

AzureBlobStorageLoader는 Azure Blob Storage의 주어진 컨테이너에서 모든 blob을 로드하며 account URL과 container name이 필요합니다. loader는 blob 콘텐츠(기본적으로 UTF-8 인코딩)와 blob URL을 포함한 메타데이터가 포함된 Document 객체를 반환합니다. 아래 예제를 참조하세요. 명시적인 credential 구성은 필요하지 않습니다. 현재 환경을 기반으로 Microsoft Entra ID tokens를 자동으로 검색하는 DefaultAzureCredential을 사용하기 때문입니다.
loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
)

for doc in loader.load():
    print(doc)
page_content='Lorem ipsum dolor sit amet.' metadata={'source': 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'}
prefix를 지정하여 해당 prefix로 시작하는 blob만 반환할 수도 있습니다.
loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    prefix="<prefix>",
)

blob 이름으로 컨테이너에서 로드

blob 이름 목록에서 document를 로드할 수 있으며, 이는 blob 목록을 가져오는 API 호출 대신 제공된 blob만 사용합니다.
loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    blob_names=["blob-1", "blob-2", "blob-3"],
)

기본 credentials 재정의

기본적으로 document loader는 DefaultAzureCredential을 사용합니다. 아래 예제는 이를 재정의하는 방법을 보여줍니다:
from azure.core.credentials import AzureSasCredential
from azure.identity import ManagedIdentityCredential
from langchain_azure_storage.document_loaders import AzureBlobStorageLoader

# Override with SAS token
loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    credential=AzureSasCredential("<sas-token>")
)

# Override with more specific token credential than the entire
# default credential chain (e.g., system-assigned managed identity)
loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    credential=ManagedIdentityCredential()
)

blob 콘텐츠 파싱 커스터마이징

현재 각 blob을 파싱할 때의 기본값은 파일 유형에 관계없이 UTF-8 인코딩으로 콘텐츠를 단일 Document 객체로 반환하는 것입니다. 특정 파싱이 필요한 파일 유형(예: PDF, CSV 등)이나 document 콘텐츠 형식을 제어하려는 경우, loader_factory 인수를 제공하여 이미 존재하는 document loader(예: PyPDFLoader, CSVLoader 등) 또는 커스터마이징된 loader를 사용할 수 있습니다. 이는 blob 콘텐츠를 임시 파일로 다운로드하여 작동합니다. 그런 다음 loader_factory가 filepath와 함께 호출되어 지정된 document loader를 사용하여 파일을 로드/파싱하고 Document 객체를 반환합니다. 아래는 PyPDFLoader를 사용하여 blob을 PDF로 파싱하는 데 사용되는 기본 loader를 재정의하는 방법을 보여줍니다:
from langchain_azure_storage.document_loaders import AzureBlobStorageLoader
from langchain_community.document_loaders import PyPDFLoader  # This example requires installing `langchain-community` and `pypdf`

loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    blob_names="<pdf-file.pdf>",
    loader_factory=PyPDFLoader,
)

for doc in loader.lazy_load():
    print(doc.page_content)  # Prints content of each page as a separate document
추가 구성을 제공하려면 아래와 같이 인스턴스화된 document loader를 반환하는 callable을 정의할 수 있습니다:
from langchain_azure_storage.document_loaders import AzureBlobStorageLoader
from langchain_community.document_loaders import PyPDFLoader  # This example requires installing `langchain-community` and `pypdf`

def loader_factory(file_path: str) -> PyPDFLoader:
    return PyPDFLoader(
        file_path,
        mode="single",  # To return the PDF as a single document instead of extracting documents by page
    )

loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    blob_names="<pdf-file.pdf>",
    loader_factory=loader_factory,
)

for doc in loader.lazy_load():
    print(doc.page_content)

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I