Skip to main content
Azure Blob Storage 是 Microsoft 针对云端的对象存储解决方案。Blob Storage 经过优化,适合存储海量非结构化数据。非结构化数据是指不遵循特定数据模型或定义的数据,例如文本或二进制数据。
Azure Blob Storage 的设计用途包括:
  • 直接向浏览器提供图像或文档。
  • 存储用于分布式访问的文件。
  • 流式传输视频和音频。
  • 写入日志文件。
  • 存储用于备份、还原、灾难恢复和存档的数据。
  • 存储供本地或 Azure 托管服务分析的数据。
本笔记本介绍如何从 Azure Blob Storage 容器中加载文档对象。有关文档加载器的更详细文档,请参阅 Azure Blob Storage Loader API 参考
建议使用此新版加载器,而不是 langchain_community 中原有的 AzureBlobStorageFileLoaderAzureBlobStorageContainerLoader。有关迁移到新版加载器的详细说明,请参阅迁移指南

安装配置

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

从容器加载

AzureBlobStorageLoader 从 Azure Blob Storage 中指定容器加载所有 blob,需要提供账户 URL 和容器名称。加载器返回包含 blob 内容(默认为 UTF-8 编码)和元数据(包括 blob URL)的 Document 对象,如下例所示。 无需显式配置凭证,它使用 DefaultAzureCredential,可根据当前环境自动获取 Microsoft Entra ID token
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>'}
您还可以指定前缀,以只返回以该前缀开头的 blob。
loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    prefix="<prefix>",
)

按 blob 名称从容器加载

您可以从 blob 名称列表中加载文档,只使用提供的 blob,而不是通过 API 调用列出所有 blob。
loader = AzureBlobStorageLoader(
    "https://<storage-account-name>.blob.core.windows.net",
    "<container-name>",
    blob_names=["blob-1", "blob-2", "blob-3"],
)

覆盖默认凭证

默认情况下,文档加载器使用 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 等),或者当您需要控制文档内容格式时,可以提供 loader_factory 参数来使用现有的文档加载器(例如 PyPDFLoader、CSVLoader 等)或自定义加载器。 其工作原理是先将 blob 内容下载到临时文件,然后调用 loader_factory 并传入文件路径,使用指定的文档加载器加载/解析文件并返回 Document 对象。 以下示例展示了如何使用 PyPDFLoader 覆盖默认的 blob 解析为 PDF 的加载器:
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
如需提供额外配置,可以定义一个返回实例化文档加载器的可调用对象,如下所示:
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)